// Acorn is a tiny, fast JavaScript parser written in JavaScript.
//
// Acorn was written by Marijn Haverbeke, Ingvar Stepanyan, and
// various contributors and released under an MIT license.
//
// Git repositories for Acorn are available at
//
//     http://marijnhaverbeke.nl/git/acorn
//     https://github.com/ternjs/acorn.git
//
// Please use the [github bug tracker][ghbt] to report issues.
//
// [ghbt]: https://github.com/ternjs/acorn/issues
//
// This file defines the main parser interface. The library also comes
// with a [error-tolerant parser][dammit] and an
// [abstract syntax tree walker][walk], defined in other files.
//
// [dammit]: acorn_loose.js
// [walk]: util/walk.js

/**
 * @license RequireJS i18n 2.0.4 Copyright (c) 2010-2012, The Dojo Foundation All Rights Reserved.
 * Available via the MIT or new BSD license.
 * see: http://github.com/requirejs/i18n for details
 */

/*******************************************************************************
 * @license
 * Copyright (c) 2014 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials are made 
 * available under the terms of the Eclipse Public License v1.0 
 * (http://www.eclipse.org/legal/epl-v10.html), and the Eclipse Distribution 
 * License v1.0 (http://www.eclipse.org/org/documents/edl-v10.html). 
 * 
 ******************************************************************************/

/*******************************************************************************
 * @license
 * Copyright (c) 2014, 2017 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials are made
 * available under the terms of the Eclipse Public License v1.0
 * (http://www.eclipse.org/legal/epl-v10.html), and the Eclipse Distribution
 * License v1.0 (http://www.eclipse.org/org/documents/edl-v10.html).
 *
 ******************************************************************************/

/**
 * @license RequireJS text 2.0.12 Copyright (c) 2010-2014, The Dojo Foundation All Rights Reserved.
 * Available via the MIT or new BSD license.
 * see: http://github.com/requirejs/text for details
 */

/*******************************************************************************
 * @license
 * Copyright (c) 2015 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials are made 
 * available under the terms of the Eclipse Public License v1.0 
 * (http://www.eclipse.org/legal/epl-v10.html), and the Eclipse Distribution 
 * License v1.0 (http://www.eclipse.org/org/documents/edl-v10.html). 
 * 
 * Contributors: IBM Corporation - initial API and implementation
 ******************************************************************************/

/*
  Copyright (C) 2012-2013 Yusuke Suzuki <utatane.tea@gmail.com>
  Copyright (C) 2012 Ariya Hidayat <ariya.hidayat@gmail.com>

  Redistribution and use in source and binary forms, with or without
  modification, are permitted provided that the following conditions are met:

    * Redistributions of source code must retain the above copyright
      notice, this list of conditions and the following disclaimer.
    * Redistributions in binary form must reproduce the above copyright
      notice, this list of conditions and the following disclaimer in the
      documentation and/or other materials provided with the distribution.

  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
  DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

/*******************************************************************************
 * @license
 * Copyright (c) 2013, 2016 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials are made 
 * available under the terms of the Eclipse Public License v1.0 
 * (http://www.eclipse.org/legal/epl-v10.html), and the Eclipse Distribution 
 * License v1.0 (http://www.eclipse.org/org/documents/edl-v10.html). 
 *
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/

/*******************************************************************************
 * @license
 * Copyright (c) 2015, 2017 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials are made 
 * available under the terms of the Eclipse Public License v1.0 
 * (http://www.eclipse.org/legal/epl-v10.html), and the Eclipse Distribution 
 * License v1.0 (http://www.eclipse.org/org/documents/edl-v10.html). 
 *
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/

/*******************************************************************************
 * @license
 * Copyright (c) 2015, 2016 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials are made 
 * available under the terms of the Eclipse Public License v1.0 
 * (http://www.eclipse.org/legal/epl-v10.html), and the Eclipse Distribution 
 * License v1.0 (http://www.eclipse.org/org/documents/edl-v10.html). 
 *
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/

/*******************************************************************************
 * @license
 * Copyright (c) 2015, 2016 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials are made 
 * available under the terms of the Eclipse Public License v1.0 
 * (http://www.eclipse.org/legal/epl-v10.html), and the Eclipse Distribution 
 * License v1.0 (http://www.eclipse.org/org/documents/edl-v10.html). 
 *
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/

/*******************************************************************************
* @license
* Copyright (c) 2016 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials are made 
* available under the terms of the Eclipse Public License v1.0 
* (http://www.eclipse.org/legal/epl-v10.html), and the Eclipse Distribution 
* License v1.0 (http://www.eclipse.org/org/documents/edl-v10.html). 
*
* Contributors:
*     IBM Corporation - initial API and implementation
*******************************************************************************/

/*******************************************************************************
 * @license
 * Copyright (c) 2013 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials are made 
 * available under the terms of the Eclipse Public License v1.0 
 * (http://www.eclipse.org/legal/epl-v10.html), and the Eclipse Distribution 
 * License v1.0 (http://www.eclipse.org/org/documents/edl-v10.html). 
 * 
 * Contributors: IBM Corporation - initial API and implementation
 ******************************************************************************/

/*
  Copyright (C) 2014 Yusuke Suzuki <utatane.tea@gmail.com>
  Redistribution and use in source and binary forms, with or without
  modification, are permitted provided that the following conditions are met:
    * Redistributions of source code must retain the above copyright
      notice, this list of conditions and the following disclaimer.
    * Redistributions in binary form must reproduce the above copyright
      notice, this list of conditions and the following disclaimer in the
      documentation and/or other materials provided with the distribution.
  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
  DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

/*
  Copyright (C) 2015 Yusuke Suzuki <utatane.tea@gmail.com>

  Redistribution and use in source and binary forms, with or without
  modification, are permitted provided that the following conditions are met:

    * Redistributions of source code must retain the above copyright
      notice, this list of conditions and the following disclaimer.
    * Redistributions in binary form must reproduce the above copyright
      notice, this list of conditions and the following disclaimer in the
      documentation and/or other materials provided with the distribution.

  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
  DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

/*
  Copyright (C) 2012-2014 Yusuke Suzuki <utatane.tea@gmail.com>
  Copyright (C) 2013 Alex Seville <hi@alexanderseville.com>
  Copyright (C) 2014 Thiago de Arruda <tpadilha84@gmail.com>

  Redistribution and use in source and binary forms, with or without
  modification, are permitted provided that the following conditions are met:

    * Redistributions of source code must retain the above copyright
      notice, this list of conditions and the following disclaimer.
    * Redistributions in binary form must reproduce the above copyright
      notice, this list of conditions and the following disclaimer in the
      documentation and/or other materials provided with the distribution.

  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
  DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

/*******************************************************************************
 * @license
 * Copyright (c) 2014 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials are made 
 * available under the terms of the Eclipse Public License v1.0 
 * (http://www.eclipse.org/legal/epl-v10.html), and the Eclipse Distribution 
 * License v1.0 (http://www.eclipse.org/org/documents/edl-v10.html). 
 * 
 * Contributors: IBM Corporation - initial API and implementation
 ******************************************************************************/

/**
 * @fileoverview Rule to flag wrapping non-iife in parens
 * @author Gyandeep Singh
 * @copyright 2015 Gyandeep Singh. All rights reserved.
 */

/**
 * @fileoverview Rule to disallow a duplicate case label.
 * @author Dieter Oberkofler
 * @author Burak Yigit Kaya
 * @copyright 2015 Dieter Oberkofler. All rights reserved.
 * @copyright 2015 Burak Yigit Kaya. All rights reserved.
 */

/**
	 * @fileoverview Disallow parenthesising higher precedence subexpressions.
	 * @author Michael Ficarra
	 * @copyright 2014 Michael Ficarra. All rights reserved.
	 * See LICENSE file in root directory for full license.
	 */

/**
 * @fileoverview Validate strings passed to the RegExp constructor
 * @author Michael Ficarra
 * @copyright 2014 Michael Ficarra. All rights reserved.
 */

/**
	 * @fileoverview Rule to disalow whitespace that is not a tab or space, whitespace inside strings and comments are allowed
	 * @author Jonathan Kingston
	 * @copyright 2014 Jonathan Kingston. All rights reserved.
	 */

/*******************************************************************************
 * @license
 * Copyright (c) 2013, 2017 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials are made
 * available under the terms of the Eclipse Public License v1.0
 * (http://www.eclipse.org/legal/epl-v10.html), and the Eclipse Distribution
 * License v1.0 (http://www.eclipse.org/org/documents/edl-v10.html).
 *
 * Contributors:
 *	 IBM Corporation - initial API and implementation
 *******************************************************************************/

/**
 * @fileoverview An object that creates fix commands for rules.
 * @author Nicholas C. Zakas
 * @copyright 2015 Nicholas C. Zakas. All rights reserved.
 * See LICENSE file in root directory for full license.
 */

/**
	 * @fileoverview RuleContext utility for rules
	 * @author Nicholas C. Zakas
	 * @copyright 2013 Nicholas C. Zakas. All rights reserved.
	 * See LICENSE file in root directory for full license.
	 */

/*******************************************************************************
 * @license
 * Copyright (c) 2012 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials are made 
 * available under the terms of the Eclipse Public License v1.0 
 * (http://www.eclipse.org/legal/epl-v10.html), and the Eclipse Distribution 
 * License v1.0 (http://www.eclipse.org/org/documents/edl-v10.html). 
 *
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/

/*******************************************************************************
 * @license
 * Copyright (c) 2013, 2015 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials are made 
 * available under the terms of the Eclipse Public License v1.0 
 * (http://www.eclipse.org/legal/epl-v10.html), and the Eclipse Distribution 
 * License v1.0 (http://www.eclipse.org/org/documents/edl-v10.html). 
 *
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/

/**
	 * @fileoverview Object to handle access and retrieval of tokens.
	 * @author Brandon Mills
	 * @copyright 2014 Nicholas C. Zakas. All rights reserved.
	 * @copyright 2014 Brandon Mills. All rights reserved.
	 */

/**
 * @fileoverview Abstraction of JavaScript source code.
 * @author Nicholas C. Zakas
 * @copyright 2015 Nicholas C. Zakas. All rights reserved.
 * See LICENSE file in root directory for full license.
 */

/**
	 * @fileoverview Validates configs.
	 * @author Brandon Mills
	 * @copyright 2015 Brandon Mills
	 */

/*
			 The MIT License (MIT)

			 Copyright (c) 2012 Nicholas Fisher

			 Permission is hereby granted, free of charge, to any person obtaining a copy
			 of this software and associated documentation files (the "Software"), to deal
			 in the Software without restriction, including without limitation the rights
			 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
			 copies of the Software, and to permit persons to whom the Software is
			 furnished to do so, subject to the following conditions:

			 The above copyright notice and this permission notice shall be included in
			 all copies or substantial portions of the Software.

			 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
			 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
			 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
			 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
			 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
			 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
			 THE SOFTWARE.
			 */

/*******************************************************************************
 * @license
 * Copyright (c) 2015, 2016 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials are made 
 * available under the terms of the Eclipse Public License v1.0 
 * (http://www.eclipse.org/legal/epl-v10.html), and the Eclipse Distribution 
 * License v1.0 (http://www.eclipse.org/org/documents/edl-v10.html). 
 *
 * Contributors:
 *	 IBM Corporation - Allow original requirejs plugin to find files in Orion workspace
 *******************************************************************************/

/*******************************************************************************
 * @license
 * Copyright (c) 2012 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials are made 
 * available under the terms of the Eclipse Public License v1.0 
 * (http://www.eclipse.org/legal/epl-v10.html), and the Eclipse Distribution 
 * License v1.0 (http://www.eclipse.org/org/documents/edl-v10.html). 
 * 
 * Contributors: IBM Corporation - initial API and implementation
 ******************************************************************************/

/*******************************************************************************
 * @license
 * Copyright (c) 2015, 2016 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials are made
 * available under the terms of the Eclipse Public License v1.0
 * (http://www.eclipse.org/legal/epl-v10.html), and the Eclipse Distribution
 * License v1.0 (http://www.eclipse.org/org/documents/edl-v10.html).
 *
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/

/*******************************************************************************
 * @license
 * Copyright (c) 2015 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials are made 
 * available under the terms of the Eclipse Public License v1.0 
 * (http://www.eclipse.org/legal/epl-v10.html), and the Eclipse Distribution 
 * License v1.0 (http://www.eclipse.org/org/documents/edl-v10.html). 
 *
 * Contributors:
 *     IBM Corporation - Allow original requirejs plugin to find files in Orion workspace
 *******************************************************************************/

/*******************************************************************************
 * @license
 * Copyright (c) 2013, 2017 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials are made 
 * available under the terms of the Eclipse Public License v1.0 
 * (http://www.eclipse.org/legal/epl-v10.html), and the Eclipse Distribution 
 * License v1.0 (http://www.eclipse.org/org/documents/edl-v10.html). 
 *
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/

/*******************************************************************************
 * @license
 * Copyright (c) 2015, 2017 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials are made
 * available under the terms of the Eclipse Public License v1.0
 * (http://www.eclipse.org/legal/epl-v10.html), and the Eclipse Distribution
 * License v1.0 (http://www.eclipse.org/org/documents/edl-v10.html).
 *
 * Contributors:
 *	 IBM Corporation - initial API and implementation
 *******************************************************************************/

/*******************************************************************************
 * @license
 * Copyright (c) 2015, 2016 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials are made 
 * available under the terms of the Eclipse Public License v1.0 
 * (http://www.eclipse.org/legal/epl-v10.html), and the Eclipse Distribution 
 * License v1.0 (http://www.eclipse.org/org/documents/edl-v10.html). 
 *
 * Contributors:
 *     IBM Corporation - Allow original requirejs plugin to find files in Orion workspace
 *******************************************************************************/

/*******************************************************************************
 * @license
 * Copyright (c) 2016 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials are made 
 * available under the terms of the Eclipse Public License v1.0 
 * (http://www.eclipse.org/legal/epl-v10.html), and the Eclipse Distribution 
 * License v1.0 (http://www.eclipse.org/org/documents/edl-v10.html). 
 *
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/

/*******************************************************************************
 * @license
 * Copyright (c) 2015 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials are made 
 * available under the terms of the Eclipse Public License v1.0 
 * (http://www.eclipse.org/legal/epl-v10.html), and the Eclipse Distribution 
 * License v1.0 (http://www.eclipse.org/org/documents/edl-v10.html). 
 *
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/

/*******************************************************************************
 * @license
 * Copyright (c) 2016, 2017 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials are made 
 * available under the terms of the Eclipse Public License v1.0 
 * (http://www.eclipse.org/legal/epl-v10.html), and the Eclipse Distribution 
 * License v1.0 (http://www.eclipse.org/org/documents/edl-v10.html). 
 *
 * Contributors:
 *     IBM Corporation - Allow original requirejs plugin to find files in Orion workspace
 *******************************************************************************/

/*******************************************************************************
 * @license
 * Copyright (c) 2016, 2017 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials are made
 * available under the terms of the Eclipse Public License v1.0
 * (http://www.eclipse.org/legal/epl-v10.html), and the Eclipse Distribution
 * License v1.0 (http://www.eclipse.org/org/documents/edl-v10.html).
 *
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/

/*

  The MIT License (MIT)

  Copyright (c) 2007-2013 Einar Lielmanis and contributors.

  Permission is hereby granted, free of charge, to any person
  obtaining a copy of this software and associated documentation files
  (the "Software"), to deal in the Software without restriction,
  including without limitation the rights to use, copy, modify, merge,
  publish, distribute, sublicense, and/or sell copies of the Software,
  and to permit persons to whom the Software is furnished to do so,
  subject to the following conditions:

  The above copyright notice and this permission notice shall be
  included in all copies or substantial portions of the Software.

  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
  BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
  ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  SOFTWARE.

 JS Beautifier
---------------


  Written by Einar Lielmanis, <einar@jsbeautifier.org>
      http://jsbeautifier.org/

  Originally converted to javascript by Vital, <vital76@gmail.com>
  "End braces on own line" added by Chris J. Shull, <chrisjshull@gmail.com>
  Parsing improvements for brace-less statements by Liam Newman <bitwiseman@gmail.com>


  Usage:
    js_beautify(js_source_text);
    js_beautify(js_source_text, options);

  The options are:
    indent_size (default 4)          - indentation size,
    indent_char (default space)      - character to indent with,
    preserve_newlines (default true) - whether existing line breaks should be preserved,
    max_preserve_newlines (default unlimited) - maximum number of line breaks to be preserved in one chunk,

    jslint_happy (default false) - if true, then jslint-stricter mode is enforced.

            jslint_happy        !jslint_happy
            ---------------------------------
            function ()         function()

            switch () {         switch() {
            case 1:               case 1:
              break;                break;
            }                   }

    space_after_anon_function (default false) - should the space before an anonymous function's parens be added, "function()" vs "function ()",
          NOTE: This option is overriden by jslint_happy (i.e. if jslint_happy is true, space_after_anon_function is true by design)

    brace_style (default "collapse") - "collapse-preserve-inline" | "collapse" | "expand" | "end-expand" | "none"
            put braces on the same line as control statements (default), or put braces on own line (Allman / ANSI style), or just put end braces on own line, or attempt to keep them where they are.

    space_before_conditional (default true) - should the space before conditional statement be added, "if(true)" vs "if (true)",

    unescape_strings (default false) - should printable characters in strings encoded in \xNN notation be unescaped, "example" vs "\x65\x78\x61\x6d\x70\x6c\x65"

    wrap_line_length (default unlimited) - lines should wrap at next opportunity after this number of characters.
          NOTE: This is not a hard limit. Lines will continue until a point where a newline would
                be preserved if it were present.

    end_with_newline (default false)  - end output with a newline


    e.g

    js_beautify(js_source_text, {
      'indent_size': 1,
      'indent_char': '\t'
    });

*/

// if (a) if (b) if(c) d(); else e(); else f();

/*******************************************************************************
 * @license
 * Copyright (c) 2016 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials are made 
 * available under the terms of the Eclipse Public License v1.0 
 * (http://www.eclipse.org/legal/epl-v10.html), and the Eclipse Distribution 
 * License v1.0 (http://www.eclipse.org/org/documents/edl-v10.html). 
 *
 * Contributors:
 *	 IBM Corporation - Allow original requirejs plugin to find files in Orion workspace
 *******************************************************************************/

/*******************************************************************************
 * @license
 * Copyright (c) 2015, 2016 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials are made
 * available under the terms of the Eclipse Public License v1.0
 * (http://www.eclipse.org/legal/epl-v10.html), and the Eclipse Distribution
 * License v1.0 (http://www.eclipse.org/org/documents/edl-v10.html).
 *
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/

/*******************************************************************************
 * @license
 * Copyright (c) 2012, 2015 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials are made 
 * available under the terms of the Eclipse Public License v1.0 
 * (http://www.eclipse.org/legal/epl-v10.html), and the Eclipse Distribution 
 * License v1.0 (http://www.eclipse.org/org/documents/edl-v10.html). 
 *
 * Contributors: IBM Corporation - initial API and implementation
 *******************************************************************************/

/*******************************************************************************
 * @license
 * Copyright (c) 2015, 2017 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials are made
 * available under the terms of the Eclipse Public License v1.0
 * (http://www.eclipse.org/legal/epl-v10.html), and the Eclipse Distribution
 * License v1.0 (http://www.eclipse.org/org/documents/edl-v10.html).
 *
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/

!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define("acorn/dist/acorn",["exports"],t):t(e.acorn=e.acorn||{})}(this,function(e){"use strict";function t(e,t){for(var n=65536,r=0;r<t.length;r+=2){if(n+=t[r],n>e)return!1;if(n+=t[r+1],n>=e)return!0}}function n(e,n){return 65>e?36===e:91>e?!0:97>e?95===e:123>e?!0:65535>=e?e>=170&&k.test(String.fromCharCode(e)):n===!1?!1:t(e,j)}function r(e,n){return 48>e?36===e:58>e?!0:65>e?!1:91>e?!0:97>e?95===e:123>e?!0:65535>=e?e>=170&&E.test(String.fromCharCode(e)):n===!1?!1:t(e,j)||t(e,T)}function o(e,t){return new O(e,{beforeExpr:!0,binop:t})}function s(e,t){return void 0===t&&(t={}),t.keyword=e,A[e]=new O(e,t)}function a(e){return 10===e||13===e||8232===e||8233==e}function i(e){return"[object Array]"===Object.prototype.toString.call(e)}function l(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function c(e,t){for(var n=1,r=0;;){P.lastIndex=r;var o=P.exec(e);if(!(o&&o.index<t))return new L(n,t-r);++n,r=o.index+o[0].length}}function p(e){var t={};for(var n in z)t[n]=e&&l(e,n)?e[n]:z[n];if(null==t.allowReserved&&(t.allowReserved=t.ecmaVersion<5),i(t.onToken)){var r=t.onToken;t.onToken=function(e){return r.push(e)}}return i(t.onComment)&&(t.onComment=u(t,t.onComment)),t}function u(e,t){return function(n,r,o,s,a,i){var l={type:n?"Block":"Line",value:r,start:o,end:s};e.locations&&(l.loc=new F(this,a,i)),e.ranges&&(l.range=[o,s]),t.push(l)}}function d(e){return new RegExp("^("+e.replace(/ /g,"|")+")$")}function h(e,t,n,r){return e.type=t,e.end=n,this.options.locations&&(e.loc.end=r),this.options.ranges&&(e.range[1]=n),e}function f(e,t,n,r){try{return new RegExp(e,t)}catch(o){if(void 0!==n)throw o instanceof SyntaxError&&r.raise(n,"Error parsing regular expression: "+o.message),o}}function m(e){return 65535>=e?String.fromCharCode(e):(e-=65536,String.fromCharCode((e>>10)+55296,(1023&e)+56320))}function g(e,t){return new U(t,e).parse()}function b(e,t,n){var r=new U(n,e,t);return r.nextToken(),r.parseExpression()}function y(e,t){return new U(t,e)}var v={3:"abstract boolean byte char class double enum export extends final float goto implements import int interface long native package private protected public short static super synchronized throws transient volatile",5:"class enum extends super const export import",6:"enum",7:"enum",strict:"implements interface let package private protected public static yield",strictBind:"eval arguments"},x="break case catch continue debugger default do else finally for function if return switch throw try var while with null true false instanceof typeof void delete new in this",_={5:x,6:x+" const class extends export import super"},S="ªµºÀ-ÖØ-öø-ˁˆ-ˑˠ-ˤˬˮͰ-ʹͶͷͺ-ͽͿΆΈ-ΊΌΎ-ΡΣ-ϵϷ-ҁҊ-ԯԱ-Ֆՙա-ևא-תװ-ײؠ-يٮٯٱ-ۓەۥۦۮۯۺ-ۼۿܐܒ-ܯݍ-ޥޱߊ-ߪߴߵߺࠀ-ࠕࠚࠤࠨࡀ-ࡘࢠ-ࢴࢶ-ࢽऄ-हऽॐक़-ॡॱ-ঀঅ-ঌএঐও-নপ-রলশ-হঽৎড়ঢ়য়-ৡৰৱਅ-ਊਏਐਓ-ਨਪ-ਰਲਲ਼ਵਸ਼ਸਹਖ਼-ੜਫ਼ੲ-ੴઅ-ઍએ-ઑઓ-નપ-રલળવ-હઽૐૠૡૹଅ-ଌଏଐଓ-ନପ-ରଲଳଵ-ହଽଡ଼ଢ଼ୟ-ୡୱஃஅ-ஊஎ-ஐஒ-கஙசஜஞடணதந-பம-ஹௐఅ-ఌఎ-ఐఒ-నప-హఽౘ-ౚౠౡಀಅ-ಌಎ-ಐಒ-ನಪ-ಳವ-ಹಽೞೠೡೱೲഅ-ഌഎ-ഐഒ-ഺഽൎൔ-ൖൟ-ൡൺ-ൿඅ-ඖක-නඳ-රලව-ෆก-ะาำเ-ๆກຂຄງຈຊຍດ-ທນ-ຟມ-ຣລວສຫອ-ະາຳຽເ-ໄໆໜ-ໟༀཀ-ཇཉ-ཬྈ-ྌက-ဪဿၐ-ၕၚ-ၝၡၥၦၮ-ၰၵ-ႁႎႠ-ჅჇჍა-ჺჼ-ቈቊ-ቍቐ-ቖቘቚ-ቝበ-ኈኊ-ኍነ-ኰኲ-ኵኸ-ኾዀዂ-ዅወ-ዖዘ-ጐጒ-ጕጘ-ፚᎀ-ᎏᎠ-Ᏽᏸ-ᏽᐁ-ᙬᙯ-ᙿᚁ-ᚚᚠ-ᛪᛮ-ᛸᜀ-ᜌᜎ-ᜑᜠ-ᜱᝀ-ᝑᝠ-ᝬᝮ-ᝰក-ឳៗៜᠠ-ᡷᢀ-ᢨᢪᢰ-ᣵᤀ-ᤞᥐ-ᥭᥰ-ᥴᦀ-ᦫᦰ-ᧉᨀ-ᨖᨠ-ᩔᪧᬅ-ᬳᭅ-ᭋᮃ-ᮠᮮᮯᮺ-ᯥᰀ-ᰣᱍ-ᱏᱚ-ᱽᲀ-ᲈᳩ-ᳬᳮ-ᳱᳵᳶᴀ-ᶿḀ-ἕἘ-Ἕἠ-ὅὈ-Ὅὐ-ὗὙὛὝὟ-ώᾀ-ᾴᾶ-ᾼιῂ-ῄῆ-ῌῐ-ΐῖ-Ίῠ-Ῥῲ-ῴῶ-ῼⁱⁿₐ-ₜℂℇℊ-ℓℕ℘-ℝℤΩℨK-ℹℼ-ℿⅅ-ⅉⅎⅠ-ↈⰀ-Ⱞⰰ-ⱞⱠ-ⳤⳫ-ⳮⳲⳳⴀ-ⴥⴧⴭⴰ-ⵧⵯⶀ-ⶖⶠ-ⶦⶨ-ⶮⶰ-ⶶⶸ-ⶾⷀ-ⷆⷈ-ⷎⷐ-ⷖⷘ-ⷞ々-〇〡-〩〱-〵〸-〼ぁ-ゖ゛-ゟァ-ヺー-ヿㄅ-ㄭㄱ-ㆎㆠ-ㆺㇰ-ㇿ㐀-䶵一-鿕ꀀ-ꒌꓐ-ꓽꔀ-ꘌꘐ-ꘟꘪꘫꙀ-ꙮꙿ-ꚝꚠ-ꛯꜗ-ꜟꜢ-ꞈꞋ-ꞮꞰ-ꞷꟷ-ꠁꠃ-ꠅꠇ-ꠊꠌ-ꠢꡀ-ꡳꢂ-ꢳꣲ-ꣷꣻꣽꤊ-ꤥꤰ-ꥆꥠ-ꥼꦄ-ꦲꧏꧠ-ꧤꧦ-ꧯꧺ-ꧾꨀ-ꨨꩀ-ꩂꩄ-ꩋꩠ-ꩶꩺꩾ-ꪯꪱꪵꪶꪹ-ꪽꫀꫂꫛ-ꫝꫠ-ꫪꫲ-ꫴꬁ-ꬆꬉ-ꬎꬑ-ꬖꬠ-ꬦꬨ-ꬮꬰ-ꭚꭜ-ꭥꭰ-ꯢ가-힣ힰ-ퟆퟋ-ퟻ豈-舘並-龎ﬀ-ﬆﬓ-ﬗיִײַ-ﬨשׁ-זּטּ-לּמּנּסּףּפּצּ-ﮱﯓ-ﴽﵐ-ﶏﶒ-ﷇﷰ-ﷻﹰ-ﹴﹶ-ﻼＡ-Ｚａ-ｚｦ-ﾾￂ-ￇￊ-ￏￒ-ￗￚ-ￜ",w="‌‍·̀-ͯ·҃-֑҇-ׇֽֿׁׂׅׄؐ-ًؚ-٩ٰۖ-ۜ۟-۪ۤۧۨ-ۭ۰-۹ܑܰ-݊ަ-ް߀-߉߫-߳ࠖ-࠙ࠛ-ࠣࠥ-ࠧࠩ-࡙࠭-࡛ࣔ-ࣣ࣡-ःऺ-़ा-ॏ॑-ॗॢॣ०-९ঁ-ঃ়া-ৄেৈো-্ৗৢৣ০-৯ਁ-ਃ਼ਾ-ੂੇੈੋ-੍ੑ੦-ੱੵઁ-ઃ઼ા-ૅે-ૉો-્ૢૣ૦-૯ଁ-ଃ଼ା-ୄେୈୋ-୍ୖୗୢୣ୦-୯ஂா-ூெ-ைொ-்ௗ௦-௯ఀ-ఃా-ౄె-ైొ-్ౕౖౢౣ౦-౯ಁ-ಃ಼ಾ-ೄೆ-ೈೊ-್ೕೖೢೣ೦-೯ഁ-ഃാ-ൄെ-ൈൊ-്ൗൢൣ൦-൯ංඃ්ා-ුූෘ-ෟ෦-෯ෲෳัิ-ฺ็-๎๐-๙ັິ-ູົຼ່-ໍ໐-໙༘༙༠-༩༹༵༷༾༿ཱ-྄྆྇ྍ-ྗྙ-ྼ࿆ါ-ှ၀-၉ၖ-ၙၞ-ၠၢ-ၤၧ-ၭၱ-ၴႂ-ႍႏ-ႝ፝-፟፩-፱ᜒ-᜔ᜲ-᜴ᝒᝓᝲᝳ឴-៓៝០-៩᠋-᠍᠐-᠙ᢩᤠ-ᤫᤰ-᤻᥆-᥏᧐-᧚ᨗ-ᨛᩕ-ᩞ᩠-᩿᩼-᪉᪐-᪙᪰-᪽ᬀ-ᬄ᬴-᭄᭐-᭙᭫-᭳ᮀ-ᮂᮡ-ᮭ᮰-᮹᯦-᯳ᰤ-᰷᱀-᱉᱐-᱙᳐-᳔᳒-᳨᳭ᳲ-᳴᳸᳹᷀-᷵᷻-᷿‿⁀⁔⃐-⃥⃜⃡-⃰⳯-⵿⳱ⷠ-〪ⷿ-゙゚〯꘠-꘩꙯ꙴ-꙽ꚞꚟ꛰꛱ꠂ꠆ꠋꠣ-ꠧꢀꢁꢴ-ꣅ꣐-꣙꣠-꣱꤀-꤉ꤦ-꤭ꥇ-꥓ꦀ-ꦃ꦳-꧀꧐-꧙ꧥ꧰-꧹ꨩ-ꨶꩃꩌꩍ꩐-꩙ꩻ-ꩽꪰꪲ-ꪴꪷꪸꪾ꪿꫁ꫫ-ꫯꫵ꫶ꯣ-ꯪ꯬꯭꯰-꯹ﬞ︀-️︠-︯︳︴﹍-﹏０-９＿",k=new RegExp("["+S+"]"),E=new RegExp("["+S+w+"]");S=w=null;var j=[0,11,2,25,2,18,2,1,2,14,3,13,35,122,70,52,268,28,4,48,48,31,17,26,6,37,11,29,3,35,5,7,2,4,43,157,19,35,5,35,5,39,9,51,157,310,10,21,11,7,153,5,3,0,2,43,2,1,4,0,3,22,11,22,10,30,66,18,2,1,11,21,11,25,71,55,7,1,65,0,16,3,2,2,2,26,45,28,4,28,36,7,2,27,28,53,11,21,11,18,14,17,111,72,56,50,14,50,785,52,76,44,33,24,27,35,42,34,4,0,13,47,15,3,22,0,2,0,36,17,2,24,85,6,2,0,2,3,2,14,2,9,8,46,39,7,3,1,3,21,2,6,2,1,2,4,4,0,19,0,13,4,159,52,19,3,54,47,21,1,2,0,185,46,42,3,37,47,21,0,60,42,86,25,391,63,32,0,449,56,264,8,2,36,18,0,50,29,881,921,103,110,18,195,2749,1070,4050,582,8634,568,8,30,114,29,19,47,17,3,32,20,6,18,881,68,12,0,67,12,65,0,32,6124,20,754,9486,1,3071,106,6,12,4,8,8,9,5991,84,2,70,2,1,3,0,3,1,3,3,2,11,2,0,2,6,2,64,2,3,3,7,2,6,2,27,2,3,2,4,2,0,4,6,2,339,3,24,2,24,2,30,2,24,2,30,2,24,2,30,2,24,2,30,2,24,2,7,4149,196,60,67,1213,3,2,26,2,1,2,0,3,0,2,9,2,3,2,0,2,0,7,0,5,0,2,0,2,0,2,2,2,1,2,0,3,0,2,0,2,0,2,0,2,0,2,1,2,0,3,3,2,6,2,3,2,3,2,0,2,9,2,16,6,2,2,4,2,16,4421,42710,42,4148,12,221,3,5761,10591,541],T=[509,0,227,0,150,4,294,9,1368,2,2,1,6,3,41,2,5,0,166,1,1306,2,54,14,32,9,16,3,46,10,54,9,7,2,37,13,2,9,52,0,13,2,49,13,10,2,4,9,83,11,7,0,161,11,6,9,7,3,57,0,2,6,3,1,3,2,10,0,11,1,3,6,4,4,193,17,10,9,87,19,13,9,214,6,3,8,28,1,83,16,16,9,82,12,9,9,84,14,5,9,423,9,838,7,2,7,17,9,57,21,2,13,19882,9,135,4,60,6,26,9,1016,45,17,3,19723,1,5319,4,4,5,9,7,3,6,31,3,149,2,1418,49,513,54,5,49,9,0,15,0,23,4,2,14,1361,6,2,16,3,6,2,1,2,4,2214,6,110,6,6,9,792487,239],O=function(e,t){void 0===t&&(t={}),this.label=e,this.keyword=t.keyword,this.beforeExpr=!!t.beforeExpr,this.startsExpr=!!t.startsExpr,this.isLoop=!!t.isLoop,this.isAssign=!!t.isAssign,this.prefix=!!t.prefix,this.postfix=!!t.postfix,this.binop=t.binop||null,this.updateContext=null},C={beforeExpr:!0},R={startsExpr:!0},A={},D={num:new O("num",R),regexp:new O("regexp",R),string:new O("string",R),name:new O("name",R),eof:new O("eof"),bracketL:new O("[",{beforeExpr:!0,startsExpr:!0}),bracketR:new O("]"),braceL:new O("{",{beforeExpr:!0,startsExpr:!0}),braceR:new O("}"),parenL:new O("(",{beforeExpr:!0,startsExpr:!0}),parenR:new O(")"),comma:new O(",",C),semi:new O(";",C),colon:new O(":",C),dot:new O("."),question:new O("?",C),arrow:new O("=>",C),template:new O("template"),ellipsis:new O("...",C),backQuote:new O("`",R),dollarBraceL:new O("${",{beforeExpr:!0,startsExpr:!0}),eq:new O("=",{beforeExpr:!0,isAssign:!0}),assign:new O("_=",{beforeExpr:!0,isAssign:!0}),incDec:new O("++/--",{prefix:!0,postfix:!0,startsExpr:!0}),prefix:new O("prefix",{beforeExpr:!0,prefix:!0,startsExpr:!0}),logicalOR:o("||",1),logicalAND:o("&&",2),bitwiseOR:o("|",3),bitwiseXOR:o("^",4),bitwiseAND:o("&",5),equality:o("==/!=",6),relational:o("</>",7),bitShift:o("<</>>",8),plusMin:new O("+/-",{beforeExpr:!0,binop:9,prefix:!0,startsExpr:!0}),modulo:o("%",10),star:o("*",10),slash:o("/",10),starstar:new O("**",{beforeExpr:!0}),_break:s("break"),_case:s("case",C),_catch:s("catch"),_continue:s("continue"),_debugger:s("debugger"),_default:s("default",C),_do:s("do",{isLoop:!0,beforeExpr:!0}),_else:s("else",C),_finally:s("finally"),_for:s("for",{isLoop:!0}),_function:s("function",R),_if:s("if"),_return:s("return",C),_switch:s("switch"),_throw:s("throw",C),_try:s("try"),_var:s("var"),_const:s("const"),_while:s("while",{isLoop:!0}),_with:s("with"),_new:s("new",{beforeExpr:!0,startsExpr:!0}),_this:s("this",R),_super:s("super",R),_class:s("class"),_extends:s("extends",C),_export:s("export"),_import:s("import"),_null:s("null",R),_true:s("true",R),_false:s("false",R),_in:s("in",{beforeExpr:!0,binop:7}),_instanceof:s("instanceof",{beforeExpr:!0,binop:7}),_typeof:s("typeof",{beforeExpr:!0,prefix:!0,startsExpr:!0}),_void:s("void",{beforeExpr:!0,prefix:!0,startsExpr:!0}),_delete:s("delete",{beforeExpr:!0,prefix:!0,startsExpr:!0})},M=/\r\n?|\n|\u2028|\u2029/,P=new RegExp(M.source,"g"),N=/[\u1680\u180e\u2000-\u200a\u202f\u205f\u3000\ufeff]/,I=/(?:\s|\/\/.*|\/\*[^]*?\*\/)*/g,L=function(e,t){this.line=e,this.column=t};L.prototype.offset=function(e){return new L(this.line,this.column+e)};var F=function(e,t,n){this.start=t,this.end=n,null!==e.sourceFile&&(this.source=e.sourceFile)},z={ecmaVersion:6,sourceType:"script",onInsertedSemicolon:null,onTrailingComma:null,allowReserved:null,allowReturnOutsideFunction:!1,allowImportExportEverywhere:!1,allowHashBang:!1,locations:!1,onToken:null,onComment:null,ranges:!1,program:null,sourceFile:null,directSourceFile:null,preserveParens:!1,plugins:{}},q={},U=function(e,t,n){this.options=e=p(e),this.sourceFile=e.sourceFile,this.keywords=d(_[e.ecmaVersion>=6?6:5]);var r=e.allowReserved?"":v[e.ecmaVersion]+("module"==e.sourceType?" await":"");this.reservedWords=d(r);var o=(r?r+" ":"")+v.strict;this.reservedWordsStrict=d(o),this.reservedWordsStrictBind=d(o+" "+v.strictBind),this.input=String(t),this.containsEsc=!1,this.loadPlugins(e.plugins),n?(this.pos=n,this.lineStart=Math.max(0,this.input.lastIndexOf("\n",n)),this.curLine=this.input.slice(0,this.lineStart).split(M).length):(this.pos=this.lineStart=0,this.curLine=1),this.type=D.eof,this.value=null,this.start=this.end=this.pos,this.startLoc=this.endLoc=this.curPosition(),this.lastTokEndLoc=this.lastTokStartLoc=null,this.lastTokStart=this.lastTokEnd=this.pos,this.context=this.initialContext(),this.exprAllowed=!0,this.strict=this.inModule="module"===e.sourceType,this.potentialArrowAt=-1,this.inFunction=this.inGenerator=!1,this.labels=[],0===this.pos&&e.allowHashBang&&"#!"===this.input.slice(0,2)&&this.skipLineComment(2)};U.prototype.isKeyword=function(e){return this.keywords.test(e)},U.prototype.isReservedWord=function(e){return this.reservedWords.test(e)},U.prototype.extend=function(e,t){this[e]=t(this[e])},U.prototype.loadPlugins=function(e){var t=this;for(var n in e){var r=q[n];if(!r)throw new Error("Plugin '"+n+"' not found");r(t,e[n])}},U.prototype.parse=function(){var e=this.options.program||this.startNode();return this.nextToken(),this.parseTopLevel(e)};var B=U.prototype;B.isUseStrict=function(e){return this.options.ecmaVersion>=5&&"ExpressionStatement"===e.type&&"Literal"===e.expression.type&&"use strict"===e.expression.raw.slice(1,-1)},B.eat=function(e){return this.type===e?(this.next(),!0):!1},B.isContextual=function(e){return this.type===D.name&&this.value===e},B.eatContextual=function(e){return this.value===e&&this.eat(D.name)},B.expectContextual=function(e){this.eatContextual(e)||this.unexpected()},B.canInsertSemicolon=function(){return this.type===D.eof||this.type===D.braceR||M.test(this.input.slice(this.lastTokEnd,this.start))},B.insertSemicolon=function(){return this.canInsertSemicolon()?(this.options.onInsertedSemicolon&&this.options.onInsertedSemicolon(this.lastTokEnd,this.lastTokEndLoc),!0):void 0},B.semicolon=function(){this.eat(D.semi)||this.insertSemicolon()||this.unexpected()},B.afterTrailingComma=function(e){return this.type==e?(this.options.onTrailingComma&&this.options.onTrailingComma(this.lastTokStart,this.lastTokStartLoc),this.next(),!0):void 0},B.expect=function(e){this.eat(e)||this.unexpected()},B.unexpected=function(e){this.raise(null!=e?e:this.start,"Unexpected token")};var W=function(){this.shorthandAssign=0,this.trailingComma=0};B.checkPatternErrors=function(e,t){var n=e&&e.trailingComma;return t?void(n&&this.raise(n,"Comma is not permitted after the rest element")):!!n},B.checkExpressionErrors=function(e,t){var n=e&&e.shorthandAssign;return t?void(n&&this.raise(n,"Shorthand property assignments are valid only in destructuring patterns")):!!n};var G=U.prototype;G.parseTopLevel=function(e){var t=this,n=!0;for(e.body||(e.body=[]);this.type!==D.eof;){var r=t.parseStatement(!0,!0);e.body.push(r),n&&(t.isUseStrict(r)&&t.setStrict(!0),n=!1)}return this.next(),this.options.ecmaVersion>=6&&(e.sourceType=this.options.sourceType),this.finishNode(e,"Program")};var V={kind:"loop"},H={kind:"switch"};G.isLet=function(){if(this.type!==D.name||this.options.ecmaVersion<6||"let"!=this.value)return!1;I.lastIndex=this.pos;var e=I.exec(this.input),t=this.pos+e[0].length,o=this.input.charCodeAt(t);if(91===o||123==o)return!0;if(n(o,!0)){for(var s=t+1;r(this.input.charCodeAt(s),!0);++s);var a=this.input.slice(t,s);if(!this.isKeyword(a))return!0}return!1},G.parseStatement=function(e,t){var n,r=this.type,o=this.startNode();switch(this.isLet()&&(r=D._var,n="let"),r){case D._break:case D._continue:return this.parseBreakContinueStatement(o,r.keyword);case D._debugger:return this.parseDebuggerStatement(o);case D._do:return this.parseDoStatement(o);case D._for:return this.parseForStatement(o);case D._function:return!e&&this.options.ecmaVersion>=6&&this.unexpected(),this.parseFunctionStatement(o);case D._class:return e||this.unexpected(),this.parseClass(o,!0);case D._if:return this.parseIfStatement(o);case D._return:return this.parseReturnStatement(o);case D._switch:return this.parseSwitchStatement(o);case D._throw:return this.parseThrowStatement(o);case D._try:return this.parseTryStatement(o);case D._const:case D._var:return n=n||this.value,e||"var"==n||this.unexpected(),this.parseVarStatement(o,n);case D._while:return this.parseWhileStatement(o);case D._with:return this.parseWithStatement(o);case D.braceL:return this.parseBlock();case D.semi:return this.parseEmptyStatement(o);case D._export:case D._import:return this.options.allowImportExportEverywhere||(t||this.raise(this.start,"'import' and 'export' may only appear at the top level"),this.inModule||this.raise(this.start,"'import' and 'export' may appear only with 'sourceType: module'")),r===D._import?this.parseImport(o):this.parseExport(o);default:var s=this.value,a=this.parseExpression();return r===D.name&&"Identifier"===a.type&&this.eat(D.colon)?this.parseLabeledStatement(o,s,a):this.parseExpressionStatement(o,a)}},G.parseBreakContinueStatement=function(e,t){var n=this,r="break"==t;this.next(),this.eat(D.semi)||this.insertSemicolon()?e.label=null:this.type!==D.name?this.unexpected():(e.label=this.parseIdent(),this.semicolon());for(var o=0;o<this.labels.length;++o){var s=n.labels[o];if(null==e.label||s.name===e.label.name){if(null!=s.kind&&(r||"loop"===s.kind))break;if(e.label&&r)break}}return o===this.labels.length&&this.raise(e.start,"Unsyntactic "+t),this.finishNode(e,r?"BreakStatement":"ContinueStatement")},G.parseDebuggerStatement=function(e){return this.next(),this.semicolon(),this.finishNode(e,"DebuggerStatement")},G.parseDoStatement=function(e){return this.next(),this.labels.push(V),e.body=this.parseStatement(!1),this.labels.pop(),this.expect(D._while),e.test=this.parseParenExpression(),this.options.ecmaVersion>=6?this.eat(D.semi):this.semicolon(),this.finishNode(e,"DoWhileStatement")},G.parseForStatement=function(e){if(this.next(),this.labels.push(V),this.expect(D.parenL),this.type===D.semi)return this.parseFor(e,null);var t=this.isLet();if(this.type===D._var||this.type===D._const||t){var n=this.startNode(),r=t?"let":this.value;return this.next(),this.parseVar(n,!0,r),this.finishNode(n,"VariableDeclaration"),!(this.type===D._in||this.options.ecmaVersion>=6&&this.isContextual("of"))||1!==n.declarations.length||"var"!==r&&n.declarations[0].init?this.parseFor(e,n):this.parseForIn(e,n)}var o=new W,s=this.parseExpression(!0,o);return this.type===D._in||this.options.ecmaVersion>=6&&this.isContextual("of")?(this.checkPatternErrors(o,!0),this.toAssignable(s),this.checkLVal(s),this.parseForIn(e,s)):(this.checkExpressionErrors(o,!0),this.parseFor(e,s))},G.parseFunctionStatement=function(e){return this.next(),this.parseFunction(e,!0)},G.parseIfStatement=function(e){return this.next(),e.test=this.parseParenExpression(),e.consequent=this.parseStatement(!1),e.alternate=this.eat(D._else)?this.parseStatement(!1):null,this.finishNode(e,"IfStatement")},G.parseReturnStatement=function(e){return this.inFunction||this.options.allowReturnOutsideFunction||this.raise(this.start,"'return' outside of function"),this.next(),this.eat(D.semi)||this.insertSemicolon()?e.argument=null:(e.argument=this.parseExpression(),this.semicolon()),this.finishNode(e,"ReturnStatement")},G.parseSwitchStatement=function(e){var t=this;this.next(),e.discriminant=this.parseParenExpression(),e.cases=[],this.expect(D.braceL),this.labels.push(H);for(var n,r=!1;this.type!=D.braceR;)if(t.type===D._case||t.type===D._default){var o=t.type===D._case;n&&t.finishNode(n,"SwitchCase"),e.cases.push(n=t.startNode()),n.consequent=[],t.next(),o?n.test=t.parseExpression():(r&&t.raiseRecoverable(t.lastTokStart,"Multiple default clauses"),r=!0,n.test=null),t.expect(D.colon)}else n||t.unexpected(),n.consequent.push(t.parseStatement(!0));return n&&this.finishNode(n,"SwitchCase"),this.next(),this.labels.pop(),this.finishNode(e,"SwitchStatement")},G.parseThrowStatement=function(e){return this.next(),M.test(this.input.slice(this.lastTokEnd,this.start))&&this.raise(this.lastTokEnd,"Illegal newline after throw"),e.argument=this.parseExpression(),this.semicolon(),this.finishNode(e,"ThrowStatement")};var $=[];G.parseTryStatement=function(e){if(this.next(),e.block=this.parseBlock(),e.handler=null,this.type===D._catch){var t=this.startNode();this.next(),this.expect(D.parenL),t.param=this.parseBindingAtom(),this.checkLVal(t.param,!0),this.expect(D.parenR),t.body=this.parseBlock(),e.handler=this.finishNode(t,"CatchClause")}return e.finalizer=this.eat(D._finally)?this.parseBlock():null,e.handler||e.finalizer||this.raise(e.start,"Missing catch or finally clause"),this.finishNode(e,"TryStatement")},G.parseVarStatement=function(e,t){return this.next(),this.parseVar(e,!1,t),this.semicolon(),this.finishNode(e,"VariableDeclaration")},G.parseWhileStatement=function(e){return this.next(),e.test=this.parseParenExpression(),this.labels.push(V),e.body=this.parseStatement(!1),this.labels.pop(),this.finishNode(e,"WhileStatement")},G.parseWithStatement=function(e){return this.strict&&this.raise(this.start,"'with' in strict mode"),this.next(),e.object=this.parseParenExpression(),e.body=this.parseStatement(!1),this.finishNode(e,"WithStatement")},G.parseEmptyStatement=function(e){return this.next(),this.finishNode(e,"EmptyStatement")},G.parseLabeledStatement=function(e,t,n){for(var r=this,o=0;o<this.labels.length;++o)r.labels[o].name===t&&r.raise(n.start,"Label '"+t+"' is already declared");for(var s=this.type.isLoop?"loop":this.type===D._switch?"switch":null,a=this.labels.length-1;a>=0;a--){var i=r.labels[a];if(i.statementStart!=e.start)break;i.statementStart=r.start,i.kind=s}return this.labels.push({name:t,kind:s,statementStart:this.start}),e.body=this.parseStatement(!0),this.labels.pop(),e.label=n,this.finishNode(e,"LabeledStatement")},G.parseExpressionStatement=function(e,t){return e.expression=t,this.semicolon(),this.finishNode(e,"ExpressionStatement")},G.parseBlock=function(e){var t,n=this,r=this.startNode(),o=!0;for(r.body=[],this.expect(D.braceL);!this.eat(D.braceR);){var s=n.parseStatement(!0);r.body.push(s),o&&e&&n.isUseStrict(s)&&(t=n.strict,n.setStrict(n.strict=!0)),o=!1}return t===!1&&this.setStrict(!1),this.finishNode(r,"BlockStatement")},G.parseFor=function(e,t){return e.init=t,this.expect(D.semi),e.test=this.type===D.semi?null:this.parseExpression(),this.expect(D.semi),e.update=this.type===D.parenR?null:this.parseExpression(),this.expect(D.parenR),e.body=this.parseStatement(!1),this.labels.pop(),this.finishNode(e,"ForStatement")},G.parseForIn=function(e,t){var n=this.type===D._in?"ForInStatement":"ForOfStatement";return this.next(),e.left=t,e.right=this.parseExpression(),this.expect(D.parenR),e.body=this.parseStatement(!1),this.labels.pop(),this.finishNode(e,n)},G.parseVar=function(e,t,n){var r=this;for(e.declarations=[],e.kind=n;;){var o=r.startNode();if(r.parseVarId(o),r.eat(D.eq)?o.init=r.parseMaybeAssign(t):"const"!==n||r.type===D._in||r.options.ecmaVersion>=6&&r.isContextual("of")?"Identifier"==o.id.type||t&&(r.type===D._in||r.isContextual("of"))?o.init=null:r.raise(r.lastTokEnd,"Complex binding patterns require an initialization value"):r.unexpected(),e.declarations.push(r.finishNode(o,"VariableDeclarator")),!r.eat(D.comma))break}return e},G.parseVarId=function(e){e.id=this.parseBindingAtom(),this.checkLVal(e.id,!0)},G.parseFunction=function(e,t,n){this.initFunction(e),this.options.ecmaVersion>=6&&(e.generator=this.eat(D.star));var r=this.inGenerator;return this.inGenerator=e.generator,(t||this.type===D.name)&&(e.id=this.parseIdent()),this.parseFunctionParams(e),this.parseFunctionBody(e,n),this.inGenerator=r,this.finishNode(e,t?"FunctionDeclaration":"FunctionExpression")},G.parseFunctionParams=function(e){this.expect(D.parenL),e.params=this.parseBindingList(D.parenR,!1,!1,!0)},G.parseClass=function(e,t){var n=this;this.next(),this.parseClassId(e,t),this.parseClassSuper(e);var r=this.startNode(),o=!1;for(r.body=[],this.expect(D.braceL);!this.eat(D.braceR);)if(!n.eat(D.semi)){var s=n.startNode(),a=n.eat(D.star),i=n.type===D.name&&"static"===n.value;n.parsePropertyName(s),s["static"]=i&&n.type!==D.parenL,s["static"]&&(a&&n.unexpected(),a=n.eat(D.star),n.parsePropertyName(s)),s.kind="method";var l=!1;if(!s.computed){var c=s.key;a||"Identifier"!==c.type||n.type===D.parenL||"get"!==c.name&&"set"!==c.name||(l=!0,s.kind=c.name,c=n.parsePropertyName(s)),!s["static"]&&("Identifier"===c.type&&"constructor"===c.name||"Literal"===c.type&&"constructor"===c.value)&&(o&&n.raise(c.start,"Duplicate constructor in the same class"),l&&n.raise(c.start,"Constructor can't have get/set modifier"),a&&n.raise(c.start,"Constructor can't be a generator"),s.kind="constructor",o=!0)}if(n.parseClassMethod(r,s,a),l){var p="get"===s.kind?0:1;if(s.value.params.length!==p){var u=s.value.start;"get"===s.kind?n.raiseRecoverable(u,"getter should have no params"):n.raiseRecoverable(u,"setter should have exactly one param")}"set"===s.kind&&"RestElement"===s.value.params[0].type&&n.raise(s.value.params[0].start,"Setter cannot use rest params")}}return e.body=this.finishNode(r,"ClassBody"),this.finishNode(e,t?"ClassDeclaration":"ClassExpression")},G.parseClassMethod=function(e,t,n){t.value=this.parseMethod(n),e.body.push(this.finishNode(t,"MethodDefinition"))},G.parseClassId=function(e,t){e.id=this.type===D.name?this.parseIdent():t?this.unexpected():null},G.parseClassSuper=function(e){e.superClass=this.eat(D._extends)?this.parseExprSubscripts():null},G.parseExport=function(e){var t=this;if(this.next(),this.eat(D.star))return this.expectContextual("from"),e.source=this.type===D.string?this.parseExprAtom():this.unexpected(),this.semicolon(),this.finishNode(e,"ExportAllDeclaration");if(this.eat(D._default)){var n=this.type==D.parenL,r=this.parseMaybeAssign(),o=!0;return n||"FunctionExpression"!=r.type&&"ClassExpression"!=r.type||(o=!1,r.id&&(r.type="FunctionExpression"==r.type?"FunctionDeclaration":"ClassDeclaration")),e.declaration=r,o&&this.semicolon(),this.finishNode(e,"ExportDefaultDeclaration")}if(this.shouldParseExportStatement())e.declaration=this.parseStatement(!0),e.specifiers=[],e.source=null;else{if(e.declaration=null,e.specifiers=this.parseExportSpecifiers(),this.eatContextual("from"))e.source=this.type===D.string?this.parseExprAtom():this.unexpected();else{for(var s=0;s<e.specifiers.length;s++)(t.keywords.test(e.specifiers[s].local.name)||t.reservedWords.test(e.specifiers[s].local.name))&&t.unexpected(e.specifiers[s].local.start);e.source=null}this.semicolon()}return this.finishNode(e,"ExportNamedDeclaration")},G.shouldParseExportStatement=function(){return this.type.keyword||this.isLet()},G.parseExportSpecifiers=function(){var e=this,t=[],n=!0;for(this.expect(D.braceL);!this.eat(D.braceR);){if(n)n=!1;else if(e.expect(D.comma),e.afterTrailingComma(D.braceR))break;var r=e.startNode();r.local=e.parseIdent(e.type===D._default),r.exported=e.eatContextual("as")?e.parseIdent(!0):r.local,t.push(e.finishNode(r,"ExportSpecifier"))}return t},G.parseImport=function(e){return this.next(),this.type===D.string?(e.specifiers=$,e.source=this.parseExprAtom()):(e.specifiers=this.parseImportSpecifiers(),this.expectContextual("from"),e.source=this.type===D.string?this.parseExprAtom():this.unexpected()),this.semicolon(),this.finishNode(e,"ImportDeclaration")},G.parseImportSpecifiers=function(){var e=this,t=[],n=!0;if(this.type===D.name){var r=this.startNode();if(r.local=this.parseIdent(),this.checkLVal(r.local,!0),t.push(this.finishNode(r,"ImportDefaultSpecifier")),!this.eat(D.comma))return t}if(this.type===D.star){var o=this.startNode();return this.next(),this.expectContextual("as"),o.local=this.parseIdent(),this.checkLVal(o.local,!0),t.push(this.finishNode(o,"ImportNamespaceSpecifier")),t}for(this.expect(D.braceL);!this.eat(D.braceR);){if(n)n=!1;else if(e.expect(D.comma),e.afterTrailingComma(D.braceR))break;var s=e.startNode();s.imported=e.parseIdent(!0),e.eatContextual("as")?s.local=e.parseIdent():(s.local=s.imported,e.isKeyword(s.local.name)&&e.unexpected(s.local.start),e.reservedWordsStrict.test(s.local.name)&&e.raise(s.local.start,"The keyword '"+s.local.name+"' is reserved")),e.checkLVal(s.local,!0),t.push(e.finishNode(s,"ImportSpecifier"))}return t};var J=U.prototype;J.toAssignable=function(e,t){var n=this;if(this.options.ecmaVersion>=6&&e)switch(e.type){case"Identifier":case"ObjectPattern":case"ArrayPattern":break;case"ObjectExpression":e.type="ObjectPattern";for(var r=0;r<e.properties.length;r++){var o=e.properties[r];"init"!==o.kind&&n.raise(o.key.start,"Object pattern can't contain getter or setter"),n.toAssignable(o.value,t)}break;case"ArrayExpression":e.type="ArrayPattern",this.toAssignableList(e.elements,t);break;case"AssignmentExpression":if("="!==e.operator){this.raise(e.left.end,"Only '=' operator can be used for specifying default value.");break}e.type="AssignmentPattern",delete e.operator;case"AssignmentPattern":"YieldExpression"===e.right.type&&this.raise(e.right.start,"Yield expression cannot be a default value");break;case"ParenthesizedExpression":e.expression=this.toAssignable(e.expression,t);break;case"MemberExpression":if(!t)break;default:this.raise(e.start,"Assigning to rvalue")}return e},J.toAssignableList=function(e,t){var n=this,r=e.length;if(r){var o=e[r-1];if(o&&"RestElement"==o.type)--r;else if(o&&"SpreadElement"==o.type){o.type="RestElement";var s=o.argument;this.toAssignable(s,t),"Identifier"!==s.type&&"MemberExpression"!==s.type&&"ArrayPattern"!==s.type&&this.unexpected(s.start),--r}t&&o&&"RestElement"===o.type&&"Identifier"!==o.argument.type&&this.unexpected(o.argument.start)}for(var a=0;r>a;a++){var i=e[a];i&&n.toAssignable(i,t)}return e},J.parseSpread=function(e){var t=this.startNode();return this.next(),t.argument=this.parseMaybeAssign(!1,e),this.finishNode(t,"SpreadElement")},J.parseRest=function(e){var t=this.startNode();return this.next(),t.argument=e?this.type===D.name?this.parseIdent():this.unexpected():this.type===D.name||this.type===D.bracketL?this.parseBindingAtom():this.unexpected(),this.finishNode(t,"RestElement")},J.parseBindingAtom=function(){if(this.options.ecmaVersion<6)return this.parseIdent();switch(this.type){case D.name:return this.parseIdent();case D.bracketL:var e=this.startNode();return this.next(),e.elements=this.parseBindingList(D.bracketR,!0,!0),this.finishNode(e,"ArrayPattern");case D.braceL:return this.parseObj(!0);default:this.unexpected()}},J.parseBindingList=function(e,t,n,r){for(var o=this,s=[],a=!0;!this.eat(e);)if(a?a=!1:o.expect(D.comma),t&&o.type===D.comma)s.push(null);else{if(n&&o.afterTrailingComma(e))break;if(o.type===D.ellipsis){var i=o.parseRest(r);o.parseBindingListItem(i),s.push(i),o.type===D.comma&&o.raise(o.start,"Comma is not permitted after the rest element"),o.expect(e);break}var l=o.parseMaybeDefault(o.start,o.startLoc);o.parseBindingListItem(l),s.push(l)}return s},J.parseBindingListItem=function(e){return e},J.parseMaybeDefault=function(e,t,n){if(n=n||this.parseBindingAtom(),this.options.ecmaVersion<6||!this.eat(D.eq))return n;var r=this.startNodeAt(e,t);return r.left=n,r.right=this.parseMaybeAssign(),this.finishNode(r,"AssignmentPattern")},J.checkLVal=function(e,t,n){var r=this;switch(e.type){case"Identifier":this.strict&&this.reservedWordsStrictBind.test(e.name)&&this.raiseRecoverable(e.start,(t?"Binding ":"Assigning to ")+e.name+" in strict mode"),n&&(l(n,e.name)&&this.raiseRecoverable(e.start,"Argument name clash"),n[e.name]=!0);break;case"MemberExpression":t&&this.raiseRecoverable(e.start,(t?"Binding":"Assigning to")+" member expression");break;case"ObjectPattern":for(var o=0;o<e.properties.length;o++)r.checkLVal(e.properties[o].value,t,n);break;case"ArrayPattern":for(var s=0;s<e.elements.length;s++){var a=e.elements[s];a&&r.checkLVal(a,t,n)}break;case"AssignmentPattern":this.checkLVal(e.left,t,n);break;case"RestElement":this.checkLVal(e.argument,t,n);break;case"ParenthesizedExpression":this.checkLVal(e.expression,t,n);break;default:this.raise(e.start,(t?"Binding":"Assigning to")+" rvalue")}};var K=U.prototype;K.checkPropClash=function(e,t){if(!(this.options.ecmaVersion>=6&&(e.computed||e.method||e.shorthand))){var n,r=e.key;switch(r.type){case"Identifier":n=r.name;break;case"Literal":n=String(r.value);break;default:return}var o=e.kind;if(this.options.ecmaVersion>=6)return void("__proto__"===n&&"init"===o&&(t.proto&&this.raiseRecoverable(r.start,"Redefinition of __proto__ property"),t.proto=!0));n="$"+n;var s=t[n];if(s){var a="init"!==o;((this.strict||a)&&s[o]||!(a^s.init))&&this.raiseRecoverable(r.start,"Redefinition of property")}else s=t[n]={init:!1,get:!1,set:!1};s[o]=!0}},K.parseExpression=function(e,t){var n=this,r=this.start,o=this.startLoc,s=this.parseMaybeAssign(e,t);if(this.type===D.comma){var a=this.startNodeAt(r,o);for(a.expressions=[s];this.eat(D.comma);)a.expressions.push(n.parseMaybeAssign(e,t));return this.finishNode(a,"SequenceExpression")}return s},K.parseMaybeAssign=function(e,t,n){if(this.inGenerator&&this.isContextual("yield"))return this.parseYield();var r=!1;t||(t=new W,r=!0);var o=this.start,s=this.startLoc;(this.type==D.parenL||this.type==D.name)&&(this.potentialArrowAt=this.start);var a=this.parseMaybeConditional(e,t);if(n&&(a=n.call(this,a,o,s)),this.type.isAssign){this.checkPatternErrors(t,!0),r||W.call(t);var i=this.startNodeAt(o,s);return i.operator=this.value,i.left=this.type===D.eq?this.toAssignable(a):a,t.shorthandAssign=0,this.checkLVal(a),this.next(),i.right=this.parseMaybeAssign(e),this.finishNode(i,"AssignmentExpression")}return r&&this.checkExpressionErrors(t,!0),a},K.parseMaybeConditional=function(e,t){var n=this.start,r=this.startLoc,o=this.parseExprOps(e,t);if(this.checkExpressionErrors(t))return o;if(this.eat(D.question)){var s=this.startNodeAt(n,r);return s.test=o,s.consequent=this.parseMaybeAssign(),this.expect(D.colon),s.alternate=this.parseMaybeAssign(e),this.finishNode(s,"ConditionalExpression")}return o},K.parseExprOps=function(e,t){var n=this.start,r=this.startLoc,o=this.parseMaybeUnary(t,!1);return this.checkExpressionErrors(t)?o:this.parseExprOp(o,n,r,-1,e)},K.parseExprOp=function(e,t,n,r,o){var s=this.type.binop;if(null!=s&&(!o||this.type!==D._in)&&s>r){var a=this.type===D.logicalOR||this.type===D.logicalAND,i=this.value;this.next();var l=this.start,c=this.startLoc,p=this.parseExprOp(this.parseMaybeUnary(null,!1),l,c,s,o),u=this.buildBinary(t,n,e,p,i,a);return this.parseExprOp(u,t,n,r,o)}return e},K.buildBinary=function(e,t,n,r,o,s){var a=this.startNodeAt(e,t);return a.left=n,a.operator=o,a.right=r,this.finishNode(a,s?"LogicalExpression":"BinaryExpression")},K.parseMaybeUnary=function(e,t){var n,r=this,o=this.start,s=this.startLoc;if(this.type.prefix){var a=this.startNode(),i=this.type===D.incDec;a.operator=this.value,a.prefix=!0,this.next(),a.argument=this.parseMaybeUnary(null,!0),this.checkExpressionErrors(e,!0),i?this.checkLVal(a.argument):this.strict&&"delete"===a.operator&&"Identifier"===a.argument.type?this.raiseRecoverable(a.start,"Deleting local variable in strict mode"):t=!0,n=this.finishNode(a,i?"UpdateExpression":"UnaryExpression")
}else{if(n=this.parseExprSubscripts(e),this.checkExpressionErrors(e))return n;for(;this.type.postfix&&!this.canInsertSemicolon();){var l=r.startNodeAt(o,s);l.operator=r.value,l.prefix=!1,l.argument=n,r.checkLVal(n),r.next(),n=r.finishNode(l,"UpdateExpression")}}return!t&&this.eat(D.starstar)?this.buildBinary(o,s,n,this.parseMaybeUnary(null,!1),"**",!1):n},K.parseExprSubscripts=function(e){var t=this.start,n=this.startLoc,r=this.parseExprAtom(e),o="ArrowFunctionExpression"===r.type&&")"!==this.input.slice(this.lastTokStart,this.lastTokEnd);return this.checkExpressionErrors(e)||o?r:this.parseSubscripts(r,t,n)},K.parseSubscripts=function(e,t,n,r){for(var o=this;;)if(o.eat(D.dot)){var s=o.startNodeAt(t,n);s.object=e,s.property=o.parseIdent(!0),s.computed=!1,e=o.finishNode(s,"MemberExpression")}else if(o.eat(D.bracketL)){var a=o.startNodeAt(t,n);a.object=e,a.property=o.parseExpression(),a.computed=!0,o.expect(D.bracketR),e=o.finishNode(a,"MemberExpression")}else if(!r&&o.eat(D.parenL)){var i=o.startNodeAt(t,n);i.callee=e,i.arguments=o.parseExprList(D.parenR,!1),e=o.finishNode(i,"CallExpression")}else{if(o.type!==D.backQuote)return e;var l=o.startNodeAt(t,n);l.tag=e,l.quasi=o.parseTemplate(),e=o.finishNode(l,"TaggedTemplateExpression")}},K.parseExprAtom=function(e){var t,n=this.potentialArrowAt==this.start;switch(this.type){case D._super:this.inFunction||this.raise(this.start,"'super' outside of function or class");case D._this:var r=this.type===D._this?"ThisExpression":"Super";return t=this.startNode(),this.next(),this.finishNode(t,r);case D.name:var o=this.start,s=this.startLoc,a=this.parseIdent(this.type!==D.name);return n&&!this.canInsertSemicolon()&&this.eat(D.arrow)?this.parseArrowExpression(this.startNodeAt(o,s),[a]):a;case D.regexp:var i=this.value;return t=this.parseLiteral(i.value),t.regex={pattern:i.pattern,flags:i.flags},t;case D.num:case D.string:return this.parseLiteral(this.value);case D._null:case D._true:case D._false:return t=this.startNode(),t.value=this.type===D._null?null:this.type===D._true,t.raw=this.type.keyword,this.next(),this.finishNode(t,"Literal");case D.parenL:return this.parseParenAndDistinguishExpression(n);case D.bracketL:return t=this.startNode(),this.next(),t.elements=this.parseExprList(D.bracketR,!0,!0,e),this.finishNode(t,"ArrayExpression");case D.braceL:return this.parseObj(!1,e);case D._function:return t=this.startNode(),this.next(),this.parseFunction(t,!1);case D._class:return this.parseClass(this.startNode(),!1);case D._new:return this.parseNew();case D.backQuote:return this.parseTemplate();default:this.unexpected()}},K.parseLiteral=function(e){var t=this.startNode();return t.value=e,t.raw=this.input.slice(this.start,this.end),this.next(),this.finishNode(t,"Literal")},K.parseParenExpression=function(){this.expect(D.parenL);var e=this.parseExpression();return this.expect(D.parenR),e},K.parseParenAndDistinguishExpression=function(e){var t,n=this,r=this.start,o=this.startLoc;if(this.options.ecmaVersion>=6){this.next();for(var s,a,i=this.start,l=this.startLoc,c=[],p=!0,u=new W;this.type!==D.parenR;){if(p?p=!1:n.expect(D.comma),n.type===D.ellipsis){s=n.start,c.push(n.parseParenItem(n.parseRest()));break}n.type!==D.parenL||a||(a=n.start),c.push(n.parseMaybeAssign(!1,u,n.parseParenItem))}var d=this.start,h=this.startLoc;if(this.expect(D.parenR),e&&!this.canInsertSemicolon()&&this.eat(D.arrow))return this.checkPatternErrors(u,!0),a&&this.unexpected(a),this.parseParenArrowList(r,o,c);c.length||this.unexpected(this.lastTokStart),s&&this.unexpected(s),this.checkExpressionErrors(u,!0),c.length>1?(t=this.startNodeAt(i,l),t.expressions=c,this.finishNodeAt(t,"SequenceExpression",d,h)):t=c[0]}else t=this.parseParenExpression();if(this.options.preserveParens){var f=this.startNodeAt(r,o);return f.expression=t,this.finishNode(f,"ParenthesizedExpression")}return t},K.parseParenItem=function(e){return e},K.parseParenArrowList=function(e,t,n){return this.parseArrowExpression(this.startNodeAt(e,t),n)};var X=[];K.parseNew=function(){var e=this.startNode(),t=this.parseIdent(!0);if(this.options.ecmaVersion>=6&&this.eat(D.dot))return e.meta=t,e.property=this.parseIdent(!0),"target"!==e.property.name&&this.raiseRecoverable(e.property.start,"The only valid meta property for new is new.target"),this.inFunction||this.raiseRecoverable(e.start,"new.target can only be used in functions"),this.finishNode(e,"MetaProperty");var n=this.start,r=this.startLoc;return e.callee=this.parseSubscripts(this.parseExprAtom(),n,r,!0),e.arguments=this.eat(D.parenL)?this.parseExprList(D.parenR,!1):X,this.finishNode(e,"NewExpression")},K.parseTemplateElement=function(){var e=this.startNode();return e.value={raw:this.input.slice(this.start,this.end).replace(/\r\n?/g,"\n"),cooked:this.value},this.next(),e.tail=this.type===D.backQuote,this.finishNode(e,"TemplateElement")},K.parseTemplate=function(){var e=this,t=this.startNode();this.next(),t.expressions=[];var n=this.parseTemplateElement();for(t.quasis=[n];!n.tail;)e.expect(D.dollarBraceL),t.expressions.push(e.parseExpression()),e.expect(D.braceR),t.quasis.push(n=e.parseTemplateElement());return this.next(),this.finishNode(t,"TemplateLiteral")},K.parseObj=function(e,t){var n=this,r=this.startNode(),o=!0,s={};for(r.properties=[],this.next();!this.eat(D.braceR);){if(o)o=!1;else if(n.expect(D.comma),n.afterTrailingComma(D.braceR))break;var a,i,l,c=n.startNode();n.options.ecmaVersion>=6&&(c.method=!1,c.shorthand=!1,(e||t)&&(i=n.start,l=n.startLoc),e||(a=n.eat(D.star))),n.parsePropertyName(c),n.parsePropertyValue(c,e,a,i,l,t),n.checkPropClash(c,s),r.properties.push(n.finishNode(c,"Property"))}return this.finishNode(r,e?"ObjectPattern":"ObjectExpression")},K.parsePropertyValue=function(e,t,n,r,o,s){if(this.eat(D.colon))e.value=t?this.parseMaybeDefault(this.start,this.startLoc):this.parseMaybeAssign(!1,s),e.kind="init";else if(this.options.ecmaVersion>=6&&this.type===D.parenL)t&&this.unexpected(),e.kind="init",e.method=!0,e.value=this.parseMethod(n);else if(this.options.ecmaVersion>=5&&!e.computed&&"Identifier"===e.key.type&&("get"===e.key.name||"set"===e.key.name)&&this.type!=D.comma&&this.type!=D.braceR){(n||t)&&this.unexpected(),e.kind=e.key.name,this.parsePropertyName(e),e.value=this.parseMethod(!1);var a="get"===e.kind?0:1;if(e.value.params.length!==a){var i=e.value.start;"get"===e.kind?this.raiseRecoverable(i,"getter should have no params"):this.raiseRecoverable(i,"setter should have exactly one param")}"set"===e.kind&&"RestElement"===e.value.params[0].type&&this.raiseRecoverable(e.value.params[0].start,"Setter cannot use rest params")}else this.options.ecmaVersion>=6&&!e.computed&&"Identifier"===e.key.type?((this.keywords.test(e.key.name)||(this.strict?this.reservedWordsStrictBind:this.reservedWords).test(e.key.name)||this.inGenerator&&"yield"==e.key.name)&&this.raiseRecoverable(e.key.start,"'"+e.key.name+"' can not be used as shorthand property"),e.kind="init",t?e.value=this.parseMaybeDefault(r,o,e.key):this.type===D.eq&&s?(s.shorthandAssign||(s.shorthandAssign=this.start),e.value=this.parseMaybeDefault(r,o,e.key)):e.value=e.key,e.shorthand=!0):this.unexpected()},K.parsePropertyName=function(e){if(this.options.ecmaVersion>=6){if(this.eat(D.bracketL))return e.computed=!0,e.key=this.parseMaybeAssign(),this.expect(D.bracketR),e.key;e.computed=!1}return e.key=this.type===D.num||this.type===D.string?this.parseExprAtom():this.parseIdent(!0)},K.initFunction=function(e){e.id=null,this.options.ecmaVersion>=6&&(e.generator=!1,e.expression=!1)},K.parseMethod=function(e){var t=this.startNode(),n=this.inGenerator;return this.inGenerator=e,this.initFunction(t),this.expect(D.parenL),t.params=this.parseBindingList(D.parenR,!1,!1),this.options.ecmaVersion>=6&&(t.generator=e),this.parseFunctionBody(t,!1),this.inGenerator=n,this.finishNode(t,"FunctionExpression")},K.parseArrowExpression=function(e,t){var n=this.inGenerator;return this.inGenerator=!1,this.initFunction(e),e.params=this.toAssignableList(t,!0),this.parseFunctionBody(e,!0),this.inGenerator=n,this.finishNode(e,"ArrowFunctionExpression")},K.parseFunctionBody=function(e,t){var n=t&&this.type!==D.braceL;if(n)e.body=this.parseMaybeAssign(),e.expression=!0;else{var r=this.inFunction,o=this.labels;this.inFunction=!0,this.labels=[],e.body=this.parseBlock(!0),e.expression=!1,this.inFunction=r,this.labels=o}var s=!n&&e.body.body.length&&this.isUseStrict(e.body.body[0])?e.body.body[0]:null;if(this.strict||s){var a=this.strict;this.strict=!0,e.id&&this.checkLVal(e.id,!0),this.checkParams(e,s),this.strict=a}else t&&this.checkParams(e,s)},K.checkParams=function(e,t){for(var n=this,r={},o=0;o<e.params.length;o++)t&&n.options.ecmaVersion>=7&&"Identifier"!==e.params[o].type&&n.raiseRecoverable(t.start,"Illegal 'use strict' directive in function with non-simple parameter list"),n.checkLVal(e.params[o],!0,r)},K.parseExprList=function(e,t,n,r){for(var o=this,s=[],a=!0;!this.eat(e);){if(a)a=!1;else if(o.expect(D.comma),t&&o.afterTrailingComma(e))break;var i;n&&o.type===D.comma?i=null:o.type===D.ellipsis?(i=o.parseSpread(r),o.type===D.comma&&r&&!r.trailingComma&&(r.trailingComma=o.lastTokStart)):i=o.parseMaybeAssign(!1,r),s.push(i)}return s},K.parseIdent=function(e){var t=this.startNode();return e&&"never"==this.options.allowReserved&&(e=!1),this.type===D.name?(!e&&(this.strict?this.reservedWordsStrict:this.reservedWords).test(this.value)&&(this.options.ecmaVersion>=6||-1==this.input.slice(this.start,this.end).indexOf("\\"))&&this.raiseRecoverable(this.start,"The keyword '"+this.value+"' is reserved"),!e&&this.inGenerator&&"yield"===this.value&&this.raiseRecoverable(this.start,"Can not use 'yield' as identifier inside a generator"),t.name=this.value):e&&this.type.keyword?t.name=this.type.keyword:this.unexpected(),this.next(),this.finishNode(t,"Identifier")},K.parseYield=function(){var e=this.startNode();return this.next(),this.type==D.semi||this.canInsertSemicolon()||this.type!=D.star&&!this.type.startsExpr?(e.delegate=!1,e.argument=null):(e.delegate=this.eat(D.star),e.argument=this.parseMaybeAssign()),this.finishNode(e,"YieldExpression")};var Q=U.prototype;Q.raise=function(e,t){var n=c(this.input,e);t+=" ("+n.line+":"+n.column+")";var r=new SyntaxError(t);throw r.pos=e,r.loc=n,r.raisedAt=this.pos,r},Q.raiseRecoverable=Q.raise,Q.curPosition=function(){return this.options.locations?new L(this.curLine,this.pos-this.lineStart):void 0};var Y=function(e,t,n){this.type="",this.start=t,this.end=0,e.options.locations&&(this.loc=new F(e,n)),e.options.directSourceFile&&(this.sourceFile=e.options.directSourceFile),e.options.ranges&&(this.range=[t,0])},Z=U.prototype;Z.startNode=function(){return new Y(this,this.start,this.startLoc)},Z.startNodeAt=function(e,t){return new Y(this,e,t)},Z.finishNode=function(e,t){return h.call(this,e,t,this.lastTokEnd,this.lastTokEndLoc)},Z.finishNodeAt=function(e,t,n,r){return h.call(this,e,t,n,r)};var et=function(e,t,n,r){this.token=e,this.isExpr=!!t,this.preserveSpace=!!n,this.override=r},tt={b_stat:new et("{",!1),b_expr:new et("{",!0),b_tmpl:new et("${",!0),p_stat:new et("(",!1),p_expr:new et("(",!0),q_tmpl:new et("`",!0,!0,function(e){return e.readTmplToken()}),f_expr:new et("function",!0)},nt=U.prototype;nt.initialContext=function(){return[tt.b_stat]},nt.braceIsBlock=function(e){if(e===D.colon){var t=this.curContext();if(t===tt.b_stat||t===tt.b_expr)return!t.isExpr}return e===D._return?M.test(this.input.slice(this.lastTokEnd,this.start)):e===D._else||e===D.semi||e===D.eof||e===D.parenR?!0:e==D.braceL?this.curContext()===tt.b_stat:!this.exprAllowed},nt.updateContext=function(e){var t,n=this.type;n.keyword&&e==D.dot?this.exprAllowed=!1:(t=n.updateContext)?t.call(this,e):this.exprAllowed=n.beforeExpr},D.parenR.updateContext=D.braceR.updateContext=function(){if(1==this.context.length)return void(this.exprAllowed=!0);var e=this.context.pop();e===tt.b_stat&&this.curContext()===tt.f_expr?(this.context.pop(),this.exprAllowed=!1):this.exprAllowed=e===tt.b_tmpl?!0:!e.isExpr},D.braceL.updateContext=function(e){this.context.push(this.braceIsBlock(e)?tt.b_stat:tt.b_expr),this.exprAllowed=!0},D.dollarBraceL.updateContext=function(){this.context.push(tt.b_tmpl),this.exprAllowed=!0},D.parenL.updateContext=function(e){var t=e===D._if||e===D._for||e===D._with||e===D._while;this.context.push(t?tt.p_stat:tt.p_expr),this.exprAllowed=!0},D.incDec.updateContext=function(){},D._function.updateContext=function(e){e.beforeExpr&&e!==D.semi&&e!==D._else&&(e!==D.colon&&e!==D.braceL||this.curContext()!==tt.b_stat)&&this.context.push(tt.f_expr),this.exprAllowed=!1},D.backQuote.updateContext=function(){this.curContext()===tt.q_tmpl?this.context.pop():this.context.push(tt.q_tmpl),this.exprAllowed=!1};var rt=function(e){this.type=e.type,this.value=e.value,this.start=e.start,this.end=e.end,e.options.locations&&(this.loc=new F(e,e.startLoc,e.endLoc)),e.options.ranges&&(this.range=[e.start,e.end])},ot=U.prototype,st="object"==typeof Packages&&"[object JavaPackage]"==Object.prototype.toString.call(Packages);ot.next=function(){this.options.onToken&&this.options.onToken(new rt(this)),this.lastTokEnd=this.end,this.lastTokStart=this.start,this.lastTokEndLoc=this.endLoc,this.lastTokStartLoc=this.startLoc,this.nextToken()},ot.getToken=function(){return this.next(),new rt(this)},"undefined"!=typeof Symbol&&(ot[Symbol.iterator]=function(){var e=this;return{next:function(){var t=e.getToken();return{done:t.type===D.eof,value:t}}}}),ot.setStrict=function(e){var t=this;if(this.strict=e,this.type===D.num||this.type===D.string){if(this.pos=this.start,this.options.locations)for(;this.pos<this.lineStart;)t.lineStart=t.input.lastIndexOf("\n",t.lineStart-2)+1,--t.curLine;this.nextToken()}},ot.curContext=function(){return this.context[this.context.length-1]},ot.nextToken=function(){var e=this.curContext();return e&&e.preserveSpace||this.skipSpace(),this.start=this.pos,this.options.locations&&(this.startLoc=this.curPosition()),this.pos>=this.input.length?this.finishToken(D.eof):e.override?e.override(this):void this.readToken(this.fullCharCodeAtPos())},ot.readToken=function(e){return n(e,this.options.ecmaVersion>=6)||92===e?this.readWord():this.getTokenFromCode(e)},ot.fullCharCodeAtPos=function(){var e=this.input.charCodeAt(this.pos);if(55295>=e||e>=57344)return e;var t=this.input.charCodeAt(this.pos+1);return(e<<10)+t-56613888},ot.skipBlockComment=function(){var e=this,t=this.options.onComment&&this.curPosition(),n=this.pos,r=this.input.indexOf("*/",this.pos+=2);if(-1===r&&this.raise(this.pos-2,"Unterminated comment"),this.pos=r+2,this.options.locations){P.lastIndex=n;for(var o;(o=P.exec(this.input))&&o.index<this.pos;)++e.curLine,e.lineStart=o.index+o[0].length}this.options.onComment&&this.options.onComment(!0,this.input.slice(n+2,r),n,this.pos,t,this.curPosition())},ot.skipLineComment=function(e){for(var t=this,n=this.pos,r=this.options.onComment&&this.curPosition(),o=this.input.charCodeAt(this.pos+=e);this.pos<this.input.length&&10!==o&&13!==o&&8232!==o&&8233!==o;)++t.pos,o=t.input.charCodeAt(t.pos);this.options.onComment&&this.options.onComment(!1,this.input.slice(n+e,this.pos),n,this.pos,r,this.curPosition())},ot.skipSpace=function(){var e=this;e:for(;this.pos<this.input.length;){var t=e.input.charCodeAt(e.pos);switch(t){case 32:case 160:++e.pos;break;case 13:10===e.input.charCodeAt(e.pos+1)&&++e.pos;case 10:case 8232:case 8233:++e.pos,e.options.locations&&(++e.curLine,e.lineStart=e.pos);break;case 47:switch(e.input.charCodeAt(e.pos+1)){case 42:e.skipBlockComment();break;case 47:e.skipLineComment(2);break;default:break e}break;default:if(!(t>8&&14>t||t>=5760&&N.test(String.fromCharCode(t))))break e;++e.pos}}},ot.finishToken=function(e,t){this.end=this.pos,this.options.locations&&(this.endLoc=this.curPosition());var n=this.type;this.type=e,this.value=t,this.updateContext(n)},ot.readToken_dot=function(){var e=this.input.charCodeAt(this.pos+1);if(e>=48&&57>=e)return this.readNumber(!0);var t=this.input.charCodeAt(this.pos+2);return this.options.ecmaVersion>=6&&46===e&&46===t?(this.pos+=3,this.finishToken(D.ellipsis)):(++this.pos,this.finishToken(D.dot))},ot.readToken_slash=function(){var e=this.input.charCodeAt(this.pos+1);return this.exprAllowed?(++this.pos,this.readRegexp()):61===e?this.finishOp(D.assign,2):this.finishOp(D.slash,1)},ot.readToken_mult_modulo_exp=function(e){var t=this.input.charCodeAt(this.pos+1),n=1,r=42===e?D.star:D.modulo;return this.options.ecmaVersion>=7&&42===t&&(++n,r=D.starstar,t=this.input.charCodeAt(this.pos+2)),61===t?this.finishOp(D.assign,n+1):this.finishOp(r,n)},ot.readToken_pipe_amp=function(e){var t=this.input.charCodeAt(this.pos+1);return t===e?this.finishOp(124===e?D.logicalOR:D.logicalAND,2):61===t?this.finishOp(D.assign,2):this.finishOp(124===e?D.bitwiseOR:D.bitwiseAND,1)},ot.readToken_caret=function(){var e=this.input.charCodeAt(this.pos+1);return 61===e?this.finishOp(D.assign,2):this.finishOp(D.bitwiseXOR,1)},ot.readToken_plus_min=function(e){var t=this.input.charCodeAt(this.pos+1);return t===e?45==t&&62==this.input.charCodeAt(this.pos+2)&&M.test(this.input.slice(this.lastTokEnd,this.pos))?(this.skipLineComment(3),this.skipSpace(),this.nextToken()):this.finishOp(D.incDec,2):61===t?this.finishOp(D.assign,2):this.finishOp(D.plusMin,1)},ot.readToken_lt_gt=function(e){var t=this.input.charCodeAt(this.pos+1),n=1;return t===e?(n=62===e&&62===this.input.charCodeAt(this.pos+2)?3:2,61===this.input.charCodeAt(this.pos+n)?this.finishOp(D.assign,n+1):this.finishOp(D.bitShift,n)):33==t&&60==e&&45==this.input.charCodeAt(this.pos+2)&&45==this.input.charCodeAt(this.pos+3)?(this.inModule&&this.unexpected(),this.skipLineComment(4),this.skipSpace(),this.nextToken()):(61===t&&(n=2),this.finishOp(D.relational,n))},ot.readToken_eq_excl=function(e){var t=this.input.charCodeAt(this.pos+1);return 61===t?this.finishOp(D.equality,61===this.input.charCodeAt(this.pos+2)?3:2):61===e&&62===t&&this.options.ecmaVersion>=6?(this.pos+=2,this.finishToken(D.arrow)):this.finishOp(61===e?D.eq:D.prefix,1)},ot.getTokenFromCode=function(e){switch(e){case 46:return this.readToken_dot();case 40:return++this.pos,this.finishToken(D.parenL);case 41:return++this.pos,this.finishToken(D.parenR);case 59:return++this.pos,this.finishToken(D.semi);case 44:return++this.pos,this.finishToken(D.comma);case 91:return++this.pos,this.finishToken(D.bracketL);case 93:return++this.pos,this.finishToken(D.bracketR);case 123:return++this.pos,this.finishToken(D.braceL);case 125:return++this.pos,this.finishToken(D.braceR);case 58:return++this.pos,this.finishToken(D.colon);case 63:return++this.pos,this.finishToken(D.question);case 96:if(this.options.ecmaVersion<6)break;return++this.pos,this.finishToken(D.backQuote);case 48:var t=this.input.charCodeAt(this.pos+1);if(120===t||88===t)return this.readRadixNumber(16);if(this.options.ecmaVersion>=6){if(111===t||79===t)return this.readRadixNumber(8);if(98===t||66===t)return this.readRadixNumber(2)}case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:return this.readNumber(!1);case 34:case 39:return this.readString(e);case 47:return this.readToken_slash();case 37:case 42:return this.readToken_mult_modulo_exp(e);case 124:case 38:return this.readToken_pipe_amp(e);case 94:return this.readToken_caret();case 43:case 45:return this.readToken_plus_min(e);case 60:case 62:return this.readToken_lt_gt(e);case 61:case 33:return this.readToken_eq_excl(e);case 126:return this.finishOp(D.prefix,1)}this.raise(this.pos,"Unexpected character '"+m(e)+"'")},ot.finishOp=function(e,t){var n=this.input.slice(this.pos,this.pos+t);return this.pos+=t,this.finishToken(e,n)};var at=!!f("","u");ot.readRegexp=function(){for(var e,t,n=this,r=this.pos;;){n.pos>=n.input.length&&n.raise(r,"Unterminated regular expression");var o=n.input.charAt(n.pos);if(M.test(o)&&n.raise(r,"Unterminated regular expression"),e)e=!1;else{if("["===o)t=!0;else if("]"===o&&t)t=!1;else if("/"===o&&!t)break;e="\\"===o}++n.pos}var s=this.input.slice(r,this.pos);++this.pos;var a=this.readWord1(),i=s,l="";if(a){var c=/^[gim]*$/;this.options.ecmaVersion>=6&&(c=/^[gimuy]*$/),c.test(a)||this.raise(r,"Invalid regular expression flag"),a.indexOf("u")>=0&&(at?l="u":(i=i.replace(/\\u\{([0-9a-fA-F]+)\}/g,function(e,t,o){return t=Number("0x"+t),t>1114111&&n.raise(r+o+3,"Code point out of bounds"),"x"}),i=i.replace(/\\u([a-fA-F0-9]{4})|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,"x"),l=l.replace("u","")))}var p=null;return st||(f(i,l,r,this),p=f(s,a)),this.finishToken(D.regexp,{pattern:s,flags:a,value:p})},ot.readInt=function(e,t){for(var n=this,r=this.pos,o=0,s=0,a=null==t?1/0:t;a>s;++s){var i,l=n.input.charCodeAt(n.pos);if(i=l>=97?l-97+10:l>=65?l-65+10:l>=48&&57>=l?l-48:1/0,i>=e)break;++n.pos,o=o*e+i}return this.pos===r||null!=t&&this.pos-r!==t?null:o},ot.readRadixNumber=function(e){this.pos+=2;var t=this.readInt(e);return null==t&&this.raise(this.start+2,"Expected number in radix "+e),n(this.fullCharCodeAtPos())&&this.raise(this.pos,"Identifier directly after number"),this.finishToken(D.num,t)},ot.readNumber=function(e){var t=this.pos,r=!1,o=48===this.input.charCodeAt(this.pos);e||null!==this.readInt(10)||this.raise(t,"Invalid number");var s=this.input.charCodeAt(this.pos);46===s&&(++this.pos,this.readInt(10),r=!0,s=this.input.charCodeAt(this.pos)),(69===s||101===s)&&(s=this.input.charCodeAt(++this.pos),(43===s||45===s)&&++this.pos,null===this.readInt(10)&&this.raise(t,"Invalid number"),r=!0),n(this.fullCharCodeAtPos())&&this.raise(this.pos,"Identifier directly after number");var a,i=this.input.slice(t,this.pos);return r?a=parseFloat(i):o&&1!==i.length?/[89]/.test(i)||this.strict?this.raise(t,"Invalid number"):a=parseInt(i,8):a=parseInt(i,10),this.finishToken(D.num,a)},ot.readCodePoint=function(){var e,t=this.input.charCodeAt(this.pos);if(123===t){this.options.ecmaVersion<6&&this.unexpected();var n=++this.pos;e=this.readHexChar(this.input.indexOf("}",this.pos)-this.pos),++this.pos,e>1114111&&this.raise(n,"Code point out of bounds")}else e=this.readHexChar(4);return e},ot.readString=function(e){for(var t=this,n="",r=++this.pos;;){t.pos>=t.input.length&&t.raise(t.start,"Unterminated string constant");var o=t.input.charCodeAt(t.pos);if(o===e)break;92===o?(n+=t.input.slice(r,t.pos),n+=t.readEscapedChar(!1),r=t.pos):(a(o)&&t.raise(t.start,"Unterminated string constant"),++t.pos)}return n+=this.input.slice(r,this.pos++),this.finishToken(D.string,n)},ot.readTmplToken=function(){for(var e=this,t="",n=this.pos;;){e.pos>=e.input.length&&e.raise(e.start,"Unterminated template");var r=e.input.charCodeAt(e.pos);if(96===r||36===r&&123===e.input.charCodeAt(e.pos+1))return e.pos===e.start&&e.type===D.template?36===r?(e.pos+=2,e.finishToken(D.dollarBraceL)):(++e.pos,e.finishToken(D.backQuote)):(t+=e.input.slice(n,e.pos),e.finishToken(D.template,t));if(92===r)t+=e.input.slice(n,e.pos),t+=e.readEscapedChar(!0),n=e.pos;else if(a(r)){switch(t+=e.input.slice(n,e.pos),++e.pos,r){case 13:10===e.input.charCodeAt(e.pos)&&++e.pos;case 10:t+="\n";break;default:t+=String.fromCharCode(r)}e.options.locations&&(++e.curLine,e.lineStart=e.pos),n=e.pos}else++e.pos}},ot.readEscapedChar=function(e){var t=this.input.charCodeAt(++this.pos);switch(++this.pos,t){case 110:return"\n";case 114:return"\r";case 120:return String.fromCharCode(this.readHexChar(2));case 117:return m(this.readCodePoint());case 116:return"	";case 98:return"\b";case 118:return"";case 102:return"\f";case 13:10===this.input.charCodeAt(this.pos)&&++this.pos;case 10:return this.options.locations&&(this.lineStart=this.pos,++this.curLine),"";default:if(t>=48&&55>=t){var n=this.input.substr(this.pos-1,3).match(/^[0-7]+/)[0],r=parseInt(n,8);return r>255&&(n=n.slice(0,-1),r=parseInt(n,8)),"0"!==n&&(this.strict||e)&&this.raise(this.pos-2,"Octal literal in strict mode"),this.pos+=n.length-1,String.fromCharCode(r)}return String.fromCharCode(t)}},ot.readHexChar=function(e){var t=this.pos,n=this.readInt(16,e);return null===n&&this.raise(t,"Bad character escape sequence"),n},ot.readWord1=function(){var e=this;this.containsEsc=!1;for(var t="",o=!0,s=this.pos,a=this.options.ecmaVersion>=6;this.pos<this.input.length;){var i=e.fullCharCodeAtPos();if(r(i,a))e.pos+=65535>=i?1:2;else{if(92!==i)break;e.containsEsc=!0,t+=e.input.slice(s,e.pos);var l=e.pos;117!=e.input.charCodeAt(++e.pos)&&e.raise(e.pos,"Expecting Unicode escape sequence \\uXXXX"),++e.pos;var c=e.readCodePoint();(o?n:r)(c,a)||e.raise(l,"Invalid Unicode escape"),t+=m(c),s=e.pos}o=!1}return t+this.input.slice(s,this.pos)},ot.readWord=function(){var e=this.readWord1(),t=D.name;return(this.options.ecmaVersion>=6||!this.containsEsc)&&this.keywords.test(e)&&(t=A[e]),this.finishToken(t,e)};var it="3.3.0";e.version=it,e.parse=g,e.parseExpressionAt=b,e.tokenizer=y,e.Parser=U,e.plugins=q,e.defaultOptions=z,e.Position=L,e.SourceLocation=F,e.getLineInfo=c,e.Node=Y,e.TokenType=O,e.tokTypes=D,e.TokContext=et,e.tokContexts=tt,e.isIdentifierChar=r,e.isIdentifierStart=n,e.Token=rt,e.isNewLine=a,e.lineBreak=M,e.lineBreakG=P,Object.defineProperty(e,"__esModule",{value:!0})}),function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("./acorn")):"function"==typeof define&&define.amd?define("acorn/dist/acorn_loose",["exports","./acorn"],t):t((e.acorn=e.acorn||{},e.acorn.loose=e.acorn.loose||{}),e.acorn)}(this,function(e,t){"use strict";function n(e){return 14>e&&e>8||32===e||160===e||t.isNewLine(e)}function r(e){return"✖"==e.name}function o(e,t){var n=new i(e,t);return n.next(),n.parseTopLevel()}var s="default"in t?t["default"]:t,a={},i=function(e,n){if(void 0===n&&(n={}),this.toks=t.tokenizer(e,n),this.options=this.toks.options,this.input=this.toks.input,this.tok=this.last={type:t.tokTypes.eof,start:0,end:0},this.options.locations){var r=this.toks.curPosition();this.tok.loc=new t.SourceLocation(this.toks,r,r)}this.ahead=[],this.context=[],this.curIndent=0,this.curLineStart=0,this.nextLineStart=this.lineEnd(this.curLineStart)+1,this.options.pluginsLoose=n.pluginsLoose||{},this.loadPlugins(this.options.pluginsLoose)};i.prototype.startNode=function(){return new t.Node(this.toks,this.tok.start,this.options.locations?this.tok.loc.start:null)},i.prototype.storeCurrentPos=function(){return this.options.locations?[this.tok.start,this.tok.loc.start]:this.tok.start},i.prototype.startNodeAt=function(e){return this.options.locations?new t.Node(this.toks,e[0],e[1]):new t.Node(this.toks,e)},i.prototype.finishNode=function(e,t){return e.type=t,e.end=this.last.end,this.options.locations&&(e.loc.end=this.last.loc.end),this.options.ranges&&(e.range[1]=this.last.end),e},i.prototype.dummyNode=function(e){var n=this.startNode();return n.type=e,n.end=n.start,this.options.locations&&(n.loc.end=n.loc.start),this.options.ranges&&(n.range[1]=n.start),this.last={type:t.tokTypes.name,start:n.start,end:n.start,loc:n.loc},n},i.prototype.dummyIdent=function(){var e=this.dummyNode("Identifier");return e.name="✖",e},i.prototype.dummyString=function(){var e=this.dummyNode("Literal");return e.value=e.raw="✖",e},i.prototype.eat=function(e){return this.tok.type===e?(this.next(),!0):!1},i.prototype.isContextual=function(e){return this.tok.type===t.tokTypes.name&&this.tok.value===e},i.prototype.eatContextual=function(e){return this.tok.value===e&&this.eat(t.tokTypes.name)},i.prototype.canInsertSemicolon=function(){return this.tok.type===t.tokTypes.eof||this.tok.type===t.tokTypes.braceR||t.lineBreak.test(this.input.slice(this.last.end,this.tok.start))},i.prototype.semicolon=function(){return this.eat(t.tokTypes.semi)},i.prototype.expect=function(e){var t=this;if(this.eat(e))return!0;for(var n=1;2>=n;n++)if(t.lookAhead(n).type==e){for(var r=0;n>r;r++)t.next();return!0}},i.prototype.pushCx=function(){this.context.push(this.curIndent)},i.prototype.popCx=function(){this.curIndent=this.context.pop()},i.prototype.lineEnd=function(e){for(;e<this.input.length&&!t.isNewLine(this.input.charCodeAt(e));)++e;return e},i.prototype.indentationAfter=function(e){for(var t=this,n=0;;++e){var r=t.input.charCodeAt(e);if(32===r)++n;else{if(9!==r)return n;n+=t.options.tabSize}}},i.prototype.closes=function(e,n,r,o){return this.tok.type===e||this.tok.type===t.tokTypes.eof?!0:r!=this.curLineStart&&this.curIndent<n&&this.tokenStartsLine()&&(!o||this.nextLineStart>=this.input.length||this.indentationAfter(this.nextLineStart)<n)},i.prototype.tokenStartsLine=function(){for(var e=this,t=this.tok.start-1;t>=this.curLineStart;--t){var n=e.input.charCodeAt(t);if(9!==n&&32!==n)return!1}return!0},i.prototype.extend=function(e,t){this[e]=t(this[e])},i.prototype.loadPlugins=function(e){var t=this;for(var n in e){var r=a[n];if(!r)throw new Error("Plugin '"+n+"' not found");r(t,e[n])}};var l=i.prototype;l.next=function(){var e=this;if(this.last=this.tok,this.tok=this.ahead.length?this.ahead.shift():this.readToken(),this.tok.start>=this.nextLineStart){for(;this.tok.start>=this.nextLineStart;)e.curLineStart=e.nextLineStart,e.nextLineStart=e.lineEnd(e.curLineStart)+1;this.curIndent=this.indentationAfter(this.curLineStart)}},l.readToken=function(){for(var e=this;;)try{return e.toks.next(),e.toks.type===t.tokTypes.dot&&"."===e.input.substr(e.toks.end,1)&&e.options.ecmaVersion>=6&&(e.toks.end++,e.toks.type=t.tokTypes.ellipsis),new t.Token(e.toks)}catch(r){if(!(r instanceof SyntaxError))throw r;var o=r.message,s=r.raisedAt,a=!0;if(/unterminated/i.test(o))if(s=e.lineEnd(r.pos+1),/string/.test(o))a={start:r.pos,end:s,type:t.tokTypes.string,value:e.input.slice(r.pos+1,s)};else if(/regular expr/i.test(o)){var i=e.input.slice(r.pos,s);try{i=new RegExp(i)}catch(r){}a={start:r.pos-1,end:s,type:t.tokTypes.regexp,value:i}}else a=/template/.test(o)?{start:r.pos,end:s,type:t.tokTypes.template,value:e.input.slice(r.pos,s)}:!1;else if(/invalid (unicode|regexp|number)|expecting unicode|octal literal|is reserved|directly after number|expected number in radix/i.test(o))for(;s<this.input.length&&!n(this.input.charCodeAt(s));)++s;else if(/character escape|expected hexadecimal/i.test(o))for(;s<this.input.length;){var l=e.input.charCodeAt(s++);if(34===l||39===l||t.isNewLine(l))break}else if(/unexpected character/i.test(o))s++,a=!1;else{if(!/regular expression/i.test(o))throw r;a=!0}if(e.resetTo(s),a===!0&&(a={start:s,end:s,type:t.tokTypes.name,value:"✖"}),a){if(e.options.locations&&(a.loc=new t.SourceLocation(e.toks,t.getLineInfo(e.input,a.start),t.getLineInfo(e.input,a.end))),this.options.onToken){var c=a.start;this.options.ranges&&(a.range=[a.start,a.end]);var p=a.end;if(p>this.input.length&&(p=this.input.length),p>c){var u=Object.create(null);u.type=a.type,u.value=a.value,a.range&&(u.range=[c,p]),a.loc&&(u.loc=a.loc),u.start=c,u.end=p,this.options.onToken(u)}}return a}}},l.resetTo=function(e){var n=this;this.toks.pos=e;var r=this.input.charAt(e-1);if(this.toks.exprAllowed=!r||/[\[\{\(,;:?\/*=+\-~!|&%^<>]/.test(r)||/[enwfd]/.test(r)&&/\b(keywords|case|else|return|throw|new|in|(instance|type)of|delete|void)$/.test(this.input.slice(e-10,e)),this.options.locations){this.toks.curLine=1,this.toks.lineStart=t.lineBreakG.lastIndex=0;for(var o;(o=t.lineBreakG.exec(this.input))&&o.index<e;)++n.toks.curLine,n.toks.lineStart=o.index+o[0].length}},l.lookAhead=function(e){for(var t=this;e>this.ahead.length;)t.ahead.push(t.readToken());return this.ahead[e-1]};var c=i.prototype;c.parseTopLevel=function(){var e=this,n=this.startNodeAt(this.options.locations?[0,t.getLineInfo(this.input,0)]:0);for(n.body=[];this.tok.type!==t.tokTypes.eof;){var r=e.parseStatement();if(r.end===r.start)break;n.body.push(r)}return this.last=this.tok,this.options.ecmaVersion>=6&&(n.sourceType=this.options.sourceType),this.finishNode(n,"Program")},c.parseStatement=function(){var e,n=this,o=this.tok.type,s=this.startNode();switch(this.toks.isLet()&&(o=t.tokTypes._var,e="let"),o){case t.tokTypes._break:case t.tokTypes._continue:this.next();var a=o===t.tokTypes._break;return this.semicolon()||this.canInsertSemicolon()?s.label=null:(s.label=this.tok.type===t.tokTypes.name?this.parseIdent():null,this.semicolon()),this.finishNode(s,a?"BreakStatement":"ContinueStatement");
case t.tokTypes._debugger:return this.next(),this.semicolon(),this.finishNode(s,"DebuggerStatement");case t.tokTypes._do:return this.next(),s.body=this.parseStatement(),s.test=this.eat(t.tokTypes._while)?this.parseParenExpression():this.dummyIdent(),this.semicolon(),this.finishNode(s,"DoWhileStatement");case t.tokTypes._for:if(this.next(),this.pushCx(),this.expect(t.tokTypes.parenL),this.tok.type===t.tokTypes.semi)return this.parseFor(s,null);var i=this.toks.isLet();if(i||this.tok.type===t.tokTypes._var||this.tok.type===t.tokTypes._const){var l=this.parseVar(!0,i?"let":this.tok.value);return 1!==l.declarations.length||this.tok.type!==t.tokTypes._in&&!this.isContextual("of")?this.parseFor(s,l):this.parseForIn(s,l)}var c=this.parseExpression(!0);return this.tok.type===t.tokTypes._in||this.isContextual("of")?this.parseForIn(s,this.toAssignable(c)):this.parseFor(s,c);case t.tokTypes._function:return this.next(),this.parseFunction(s,!0);case t.tokTypes._if:return this.next(),s.test=this.parseParenExpression(),s.consequent=this.parseStatement(),s.alternate=this.eat(t.tokTypes._else)?this.parseStatement():null,this.finishNode(s,"IfStatement");case t.tokTypes._return:return this.next(),this.eat(t.tokTypes.semi)||this.canInsertSemicolon()?s.argument=null:(s.argument=this.parseExpression(),this.semicolon()),this.finishNode(s,"ReturnStatement");case t.tokTypes._switch:var p=this.curIndent,u=this.curLineStart;this.next(),s.discriminant=this.parseParenExpression(),s.cases=[],this.pushCx(),this.expect(t.tokTypes.braceL);for(var d;!this.closes(t.tokTypes.braceR,p,u,!0);)if(n.tok.type===t.tokTypes._case||n.tok.type===t.tokTypes._default){var h=n.tok.type===t.tokTypes._case;d&&n.finishNode(d,"SwitchCase"),s.cases.push(d=n.startNode()),d.consequent=[],n.next(),d.test=h?n.parseExpression():null,n.expect(t.tokTypes.colon)}else d||(s.cases.push(d=n.startNode()),d.consequent=[],d.test=null),d.consequent.push(n.parseStatement());return d&&this.finishNode(d,"SwitchCase"),this.popCx(),this.eat(t.tokTypes.braceR),this.finishNode(s,"SwitchStatement");case t.tokTypes._throw:return this.next(),s.argument=this.parseExpression(),this.semicolon(),this.finishNode(s,"ThrowStatement");case t.tokTypes._try:if(this.next(),s.block=this.parseBlock(),s.handler=null,this.tok.type===t.tokTypes._catch){var f=this.startNode();this.next(),this.expect(t.tokTypes.parenL),f.param=this.toAssignable(this.parseExprAtom(),!0),this.expect(t.tokTypes.parenR),f.body=this.parseBlock(),s.handler=this.finishNode(f,"CatchClause")}return s.finalizer=this.eat(t.tokTypes._finally)?this.parseBlock():null,s.handler||s.finalizer?this.finishNode(s,"TryStatement"):s.block;case t.tokTypes._var:case t.tokTypes._const:return this.parseVar(!1,e||this.tok.value);case t.tokTypes._while:return this.next(),s.test=this.parseParenExpression(),s.body=this.parseStatement(),this.finishNode(s,"WhileStatement");case t.tokTypes._with:return this.next(),s.object=this.parseParenExpression(),s.body=this.parseStatement(),this.finishNode(s,"WithStatement");case t.tokTypes.braceL:return this.parseBlock();case t.tokTypes.semi:return this.next(),this.finishNode(s,"EmptyStatement");case t.tokTypes._class:return this.parseClass(!0);case t.tokTypes._import:return this.parseImport();case t.tokTypes._export:return this.parseExport();default:var m=this.parseExpression();return r(m)?(this.next(),this.tok.type===t.tokTypes.eof?this.finishNode(s,"EmptyStatement"):this.parseStatement()):o===t.tokTypes.name&&"Identifier"===m.type&&this.eat(t.tokTypes.colon)?(s.body=this.parseStatement(),s.label=m,this.finishNode(s,"LabeledStatement")):(s.expression=m,this.semicolon(),this.finishNode(s,"ExpressionStatement"))}},c.parseBlock=function(){var e=this,n=this.startNode();this.pushCx(),this.expect(t.tokTypes.braceL);var r=this.curIndent,o=this.curLineStart;for(n.body=[];!this.closes(t.tokTypes.braceR,r,o,!0);)n.body.push(e.parseStatement());return this.popCx(),this.eat(t.tokTypes.braceR),this.finishNode(n,"BlockStatement")},c.parseFor=function(e,n){return e.init=n,e.test=e.update=null,this.eat(t.tokTypes.semi)&&this.tok.type!==t.tokTypes.semi&&(e.test=this.parseExpression()),this.eat(t.tokTypes.semi)&&this.tok.type!==t.tokTypes.parenR&&(e.update=this.parseExpression()),this.popCx(),this.expect(t.tokTypes.parenR),e.body=this.parseStatement(),this.finishNode(e,"ForStatement")},c.parseForIn=function(e,n){var r=this.tok.type===t.tokTypes._in?"ForInStatement":"ForOfStatement";return this.next(),e.left=n,e.right=this.parseExpression(),this.popCx(),this.expect(t.tokTypes.parenR),e.body=this.parseStatement(),this.finishNode(e,r)},c.parseVar=function(e,n){var r=this,o=this.startNode();o.kind=n,this.next(),o.declarations=[];do{var s=r.startNode();s.id=r.options.ecmaVersion>=6?r.toAssignable(r.parseExprAtom(),!0):r.parseIdent(),s.init=r.eat(t.tokTypes.eq)?r.parseMaybeAssign(e):null,o.declarations.push(r.finishNode(s,"VariableDeclarator"))}while(this.eat(t.tokTypes.comma));if(!o.declarations.length){var a=this.startNode();a.id=this.dummyIdent(),o.declarations.push(this.finishNode(a,"VariableDeclarator"))}return e||this.semicolon(),this.finishNode(o,"VariableDeclaration")},c.parseClass=function(e){var n=this,o=this.startNode();this.next(),o.id=this.tok.type===t.tokTypes.name?this.parseIdent():e?this.dummyIdent():null,o.superClass=this.eat(t.tokTypes._extends)?this.parseExpression():null,o.body=this.startNode(),o.body.body=[],this.pushCx();var s=this.curIndent+1,a=this.curLineStart;for(this.eat(t.tokTypes.braceL),this.curIndent+1<s&&(s=this.curIndent,a=this.curLineStart);!this.closes(t.tokTypes.braceR,s,a);)if(!n.semicolon()){var i,l=n.startNode();n.options.ecmaVersion>=6&&(l["static"]=!1,i=n.eat(t.tokTypes.star)),n.parsePropertyName(l),r(l.key)?(r(n.parseMaybeAssign())&&n.next(),n.eat(t.tokTypes.comma)):("Identifier"!==l.key.type||l.computed||"static"!==l.key.name||n.tok.type==t.tokTypes.parenL||n.tok.type==t.tokTypes.braceL?l["static"]=!1:(l["static"]=!0,i=n.eat(t.tokTypes.star),n.parsePropertyName(l)),n.options.ecmaVersion>=5&&"Identifier"===l.key.type&&!l.computed&&("get"===l.key.name||"set"===l.key.name)&&n.tok.type!==t.tokTypes.parenL&&n.tok.type!==t.tokTypes.braceL?(l.kind=l.key.name,n.parsePropertyName(l),l.value=n.parseMethod(!1)):(l.kind=l.computed||l["static"]||i||!("Identifier"===l.key.type&&"constructor"===l.key.name||"Literal"===l.key.type&&"constructor"===l.key.value)?"method":"constructor",l.value=n.parseMethod(i)),o.body.body.push(n.finishNode(l,"MethodDefinition")))}return this.popCx(),this.eat(t.tokTypes.braceR)||(this.last.end=this.tok.start,this.options.locations&&(this.last.loc.end=this.tok.loc.start)),this.semicolon(),this.finishNode(o.body,"ClassBody"),this.finishNode(o,e?"ClassDeclaration":"ClassExpression")},c.parseFunction=function(e,n){return this.initFunction(e),this.options.ecmaVersion>=6&&(e.generator=this.eat(t.tokTypes.star)),this.tok.type===t.tokTypes.name?e.id=this.parseIdent():n&&(e.id=this.dummyIdent()),e.params=this.parseFunctionParams(),e.body=this.parseBlock(),this.finishNode(e,n?"FunctionDeclaration":"FunctionExpression")},c.parseExport=function(){var e=this.startNode();if(this.next(),this.eat(t.tokTypes.star))return e.source=this.eatContextual("from")?this.parseExprAtom():this.dummyString(),this.finishNode(e,"ExportAllDeclaration");if(this.eat(t.tokTypes._default)){var n=this.parseMaybeAssign();if(n.id)switch(n.type){case"FunctionExpression":n.type="FunctionDeclaration";break;case"ClassExpression":n.type="ClassDeclaration"}return e.declaration=n,this.semicolon(),this.finishNode(e,"ExportDefaultDeclaration")}return this.tok.type.keyword||this.toks.isLet()?(e.declaration=this.parseStatement(),e.specifiers=[],e.source=null):(e.declaration=null,e.specifiers=this.parseExportSpecifierList(),e.source=this.eatContextual("from")?this.parseExprAtom():null,this.semicolon()),this.finishNode(e,"ExportNamedDeclaration")},c.parseImport=function(){var e=this.startNode();if(this.next(),this.tok.type===t.tokTypes.string)e.specifiers=[],e.source=this.parseExprAtom(),e.kind="";else{var n;this.tok.type===t.tokTypes.name&&"from"!==this.tok.value&&(n=this.startNode(),n.local=this.parseIdent(),this.finishNode(n,"ImportDefaultSpecifier"),this.eat(t.tokTypes.comma)),e.specifiers=this.parseImportSpecifierList(),e.source=this.eatContextual("from")&&this.tok.type==t.tokTypes.string?this.parseExprAtom():this.dummyString(),n&&e.specifiers.unshift(n)}return this.semicolon(),this.finishNode(e,"ImportDeclaration")},c.parseImportSpecifierList=function(){var e=this,n=[];if(this.tok.type===t.tokTypes.star){var o=this.startNode();this.next(),o.local=this.eatContextual("as")?this.parseIdent():this.dummyIdent(),n.push(this.finishNode(o,"ImportNamespaceSpecifier"))}else{var s=this.curIndent,a=this.curLineStart,i=this.nextLineStart;for(this.pushCx(),this.eat(t.tokTypes.braceL),this.curLineStart>i&&(i=this.curLineStart);!this.closes(t.tokTypes.braceR,s+(this.curLineStart<=i?1:0),a);){var l=e.startNode();if(e.eat(t.tokTypes.star))l.local=e.eatContextual("as")?e.parseIdent():e.dummyIdent(),e.finishNode(l,"ImportNamespaceSpecifier");else{if(e.isContextual("from"))break;if(l.imported=e.parseIdent(),r(l.imported))break;l.local=e.eatContextual("as")?e.parseIdent():l.imported,e.finishNode(l,"ImportSpecifier")}n.push(l),e.eat(t.tokTypes.comma)}this.eat(t.tokTypes.braceR),this.popCx()}return n},c.parseExportSpecifierList=function(){var e=this,n=[],o=this.curIndent,s=this.curLineStart,a=this.nextLineStart;for(this.pushCx(),this.eat(t.tokTypes.braceL),this.curLineStart>a&&(a=this.curLineStart);!this.closes(t.tokTypes.braceR,o+(this.curLineStart<=a?1:0),s)&&!e.isContextual("from");){var i=e.startNode();if(i.local=e.parseIdent(),r(i.local))break;i.exported=e.eatContextual("as")?e.parseIdent():i.local,e.finishNode(i,"ExportSpecifier"),n.push(i),e.eat(t.tokTypes.comma)}return this.eat(t.tokTypes.braceR),this.popCx(),n};var p=i.prototype;p.checkLVal=function(e){if(!e)return e;switch(e.type){case"Identifier":case"MemberExpression":return e;case"ParenthesizedExpression":return e.expression=this.checkLVal(e.expression),e;default:return this.dummyIdent()}},p.parseExpression=function(e){var n=this,r=this.storeCurrentPos(),o=this.parseMaybeAssign(e);if(this.tok.type===t.tokTypes.comma){var s=this.startNodeAt(r);for(s.expressions=[o];this.eat(t.tokTypes.comma);)s.expressions.push(n.parseMaybeAssign(e));return this.finishNode(s,"SequenceExpression")}return o},p.parseParenExpression=function(){this.pushCx(),this.expect(t.tokTypes.parenL);var e=this.parseExpression();return this.popCx(),this.expect(t.tokTypes.parenR),e},p.parseMaybeAssign=function(e){if(this.toks.isContextual("yield")){var n=this.startNode();return this.next(),this.semicolon()||this.canInsertSemicolon()||this.tok.type!=t.tokTypes.star&&!this.tok.type.startsExpr?(n.delegate=!1,n.argument=null):(n.delegate=this.eat(t.tokTypes.star),n.argument=this.parseMaybeAssign()),this.finishNode(n,"YieldExpression")}var r=this.storeCurrentPos(),o=this.parseMaybeConditional(e);if(this.tok.type.isAssign){var s=this.startNodeAt(r);return s.operator=this.tok.value,s.left=this.tok.type===t.tokTypes.eq?this.toAssignable(o):this.checkLVal(o),this.next(),s.right=this.parseMaybeAssign(e),this.finishNode(s,"AssignmentExpression")}return o},p.parseMaybeConditional=function(e){var n=this.storeCurrentPos(),r=this.parseExprOps(e);if(this.eat(t.tokTypes.question)){var o=this.startNodeAt(n);return o.test=r,o.consequent=this.parseMaybeAssign(),o.alternate=this.expect(t.tokTypes.colon)?this.parseMaybeAssign(e):this.dummyIdent(),this.finishNode(o,"ConditionalExpression")}return r},p.parseExprOps=function(e){var t=this.storeCurrentPos(),n=this.curIndent,r=this.curLineStart;return this.parseExprOp(this.parseMaybeUnary(!1),t,-1,e,n,r)},p.parseExprOp=function(e,n,r,o,s,a){if(this.curLineStart!=a&&this.curIndent<s&&this.tokenStartsLine())return e;var i=this.tok.type.binop;if(null!=i&&(!o||this.tok.type!==t.tokTypes._in)&&i>r){var l=this.startNodeAt(n);if(l.left=e,l.operator=this.tok.value,this.next(),this.curLineStart!=a&&this.curIndent<s&&this.tokenStartsLine())l.right=this.dummyIdent();else{var c=this.storeCurrentPos();l.right=this.parseExprOp(this.parseMaybeUnary(!1),c,i,o,s,a)}return this.finishNode(l,/&&|\|\|/.test(l.operator)?"LogicalExpression":"BinaryExpression"),this.parseExprOp(l,n,r,o,s,a)}return e},p.parseMaybeUnary=function(e){var n,r=this,o=this.storeCurrentPos();if(this.tok.type.prefix){var s=this.startNode(),a=this.tok.type===t.tokTypes.incDec;a||(e=!0),s.operator=this.tok.value,s.prefix=!0,this.next(),s.argument=this.parseMaybeUnary(!0),a&&(s.argument=this.checkLVal(s.argument)),n=this.finishNode(s,a?"UpdateExpression":"UnaryExpression")}else if(this.tok.type===t.tokTypes.ellipsis){var i=this.startNode();this.next(),i.argument=this.parseMaybeUnary(e),n=this.finishNode(i,"SpreadElement")}else for(n=this.parseExprSubscripts();this.tok.type.postfix&&!this.canInsertSemicolon();){var l=r.startNodeAt(o);l.operator=r.tok.value,l.prefix=!1,l.argument=r.checkLVal(n),r.next(),n=r.finishNode(l,"UpdateExpression")}if(!e&&this.eat(t.tokTypes.starstar)){var c=this.startNodeAt(o);return c.operator="**",c.left=n,c.right=this.parseMaybeUnary(!1),this.finishNode(c,"BinaryExpression")}return n},p.parseExprSubscripts=function(){var e=this.storeCurrentPos();return this.parseSubscripts(this.parseExprAtom(),e,!1,this.curIndent,this.curLineStart)},p.parseSubscripts=function(e,n,r,o,s){for(var a=this;;){if(a.curLineStart!=s&&a.curIndent<=o&&a.tokenStartsLine()){if(a.tok.type!=t.tokTypes.dot||a.curIndent!=o)return e;--o}if(a.eat(t.tokTypes.dot)){var i=a.startNodeAt(n);i.object=e,i.property=a.curLineStart!=s&&a.curIndent<=o&&a.tokenStartsLine()?a.dummyIdent():a.parsePropertyAccessor()||a.dummyIdent(),i.computed=!1,e=a.finishNode(i,"MemberExpression")}else if(a.tok.type==t.tokTypes.bracketL){a.pushCx(),a.next();var l=a.startNodeAt(n);l.object=e,l.property=a.parseExpression(),l.computed=!0,a.popCx(),a.expect(t.tokTypes.bracketR),e=a.finishNode(l,"MemberExpression")}else if(r||a.tok.type!=t.tokTypes.parenL){if(a.tok.type!=t.tokTypes.backQuote)return e;var c=a.startNodeAt(n);c.tag=e,c.quasi=a.parseTemplate(),e=a.finishNode(c,"TaggedTemplateExpression")}else{var p=a.startNodeAt(n);p.callee=e,p.arguments=a.parseExprList(t.tokTypes.parenR),e=a.finishNode(p,"CallExpression")}}},p.parseExprAtom=function(){var e;switch(this.tok.type){case t.tokTypes._this:case t.tokTypes._super:var n=this.tok.type===t.tokTypes._this?"ThisExpression":"Super";return e=this.startNode(),this.next(),this.finishNode(e,n);case t.tokTypes.name:var o=this.storeCurrentPos(),s=this.parseIdent();return this.eat(t.tokTypes.arrow)?this.parseArrowExpression(this.startNodeAt(o),[s]):s;case t.tokTypes.regexp:e=this.startNode();var a=this.tok.value;return e.regex={pattern:a.pattern,flags:a.flags},e.value=a.value,e.raw=this.input.slice(this.tok.start,this.tok.end),this.next(),this.finishNode(e,"Literal");case t.tokTypes.num:case t.tokTypes.string:return e=this.startNode(),e.value=this.tok.value,e.raw=this.input.slice(this.tok.start,this.tok.end),this.next(),this.finishNode(e,"Literal");case t.tokTypes._null:case t.tokTypes._true:case t.tokTypes._false:return e=this.startNode(),e.value=this.tok.type===t.tokTypes._null?null:this.tok.type===t.tokTypes._true,e.raw=this.tok.type.keyword,this.next(),this.finishNode(e,"Literal");case t.tokTypes.parenL:var i=this.storeCurrentPos();this.next();var l=this.parseExpression();if(this.expect(t.tokTypes.parenR),this.eat(t.tokTypes.arrow))return this.parseArrowExpression(this.startNodeAt(i),l.expressions||(r(l)?[]:[l]));if(this.options.preserveParens){var c=this.startNodeAt(i);c.expression=l,l=this.finishNode(c,"ParenthesizedExpression")}return l;case t.tokTypes.bracketL:return e=this.startNode(),e.elements=this.parseExprList(t.tokTypes.bracketR,!0),this.finishNode(e,"ArrayExpression");case t.tokTypes.braceL:return this.parseObj();case t.tokTypes._class:return this.parseClass();case t.tokTypes._function:return e=this.startNode(),this.next(),this.parseFunction(e,!1);case t.tokTypes._new:return this.parseNew();case t.tokTypes.backQuote:return this.parseTemplate();default:return this.dummyIdent()}},p.parseNew=function(){var e=this.startNode(),n=this.curIndent,r=this.curLineStart,o=this.parseIdent(!0);if(this.options.ecmaVersion>=6&&this.eat(t.tokTypes.dot))return e.meta=o,e.property=this.parseIdent(!0),this.finishNode(e,"MetaProperty");var s=this.storeCurrentPos();return e.callee=this.parseSubscripts(this.parseExprAtom(),s,!0,n,r),e.arguments=this.tok.type==t.tokTypes.parenL?this.parseExprList(t.tokTypes.parenR):[],this.finishNode(e,"NewExpression")},p.parseTemplateElement=function(){var e=this.startNode();return e.value={raw:this.input.slice(this.tok.start,this.tok.end).replace(/\r\n?/g,"\n"),cooked:this.tok.value},this.next(),e.tail=this.tok.type===t.tokTypes.backQuote,this.finishNode(e,"TemplateElement")},p.parseTemplate=function(){var e=this,n=this.startNode();this.next(),n.expressions=[];var r=this.parseTemplateElement();for(n.quasis=[r];!r.tail;)e.next(),n.expressions.push(e.parseExpression()),e.expect(t.tokTypes.braceR)?r=e.parseTemplateElement():(r=e.startNode(),r.value={cooked:"",raw:""},r.tail=!0,e.finishNode(r,"TemplateElement")),n.quasis.push(r);return this.expect(t.tokTypes.backQuote),this.finishNode(n,"TemplateLiteral")},p.parseObj=function(){var e=this,n=this.startNode();n.properties=[],this.pushCx();var o=this.curIndent+1,s=this.curLineStart;for(this.eat(t.tokTypes.braceL),this.curIndent+1<o&&(o=this.curIndent,s=this.curLineStart);!this.closes(t.tokTypes.braceR,o,s);){var a,i,l=e.startNode();if(e.options.ecmaVersion>=6&&(i=e.storeCurrentPos(),l.method=!1,l.shorthand=!1,a=e.eat(t.tokTypes.star)),e.parsePropertyName(l),r(l.key))r(e.parseMaybeAssign())&&e.next(),e.eat(t.tokTypes.comma);else{if(e.eat(t.tokTypes.colon))l.kind="init",l.value=e.parseMaybeAssign();else if(e.options.ecmaVersion>=6&&(e.tok.type===t.tokTypes.parenL||e.tok.type===t.tokTypes.braceL))l.kind="init",l.method=!0,l.value=e.parseMethod(a);else if(e.options.ecmaVersion>=5&&"Identifier"===l.key.type&&!l.computed&&("get"===l.key.name||"set"===l.key.name)&&e.tok.type!=t.tokTypes.comma&&e.tok.type!=t.tokTypes.braceR)l.kind=l.key.name,e.parsePropertyName(l),l.value=e.parseMethod(!1);else{if(l.kind="init",e.options.ecmaVersion>=6)if(e.eat(t.tokTypes.eq)){var c=e.startNodeAt(i);c.operator="=",c.left=l.key,c.right=e.parseMaybeAssign(),l.value=e.finishNode(c,"AssignmentExpression")}else l.value=l.key;else l.value=e.dummyIdent();l.shorthand=!0}n.properties.push(e.finishNode(l,"Property")),e.eat(t.tokTypes.comma)}}return this.popCx(),this.eat(t.tokTypes.braceR)||(this.last.end=this.tok.start,this.options.locations&&(this.last.loc.end=this.tok.loc.start)),this.finishNode(n,"ObjectExpression")},p.parsePropertyName=function(e){if(this.options.ecmaVersion>=6){if(this.eat(t.tokTypes.bracketL))return e.computed=!0,e.key=this.parseExpression(),void this.expect(t.tokTypes.bracketR);e.computed=!1}var n=this.tok.type===t.tokTypes.num||this.tok.type===t.tokTypes.string?this.parseExprAtom():this.parseIdent();e.key=n||this.dummyIdent()},p.parsePropertyAccessor=function(){return this.tok.type===t.tokTypes.name||this.tok.type.keyword?this.parseIdent():void 0},p.parseIdent=function(){var e=this.tok.type===t.tokTypes.name?this.tok.value:this.tok.type.keyword;if(!e)return this.dummyIdent();var n=this.startNode();return this.next(),n.name=e,this.finishNode(n,"Identifier")},p.initFunction=function(e){e.id=null,e.params=[],this.options.ecmaVersion>=6&&(e.generator=!1,e.expression=!1)},p.toAssignable=function(e,t){var n=this;if(!e||"Identifier"==e.type||"MemberExpression"==e.type&&!t);else if("ParenthesizedExpression"==e.type)e.expression=this.toAssignable(e.expression,t);else{if(this.options.ecmaVersion<6)return this.dummyIdent();if("ObjectExpression"==e.type){e.type="ObjectPattern";for(var r=e.properties,o=0;o<r.length;o++)r[o].value=n.toAssignable(r[o].value,t)}else if("ArrayExpression"==e.type)e.type="ArrayPattern",this.toAssignableList(e.elements,t);else if("SpreadElement"==e.type)e.type="RestElement",e.argument=this.toAssignable(e.argument,t);else{if("AssignmentExpression"!=e.type)return this.dummyIdent();e.type="AssignmentPattern",delete e.operator}}return e},p.toAssignableList=function(e,t){for(var n=this,r=0;r<e.length;r++)e[r]=n.toAssignable(e[r],t);return e},p.parseFunctionParams=function(e){return e=this.parseExprList(t.tokTypes.parenR),this.toAssignableList(e,!0)},p.parseMethod=function(e){var n=this.startNode();return this.initFunction(n),n.params=this.parseFunctionParams(),n.generator=e||!1,n.expression=this.options.ecmaVersion>=6&&this.tok.type!==t.tokTypes.braceL,n.body=n.expression?this.parseMaybeAssign():this.parseBlock(),this.finishNode(n,"FunctionExpression")},p.parseArrowExpression=function(e,n){return this.initFunction(e),e.params=this.toAssignableList(n,!0),e.expression=this.tok.type!==t.tokTypes.braceL,e.body=e.expression?this.parseMaybeAssign():this.parseBlock(),this.finishNode(e,"ArrowFunctionExpression")},p.parseExprList=function(e,n){var o=this;this.pushCx();var s=this.curIndent,a=this.curLineStart,i=[];for(this.next();!this.closes(e,s+1,a);)if(o.eat(t.tokTypes.comma))i.push(n?null:o.dummyIdent());else{var l=o.parseMaybeAssign();if(r(l)){if(o.closes(e,s,a))break;o.next()}else i.push(l);o.eat(t.tokTypes.comma)}return this.popCx(),this.eat(e)||(this.last.end=this.tok.start,this.options.locations&&(this.last.loc.end=this.tok.loc.start)),i},s.defaultOptions.tabSize=4,s.parse_dammit=o,s.LooseParser=i,s.pluginsLoose=a,e.parse_dammit=o,e.LooseParser=i,e.pluginsLoose=a,Object.defineProperty(e,"__esModule",{value:!0})}),function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define("acorn/dist/walk",["exports"],t):t((e.acorn=e.acorn||{},e.acorn.walk=e.acorn.walk||{}))}(this,function(e){"use strict";function t(t,n,r,o,s){r||(r=e.base),function a(e,t,o){var s=o||e.type,i=n[s];r[s](e,t,a),i&&i(e,t)}(t,o,s)}function n(t,n,r,o){r||(r=e.base);var s=[];!function a(e,t,o){var i=o||e.type,l=n[i],c=e!=s[s.length-1];c&&s.push(e),r[i](e,t,a),l&&l(e,t||s,s),c&&s.pop()}(t,o)}function r(t,n,r,o,s){var a=r?e.make(r,o):o;!function i(e,t,n){a[n||e.type](e,t,i)}(t,n,s)}function o(e){return"string"==typeof e?function(t){return t==e}:e?e:function(){return!0}}function s(t,n,r,s,a,i){s=o(s),a||(a=e.base);try{!function c(e,t,o){var i=o||e.type;if((null==n||e.start<=n)&&(null==r||e.end>=r)&&a[i](e,t,c),(null==n||e.start==n)&&(null==r||e.end==r)&&s(i,e))throw new d(e,t)}(t,i)}catch(l){if(l instanceof d)return l;throw l}}function a(t,n,r,s,a){r=o(r),s||(s=e.base);try{!function l(e,t,o){var a=o||e.type;if(!(e.start>n||e.end<n)&&(s[a](e,t,l),r(a,e)))throw new d(e,t)}(t,a)}catch(i){if(i instanceof d)return i;throw i}}function i(t,n,r,s,a){r=o(r),s||(s=e.base);try{!function l(e,t,o){if(!(e.end<n)){var a=o||e.type;if(e.start>=n&&r(a,e))throw new d(e,t);s[a](e,t,l)}}(t,a)}catch(i){if(i instanceof d)return i;throw i}}function l(t,n,r,s,a){r=o(r),s||(s=e.base);var i;return function l(e,t,o){if(!(e.start>n)){var a=o||e.type;e.end<=n&&(!i||i.node.end<e.end)&&r(a,e)&&(i=new d(e,t)),s[a](e,t,l)}}(t,a),i}function c(t,n){n||(n=e.base);var r=h(n);for(var o in t)r[o]=t[o];return r}function p(e,t,n){n(e,t)}function u(){}var d=function(e,t){this.node=e,this.state=t},h=Object.create||function(e){function t(){}return t.prototype=e,new t},f={};f.Program=f.BlockStatement=function(e,t,n){for(var r=0;r<e.body.length;++r)n(e.body[r],t,"Statement")},f.Statement=p,f.EmptyStatement=u,f.ExpressionStatement=f.ParenthesizedExpression=function(e,t,n){return n(e.expression,t,"Expression")},f.IfStatement=function(e,t,n){n(e.test,t,"Expression"),n(e.consequent,t,"Statement"),e.alternate&&n(e.alternate,t,"Statement")},f.LabeledStatement=function(e,t,n){return n(e.body,t,"Statement")},f.BreakStatement=f.ContinueStatement=u,f.WithStatement=function(e,t,n){n(e.object,t,"Expression"),n(e.body,t,"Statement")},f.SwitchStatement=function(e,t,n){n(e.discriminant,t,"Expression");for(var r=0;r<e.cases.length;++r){var o=e.cases[r];o.test&&n(o.test,t,"Expression");for(var s=0;s<o.consequent.length;++s)n(o.consequent[s],t,"Statement")}},f.ReturnStatement=f.YieldExpression=function(e,t,n){e.argument&&n(e.argument,t,"Expression")},f.ThrowStatement=f.SpreadElement=function(e,t,n){return n(e.argument,t,"Expression")},f.TryStatement=function(e,t,n){n(e.block,t,"Statement"),e.handler&&n(e.handler,t),e.finalizer&&n(e.finalizer,t,"Statement")},f.CatchClause=function(e,t,n){n(e.param,t,"Pattern"),n(e.body,t,"ScopeBody")},f.WhileStatement=f.DoWhileStatement=function(e,t,n){n(e.test,t,"Expression"),n(e.body,t,"Statement")},f.ForStatement=function(e,t,n){e.init&&n(e.init,t,"ForInit"),e.test&&n(e.test,t,"Expression"),e.update&&n(e.update,t,"Expression"),n(e.body,t,"Statement")},f.ForInStatement=f.ForOfStatement=function(e,t,n){n(e.left,t,"ForInit"),n(e.right,t,"Expression"),n(e.body,t,"Statement")},f.ForInit=function(e,t,n){"VariableDeclaration"==e.type?n(e,t):n(e,t,"Expression")},f.DebuggerStatement=u,f.FunctionDeclaration=function(e,t,n){return n(e,t,"Function")},f.VariableDeclaration=function(e,t,n){for(var r=0;r<e.declarations.length;++r)n(e.declarations[r],t)},f.VariableDeclarator=function(e,t,n){n(e.id,t,"Pattern"),e.init&&n(e.init,t,"Expression")},f.Function=function(e,t,n){e.id&&n(e.id,t,"Pattern");for(var r=0;r<e.params.length;r++)n(e.params[r],t,"Pattern");n(e.body,t,e.expression?"ScopeExpression":"ScopeBody")},f.ScopeBody=function(e,t,n){return n(e,t,"Statement")},f.ScopeExpression=function(e,t,n){return n(e,t,"Expression")},f.Pattern=function(e,t,n){"Identifier"==e.type?n(e,t,"VariablePattern"):"MemberExpression"==e.type?n(e,t,"MemberPattern"):n(e,t)},f.VariablePattern=u,f.MemberPattern=p,f.RestElement=function(e,t,n){return n(e.argument,t,"Pattern")},f.ArrayPattern=function(e,t,n){for(var r=0;r<e.elements.length;++r){var o=e.elements[r];o&&n(o,t,"Pattern")}},f.ObjectPattern=function(e,t,n){for(var r=0;r<e.properties.length;++r)n(e.properties[r].value,t,"Pattern")},f.Expression=p,f.ThisExpression=f.Super=f.MetaProperty=u,f.ArrayExpression=function(e,t,n){for(var r=0;r<e.elements.length;++r){var o=e.elements[r];o&&n(o,t,"Expression")}},f.ObjectExpression=function(e,t,n){for(var r=0;r<e.properties.length;++r)n(e.properties[r],t)},f.FunctionExpression=f.ArrowFunctionExpression=f.FunctionDeclaration,f.SequenceExpression=f.TemplateLiteral=function(e,t,n){for(var r=0;r<e.expressions.length;++r)n(e.expressions[r],t,"Expression")},f.UnaryExpression=f.UpdateExpression=function(e,t,n){n(e.argument,t,"Expression")},f.BinaryExpression=f.LogicalExpression=function(e,t,n){n(e.left,t,"Expression"),n(e.right,t,"Expression")},f.AssignmentExpression=f.AssignmentPattern=function(e,t,n){n(e.left,t,"Pattern"),n(e.right,t,"Expression")},f.ConditionalExpression=function(e,t,n){n(e.test,t,"Expression"),n(e.consequent,t,"Expression"),n(e.alternate,t,"Expression")},f.NewExpression=f.CallExpression=function(e,t,n){if(n(e.callee,t,"Expression"),e.arguments)for(var r=0;r<e.arguments.length;++r)n(e.arguments[r],t,"Expression")},f.MemberExpression=function(e,t,n){n(e.object,t,"Expression"),e.computed&&n(e.property,t,"Expression")},f.ExportNamedDeclaration=f.ExportDefaultDeclaration=function(e,t,n){e.declaration&&n(e.declaration,t,"ExportNamedDeclaration"==e.type||e.declaration.id?"Statement":"Expression"),e.source&&n(e.source,t,"Expression")},f.ExportAllDeclaration=function(e,t,n){n(e.source,t,"Expression")},f.ImportDeclaration=function(e,t,n){for(var r=0;r<e.specifiers.length;r++)n(e.specifiers[r],t);n(e.source,t,"Expression")},f.ImportSpecifier=f.ImportDefaultSpecifier=f.ImportNamespaceSpecifier=f.Identifier=f.Literal=u,f.TaggedTemplateExpression=function(e,t,n){n(e.tag,t,"Expression"),n(e.quasi,t)},f.ClassDeclaration=f.ClassExpression=function(e,t,n){return n(e,t,"Class")},f.Class=function(e,t,n){e.id&&n(e.id,t,"Pattern"),e.superClass&&n(e.superClass,t,"Expression");for(var r=0;r<e.body.body.length;r++)n(e.body.body[r],t)},f.MethodDefinition=f.Property=function(e,t,n){e.computed&&n(e.key,t,"Expression"),n(e.value,t,"Expression")},e.simple=t,e.ancestor=n,e.recursive=r,e.findNodeAt=s,e.findNodeAround=a,e.findNodeAfter=i,e.findNodeBefore=l,e.make=c,e.base=f,Object.defineProperty(e,"__esModule",{value:!0})}),function(e){return"object"==typeof exports&&"object"==typeof module?exports.init=e:"function"==typeof define&&define.amd?define("tern/lib/def",{init:e}):void(tern.def={init:e})}(function(e,t){"use strict";function n(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function r(e,t,n){return e.call?e(t,n):e}function o(e,n){if("!ret"==n){if(e.retval)return e.retval;var r=new t.AVal;return e.propagate(new t.IsCallee(t.ANull,[],null,r)),r}return e.getProp(n)}function s(e,n,o,s){return function(a,i){for(var l=[],c=0;c<n.length;c++)l.push(r(n[c],a,i));return new t.Fn(e,t.ANull,l,r(o,a,i),s)}}function a(e){return function(n,o){for(var s=new t.AVal,a=0;a<e.length;a++)r(e[a],n,o).propagate(s);return s.maxWeight=1e5,s}}function i(e){return function(n,r){return new t.Arr(e(n,r))}}function l(e){return function(n,o){return new t.Arr(e.map(function(e){return r(e,n,o)}))}}function c(e,n,r,o){var s=new y(e,null,r,o).parseType(!1,n,!0);if(/^fn\(/.test(e))for(var a=0;a<s.args.length;++a)(function(e){var n=s.args[e];n instanceof t.Fn&&n.args&&n.args.length&&p(s,function(r,o){var s=o[e];s&&s.propagate(new t.IsCallee(t.cx().topScope,n.args,null,t.ANull))})})(a);return s}function p(e,t,n){var r=e.computeRet,o=e.retval;e.computeRet=function(e,s,a){var i=t(e,s,a),l=r?r(e,s,a):o;return n?i:l}}function u(e,n){for(var r=0;r<n.length&&e!=t.ANull;++r){var o=n[r];if("!"==o.charAt(0))if("!proto"==o)e=e instanceof t.Obj&&e.proto||t.ANull;else{var s=e.getFunctionType();if(s)if("!ret"==o)e=s.retval&&s.retval.getType(!1)||t.ANull;else{var a=s.args&&s.args[Number(o.slice(1))];e=a&&a.getType(!1)||t.ANull}else e=t.ANull}else if(e instanceof t.Obj&&("prototype"==o&&e instanceof t.Fn||e.hasProp(o))){var i=e.getProp(o);e=!i||i.isEmpty()?t.ANull:i.types[0]}else e=t.ANull}return e}function d(e){var t=Object.create(e.prototype);return t.props=Object.create(null),t.isShell=!0,t}function h(e){if(!e["!type"]||/^(fn\(|\[|\+)/.test(e["!type"]))return!1;for(var t in e)if("!type"!=t&&"!doc"!=t&&"!url"!=t&&"!span"!=t&&"!data"!=t)return!1;return!0}function f(e,r,o){if(!e){var s=r["!type"];if(s)if(/^fn\(/.test(s))e=d(t.Fn);else if("["==s.charAt(0))e=d(t.Arr);else{if("+"!=s.charAt(0))throw new Error("Invalid !type spec: "+s);e=d(t.Obj)}else e=r["!stdProto"]?t.cx().protos[r["!stdProto"]]:d(t.Obj);e.name=o}for(var a in r)if(n(r,a)&&33!=a.charCodeAt(0)){var i=r[a];if("string"==typeof i||h(i))continue;var l=e.defProp(a);f(l.getObjType(),i,o?o+"."+a:a).propagate(l)}return e}function m(e,r,o){if(e.isShell){delete e.isShell;var s=r["!type"];if(s)c(s,o,e);else{var a=r["!proto"]&&c(r["!proto"]);t.Obj.call(e,a instanceof t.Obj?a:!0,o)}}var i=r["!effects"];if(i&&e instanceof t.Fn)for(var l=0;l<i.length;++l)x(i[l],e);g(r,e);for(var p in r)if(n(r,p)&&33!=p.charCodeAt(0)){var u=r[p],d=e.defProp(p),f=o?o+"."+p:p;if("string"==typeof u)d.isEmpty()&&c(u,f).propagate(d);else{if(h(u)){if(!d.isEmpty())continue;c(u["!type"],f,null,!0).propagate(d)}else m(d.getObjType(),u,f);u["!doc"]&&(d.doc=u["!doc"]),u["!url"]&&(d.url=u["!url"]),u["!span"]&&(d.span=u["!span"])}}return e}function g(e,t){e["!doc"]&&(t.doc=e["!doc"]),e["!url"]&&(t.url=e["!url"]),e["!span"]&&(t.span=e["!span"]),e["!data"]&&(t.metaData=e["!data"])}function b(e,n){var r=t.cx(),o=r.parent;t.addOrigin(r.curOrigin=e["!name"]||"env#"+r.origins.length),r.localDefs=r.definitions[r.curOrigin]=Object.create(null),o&&o.signal("preLoadDef",e),f(n,e);var s=e["!define"];if(s){for(var a in s){var i=s[a];r.localDefs[a]="string"==typeof i?_(i):f(null,i,a)}for(var a in s){var i=s[a];"string"!=typeof i&&m(r.localDefs[a],s[a],a)}}m(n,e),o&&o.signal("postLoadDef",e),r.curOrigin=r.localDefs=null}var y=e.TypeParser=function(e,t,n,r){this.pos=t||0,this.spec=e,this.base=n,this.forceNew=r
};y.prototype={eat:function(e){return(1==e.length?this.spec.charAt(this.pos)==e:this.spec.indexOf(e,this.pos)==this.pos)?(this.pos+=e.length,!0):void 0},word:function(e){for(var t,n="",e=e||/[\w$]/;(t=this.spec.charAt(this.pos))&&e.test(t);)n+=t,++this.pos;return n},error:function(){throw new Error("Unrecognized type spec: "+this.spec+" (at "+this.pos+")")},parseFnType:function(e,n,r,o){var a=[],i=[],l=!1;if(!this.eat(")"))for(var c=0;;++c){var p,u=this.spec.indexOf(": ",this.pos);-1!=u&&(p=this.spec.slice(this.pos,u),/^[$\w?]+$/.test(p)?this.pos=u+2:p=null),i.push(p);var d=this.parseType(e);if(d.call&&(l=!0),a.push(d),!this.eat(", ")){this.eat(")")||this.error();break}}var h,f,m,g;if(this.eat(" -> ")){var b=this.pos;h=this.parseType(!0),h.call&&!l&&(f=h,h=t.ANull,m=b)}else h=t.ANull;return l?s(n,a,h,o):(r&&(g=this.base)?t.Fn.call(this.base,n,t.ANull,a,i,h,o):g=new t.Fn(n,t.ANull,a,i,h,o),f&&(g.computeRet=f),null!=m&&(g.computeRetSource=this.spec.slice(m,this.pos)),g)},parseType:function(e,n,r){var o=this.parseTypeMaybeProp(e,n,r);if(!this.eat("|"))return o;for(var s=[o],i=o.call;;){var l=this.parseTypeMaybeProp(e,n,r);if(s.push(l),l.call&&(i=!0),!this.eat("|"))break}if(i)return a(s);for(var c=new t.AVal,p=0;p<s.length;p++)s[p].propagate(c);return c.maxWeight=1e5,c},parseTypeMaybeProp:function(e,t,n){for(var r=this.parseTypeInner(e,t,n);e&&this.eat(".");)r=this.extendWithProp(r);return r},extendWithProp:function(e){var t=this.word(/[\w<>$!:]/)||this.error();return e.apply?function(n,r){return o(e(n,r),t)}:o(e,t)},parseTypeInner:function(e,n,r){var o;if(this.eat("fn(")||(o=this.eat("fn*(")))return this.parseFnType(e,n,r,o);if(this.eat("[")){for(var s,a=this.parseType(e),c=a.call;this.eat(", ");){s||(s=[a]);var p=this.parseType(e);s.push(p),c=c||p.call}return this.eat("]")||this.error(),c?s?l(s):i(a):r&&this.base?(t.Arr.call(this.base,s||a),this.base):new t.Arr(s||a)}if(this.eat("+")){var d=this.word(/[\w$<>\.:!]/),h=t.cx().localDefs[d+".prototype"];if(!h){var h=_(d);if(!(h instanceof t.Obj))return h;var f=u(h,["prototype"]);f&&(f=f.getObjType())&&(h=f)}if(e&&this.eat("["))return this.parsePoly(h);if(r&&this.base){this.base.proto=h;var n=h.hasCtor&&h.hasCtor.name||h.name;return n&&(this.base.name=n),this.base}return r&&this.forceNew?new t.Obj(h):t.getInstance(h)}if(this.eat(":")){var n=this.word(/[\w$\.]/);return t.getSymbol(n)}if(e&&this.eat("!")){var m=this.word(/\d/);if(m)return m=Number(m),function(e,n){return n[m]||t.ANull};if(this.eat("this"))return function(e){return e};if(this.eat("custom:")){var g=this.word(/[\w$]/);return S[g]||function(){return t.ANull}}return this.fromWord("!"+this.word(/[\w$<>\.!:]/))}return this.eat("?")?t.ANull:this.fromWord(this.word(/[\w$<>\.!:`]/))},fromWord:function(e){var n=t.cx();switch(e){case"number":return n.num;case"string":return n.str;case"bool":return n.bool;case"<top>":return n.topScope}return n.localDefs&&e in n.localDefs?n.localDefs[e]:_(e)},parsePoly:function(e){var n,r="<i>";(n=this.spec.slice(this.pos).match(/^\s*([\w$:]+)\s*=\s*/))&&(r=n[1],this.pos+=n[0].length);var o=this.parseType(!0);if(this.eat("]")||this.error(),o.call)return function(n,s){var a=new t.Obj(e);return o(n,s).propagate(a.defProp(r)),a};var s=new t.Obj(e);return o.propagate(s.defProp(r)),s}};var v,x=e.parseEffect=function(e,n){var o;if(0==e.indexOf("propagate ")){var s=new y(e,10),a=s.parseType(!0);s.eat(" ")||s.error();var i=s.parseType(!0);p(n,function(e,t){r(a,e,t).propagate(r(i,e,t))})}else if(0==e.indexOf("call ")){var l=5==e.indexOf("and return ",5),s=new y(e,l?16:5),c=s.parseType(!0),u=null,d=[];for(s.eat(" this=")&&(u=s.parseType(!0));s.eat(" ");)d.push(s.parseType(!0));p(n,function(e,n){for(var o=r(c,e,n),s=u?r(u,e,n):t.ANull,a=[],i=0;i<d.length;++i)a.push(r(d[i],e,n));var p=l?new t.AVal:t.ANull;return o.propagate(new t.IsCallee(s,a,null,p)),p},l)}else if(o=e.match(/^custom (\S+)\s*(.*)/)){var h=S[o[1]];h&&p(n,o[2]?h(o[2]):h)}else{if(0!=e.indexOf("copy "))throw new Error("Unknown effect type: "+e);var s=new y(e,5),f=s.parseType(!0);s.eat(" ");var m=s.parseType(!0);p(n,function(e,n){var o=r(f,e,n),s=r(m,e,n);o.forAllProps(function(e,n,r){r&&"<i>"!=e&&s.propagate(new t.DefProp(e,n))})})}},_=e.parsePath=function(e,n){var r=t.cx(),o=r.paths[e],s=e;if(null!=o)return o;r.paths[e]=t.ANull;var a=n||v||r.topScope;if(r.localDefs)for(var i in r.localDefs)if(0==e.indexOf(i)){if(e==i)return r.paths[e]=r.localDefs[e];if("."==e.charAt(i.length)){a=r.localDefs[i],e=e.slice(i.length+1);break}}var l=u(a,e.split("."));return r.paths[s]=l==t.ANull?null:l,l};e.load=function(e,n){n||(n=t.cx().topScope);var r=v;v=n;try{b(e,n)}finally{v=r}},e.parse=function(e,n,r){var o=t.cx();n&&(o.origin=n,o.localDefs=o.definitions[n]);try{return"string"==typeof e?c(e,r):m(f(null,e,r),e,r)}finally{n&&(o.origin=o.localDefs=null)}};var S=Object.create(null);t.registerFunction=function(e,t){S[e]=t};var w=t.constraint({construct:function(e,t,n){this.created=e,this.target=t,this.spec=n},addType:function(e){if(e instanceof t.Obj&&this.created++<5){var n=new t.Obj(e),r=this.spec;if(r instanceof t.AVal&&(r=r.getObjType(!1)),r instanceof t.Obj)for(var o in r.props){var s=r.props[o].types[0],a=n.defProp(o);if(s&&s instanceof t.Obj&&s.props.value){var i=s.props.value.getType(!1);i&&a.addType(i)}}this.target.addType(n)}}});t.registerFunction("Object_create",function(e,n,r){if(r&&r.length&&"Literal"==r[0].type&&null==r[0].value)return new t.Obj;var o=new t.AVal;return n[0]&&n[0].propagate(new w(0,o,n[1])),o});var k=t.constraint({construct:function(e){this.target=e},addType:function(e){e instanceof t.Obj&&(e.hasProp("value")?e.getProp("value").propagate(this.target):e.hasProp("get")&&e.getProp("get").propagate(new t.IsCallee(t.ANull,[],null,this.target)))}});t.registerFunction("Object_defineProperty",function(e,n,r){if(r&&r.length>=3&&"Literal"==r[1].type&&"string"==typeof r[1].value){var o=n[0],s=new t.AVal;o.propagate(new t.DefProp(r[1].value,s,r[1])),n[2].propagate(new k(s))}return t.ANull}),t.registerFunction("Object_defineProperties",function(e,n,r){if(n.length>=2){var o=n[0];n[1].forAllProps(function(e,n,s){if(s){var a=new t.AVal;o.propagate(new t.DefProp(e,a,r&&r[1])),n.propagate(new k(a))}})}return t.ANull});var E=t.constraint({construct:function(e,t,n){this.self=e,this.args=t,this.target=n},addType:function(e){if(e instanceof t.Fn){this.target.addType(new t.Fn(e.name,t.ANull,e.args.slice(this.args.length),e.argNames.slice(this.args.length),e.retval,e.generator)),this.self.propagate(e.self);for(var n=0;n<Math.min(e.args.length,this.args.length);++n)this.args[n].propagate(e.args[n])}}});t.registerFunction("Function_bind",function(e,n){if(!n.length)return t.ANull;var r=new t.AVal;return e.propagate(new E(n[0],n.slice(1),r)),r}),t.registerFunction("Array_ctor",function(e,n){var r=new t.Arr;if(1!=n.length||!n[0].hasType(t.cx().num))for(var o=r.getProp("<i>"),s=0;s<n.length;++s)n[s].propagate(o);return r}),t.registerFunction("Promise_ctor",function(e,n,r){var o=t.cx().definitions.ecma6;if(!o||n.length<1)return t.ANull;var s=new t.Obj(o["Promise.prototype"]),a=s.defProp(":t",r&&r[0]),i=new t.AVal;i.propagate(a);var l=new t.Fn("execute",t.ANull,[i],["value"],t.ANull),c=o.Promise_reject;return n[0].propagate(new t.IsCallee(t.ANull,[l,c],null,t.ANull)),s});var j=t.constraint({construct:function(e){this.output=e},addType:function(e){e.constructor==t.Obj&&"Promise"==e.name&&e.hasProp(":t")?e.getProp(":t").propagate(this.output):e.propagate(this.output)}}),T=50;return t.registerFunction("Promise_then",function(e,n,r){var o=n.length&&n[0].getFunctionType(),s=t.cx().definitions.ecma6;if(!o||!s)return e;var a,i=new t.Obj(s["Promise.prototype"]),l=i.defProp(":t",r&&r[0]);return o.retval.isEmpty()&&(a=e.getType())instanceof t.Obj&&a.hasProp(":t")&&a.getProp(":t").propagate(l,T),o.retval.propagate(new j(l)),i}),t.registerFunction("getOwnPropertySymbols",function(e,n){if(!n.length)return t.ANull;var r=new t.AVal;return n[0].forAllProps(function(e,n,o){o&&":"==e.charAt(0)&&r.addType(t.getSymbol(e.slice(1)))}),r}),t.registerFunction("getSymbol",function(e,n,r){return r.length&&"Literal"==r[0].type&&"string"==typeof r[0].value?t.getSymbol(r[0].value):t.ANull}),e}),function(e,t){return"object"==typeof exports&&"object"==typeof module?t(exports):"function"==typeof define&&define.amd?define("tern/lib/signal",["exports"],t):void t((e.tern||(e.tern={})).signal={})}(this,function(e){function t(e,t){var n=this._handlers||(this._handlers=Object.create(null));(n[e]||(n[e]=[])).push(t)}function n(e,t){var n=this._handlers&&this._handlers[e];if(n)for(var r=0;r<n.length;++r)if(n[r]==t){n.splice(r,1);break}}function r(e,t){var n=e._handlers&&e._handlers[t];return n&&n.length?n.slice():i}function o(e,t,n,o,s){for(var a=r(this,e),i=0;i<a.length;++i)a[i].call(this,t,n,o,s)}function s(e,t,n,o,s){for(var a=r(this,e),i=0;i<a.length;++i){var l=a[i].call(this,t,n,o,s);if(null!==l&&void 0!==l)return l}}function a(e){var t=this._handlers&&this._handlers[e];return t&&t.length>0&&t}var i=[];e.mixin=function(e){return e.on=t,e.off=n,e.signal=o,e.signalReturnFirst=s,e.hasHandler=a,e}}),function(e,t){return"object"==typeof exports&&"object"==typeof module?t(exports,require("acorn/dist/acorn"),require("acorn/dist/acorn_loose"),require("acorn/dist/walk"),require("./def"),require("./signal")):"function"==typeof define&&define.amd?define("tern/lib/infer",["exports","acorn/dist/acorn","acorn/dist/acorn_loose","acorn/dist/walk","./def","./signal"],t):void t(e.tern||(e.tern={}),acorn,acorn,acorn.walk,tern.def,tern.signal)}(this,function(e,t,n,r,o,s){"use strict";function a(e,t){var n=Object.create(e);if(t)for(var r in t)n[r]=t[r];return n}function i(e,t,n){var r=e.getType(!1),o=t.getType(!1);return r&&o?l(r,o,n):!0}function l(e,t,n){if(!e||n>=5)return t;if(!e||e==t)return e;if(!t)return e;if(e.constructor!=t.constructor)return!1;if(e.constructor!=Ot){if(e.constructor==Et){var r=0,o=0,s=0;for(var a in e.props)r++,a in t.props&&i(e.props[a],t.props[a],n+1)&&s++;for(var a in t.props)o++;return r&&o&&s<Math.max(r,o)/2?!1:r>o?e:t}return e.constructor==Tt&&e.args.length==t.args.length&&e.args.every(function(e,r){return i(e,t.args[r],n+1)})&&i(e.retval,t.retval,n+1)&&i(e.self,t.self,n+1)?e:!1}var c=e.getProp("<i>").getType(!1);if(!c)return t;var p=t.getProp("<i>").getType(!1);return!p||l(c,p,n+1)?t:void 0}function c(e){for(var t=0,n=0,r=0,o=null,s=0;s<e.length;++s){var a=e[s];if(a instanceof Ot)++t;else if(a instanceof Tt)++n;else if(a instanceof Et)++r;else if(a instanceof kt){if(o&&a.name!=o.name)return null;o=a}}var i=(t&&1)+(n&&1)+(r&&1)+(o&&1);if(i>1)return null;if(o)return o;for(var l=0,c=null,s=0;s<e.length;++s){var a=e[s],p=0;if(t)p=a.getProp("<i>").isEmpty()?1:2;else if(n){p=1;for(var u=0;u<a.args.length;++u)a.args[u].isEmpty()||++p;a.retval.isEmpty()||++p}else r&&(p=a.name?100:2);p>=l&&(l=p,c=a)}return c}function p(e,t){Rt.disabledComputing={fn:e,prev:Rt.disabledComputing};var n=t();return Rt.disabledComputing=Rt.disabledComputing.prev,n}function u(e){var t=e.charCodeAt(0);return t>=48&&57>=t?!/\D/.test(e):!1}function d(e){return"__proto__"==e||"✖"==e||jt&&"__iterator__"==e}function h(e,t){var n=Rt.props[e]||(Rt.props[e]=[]);n.push(t)}function f(e){return Rt.props[e]}function m(t){if(Rt.workList)return t(Rt.workList);for(var n=[],r=0,o=Rt.workList=function(e,t,o){r<Dt-Mt*n.length&&n.push(e,t,o,r)},s=t(o),a=0;a<n.length;a+=4){if(At&&+new Date>=At)throw new e.TimedOut;r=n[a+3]+1,n[a+1].addType(n[a],n[a+2])}return Rt.workList=null,s}function g(e,t,n){var r=Rt.curSuperCtor,o=Rt.curSuper;Rt.curSuperCtor=e,Rt.curSuper=t;var s=n();return Rt.curSuperCtor=r,Rt.curSuper=o,s}function b(e){for(;e.isBlock;)e=e.prev;return e}function y(e,t){var n=b(e).fnType;n&&(n.instantiateScore=(n.instantiateScore||0)+t)}function v(e,t){try{return r.simple(e,{Expression:function(){if(--t<=0)throw Nt}}),!0}catch(n){if(n==Nt)return!1;throw n}}function x(e,t){var n=t.instantiateScore;return!Rt.disabledComputing&&n&&t.args.length&&v(e,5*n)?(y(b(t.originNode.scope.prev),n/2),_(e,t),!0):void(t.instantiateScore=null)}function _(e,t){for(var n=0;n<t.args.length;++n)t.args[n]=new at;t.self=new at,t.computeRet=function(n,o){return p(t,function(){var s=Rt.curOrigin;Rt.curOrigin=t.origin;var a=e.scope,i=new Pt(a.prev,a.originNode);for(var l in a.props)for(var c=i.defProp(l,a.props[l].originNode),p=0;p<o.length;++p)t.argNames[p]==l&&p<o.length&&o[p].propagate(c);for(var u=t.argNames.length!=o.length?t.argNames.slice(0,o.length):t.argNames;u.length<o.length;)u.push("?");if(i.fnType=new Tt(t.name,n,o,u,X,t.generator),i.fnType.originNode=t.originNode,t.arguments){var d=i.fnType.arguments=new at;i.defProp("arguments").addType(new Ot(d));for(var p=0;p<o.length;++p)o[p].propagate(d)}return e.scope=i,r.recursive(e.body,i,null,It),r.recursive(e.body,i,null,qt),Rt.curOrigin=s,i.fnType.retval})}}function S(e){function t(e,r,o){if(!(o>3)&&e.forward)for(var s=0;s<e.forward.length;++s){var a=e.forward[s].propagatesTo();if(a){var i,l=r;if(a instanceof at)i=a;else{if(!(a.target instanceof at))continue;l+=a.pathExt,i=a.target}if(i==n)return l;var c=t(i,l,o+1);if(c)return c}}}var n=e.retval;if(n!=X&&!e.isArrowFn()){var r,s;!n.isEmpty()&&(r=n.getType())instanceof Ot&&(n=s=r.getProp("<i>"));for(var a=t(e.self,"!this",0),i=0;!a&&i<e.args.length;++i)a=t(e.args[i],"!"+i,0);if(a){s&&(a="["+a+"]");var l=new o.TypeParser(a),c=l.parseType(!0);return e.computeRet=c.apply?c:function(){return c},e.computeRetSource=a,!0}}}function w(e,t){return e.defProp(t.name,t)}function k(e){return"Identifier"==e.type?e.name:"AssignmentPattern"==e.type?k(e.left):"ObjectPattern"==e.type?"{"+e.properties.map(function(e){return k(e.value)}).join(", ")+"}":"ArrayPattern"==e.type?"["+e.elements.map(k).join(", ")+"]":"RestElement"==e.type?"..."+k(e.argument):"_"}function E(e){return"VariableDeclaration"==e.type&&"var"!=e.kind||"FunctionDeclaration"==e.type||"ClassDeclaration"==e.type}function j(e,t){return{inner:e,outer:t||e}}function T(e){var t=e.getSymbolType();return t?t.asPropName():void 0}function O(e){switch(e){case"+":case"-":case"~":return Rt.num;case"!":return Rt.bool;case"typeof":return Rt.str;case"void":case"delete":return X}}function C(e){switch(e){case"==":case"!=":case"===":case"!==":case"<":case">":case">=":case"<=":case"in":case"instanceof":return!0}}function R(e){if(e.regex)return mt(Rt.protos.RegExp);switch(typeof e.value){case"boolean":return Rt.bool;case"number":return Rt.num;case"string":return Rt.str;case"object":case"function":return e.value?mt(Rt.protos.RegExp):X}}function A(e,t){if(e==t||t==X)return e;if(e==X)return t;var n=new at;return e.propagate(n),t.propagate(n),n}function D(e,t){for(var n=0;n<e.params.length;n++){var r=e.params[n];"Identifier"!=r.type&&P(r,t,e.scope.fnType.args[n])}}function M(e,t){return t.hasProp(e.name)||Rt.topScope.defProp(e.name,e)}function P(e,t,n){var r=Ft[e.type];r&&r(e,t,n)}function N(e){var t=b(e);return t.fnType?t.fnType.self:t}function I(e){e.isEmpty()&&e.propertyOf&&(e.propertyOf.getProp(e.propertyName).addType(new Et,nt),I(e.propertyOf))}function L(e,t,n){!n&&e.id&&(n=e.id.name);var r,o,s=Rt.protos.Object;if(e.superClass)if("Literal"==e.superClass.type&&null==e.superClass.value)s=null;else{var a,i=U(e.superClass,t);r=i.getFunctionType(),r&&(a=r.getProp("prototype").getObjType())?s=a:(r=i,o=i.getProp("prototype"))}var l=new Et(s,n&&n+".prototype");return o&&o.propagate(new _t(l)),g(r,o||s,function(){for(var r,o=e.body.body,s=0;s<o.length;s++)"constructor"==o[s].kind&&(r=o[s].value);var a=e.objType=r?U(r,t):new Tt(n,X,[],null,X);a.originNode=e.id||r||e;var i=mt(l,a);a.self.addType(i),a.defProp("prototype",e).addType(l);for(var s=0;s<o.length;s++){var c,p=o[s];if("constructor"!=p.kind){var u=Lt(p,t);"<i>"==u||"set"==p.kind?c=X:(c=(p["static"]?a:l).defProp(u,p.key),c.initializer=!0,"get"==p.kind&&(c=new dt(i,[],null,c))),U(p.value,t,c);var d=c.getFunctionType();d&&d.self.addType(i)}}return a})}function F(e,t,n){var r=e.length>1&&e.length<6;if(r){for(var o,s=!0,a=0;a<e.length;a++){var i=e[a];i?"Literal"!=i.type||o&&o!=typeof i.value?s=!1:o=typeof i.value:r=!1}s&&(r=!1)}if(r){for(var l=[],a=0;a<e.length;++a)l.push(n(e[a],t));return new Ot(l)}if(e.length<2)return new Ot(e[0]&&n(e[0],t));for(var c=new at,a=0;a<e.length;a++)e[a]&&n(e[a],t).propagate(c);return new Ot(c)}function z(e){return function(t,n,r,o){var s=e(t,n,o);return r&&s.propagate(r),s}}function q(e){return function(t,n,r,o){return r||(r=new at),e(t,n,r,o),r}}function U(e,t,n,r){var o=zt[e.type];return o?o(e,t,n,r):X}function B(e){return"VariableDeclaration"==e.type?e.declarations[0].id:e}function W(e,t,n){var r=Array.isArray(e);return r&&1==e.length&&(e=e[0],r=!1),r?null==n?function(t){return e.indexOf(t.origin)>-1}:function(r,o){return o&&o.start>=t&&o.end<=n&&e.indexOf(r.origin)>-1}:null==n?function(t){return t.origin==e}:function(r,o){return o&&o.start>=t&&o.end<=n&&r.origin==e}}function G(e){Vt=!0;var t=f(e);if(t)for(var n=0;n<t.length;++n){var r=t[n].getProp(e);if(!r.isEmpty())return r}return X}function V(e,t){var n=new Et(!0);n.defProp("done").addType(Rt.bool),t.propagate(n.defProp("value"));var r=new Tt(null,X,e?[e]:[],e?["?"]:[],n),o=new Et(Rt.definitions.ecma6&&Rt.definitions.ecma6.generator_prototype||!0);return o.defProp("next").addType(r),o}function H(e,t){return e.generator?e.computeRet?V(e.yieldval,t):(e.generator===!0&&(e.generator=V(e.yieldval,t)),e.generator):t}function $(e,t,n){var r=J(e,n).getFunctionType();if(!r)return X;var o=r.retval;if(r.computeRet){for(var s=0,a=[];s<t.length;++s)a.push(J(t[s],n));var i=X;"MemberExpression"==e.type&&(i=J(e.object,n)),o=r.computeRet(i,a,t)}return H(r,o)}function J(e,t){var n=Bt[e.type];return n?n(e,t):X}var K=e.toString=function(e,t,n){return!e||e==n||t&&-3>t?"?":e.toString(t,n)},X=e.ANull=s.mixin({addType:function(){},propagate:function(){},getProp:function(){return X},forAllProps:function(){},hasType:function(){return!1},isEmpty:function(){return!0},getFunctionType:function(){},getObjType:function(){},getSymbolType:function(){},getType:function(){},gatherProperties:function(){},propagatesTo:function(){},typeHint:function(){},propHint:function(){},toString:function(){return"?"}}),Q=100,Y=90,Z=10,et=6,tt=6,nt=1,rt=90,ot=2,st=4,at=e.AVal=function(){this.types=[],this.forward=null,this.maxWeight=0};at.prototype=a(X,{addType:function(e,t){if(t=t||Q,this.maxWeight<t){if(this.maxWeight=t,1==this.types.length&&this.types[0]==e)return;this.types.length=0}else if(this.maxWeight>t||this.types.indexOf(e)>-1)return;this.signal("addType",e),this.types.push(e);var n=this.forward;n&&m(function(r){for(var o=0;o<n.length;++o)r(e,n[o],t)})},propagate:function(e,t){if(!(e==X||e instanceof wt&&this.forward&&this.forward.length>2)){t&&t!=Q&&(e=new St(e,t)),(this.forward||(this.forward=[])).push(e);var n=this.types;n.length&&m(function(r){for(var o=0;o<n.length;++o)r(n[o],e,t)})}},getProp:function(e){if(d(e))return X;var t=(this.props||(this.props=Object.create(null)))[e];return t||(t=this.props[e]=new at,this.propagate(new ct(e,t))),t},forAllProps:function(e){this.propagate(new ut(e))},hasType:function(e){return this.types.indexOf(e)>-1},isEmpty:function(){return 0===this.types.length},getFunctionType:function(){for(var e=this.types.length-1;e>=0;--e)if(this.types[e]instanceof Tt)return this.types[e]},getObjType:function(){for(var e=null,t=this.types.length-1;t>=0;--t){var n=this.types[t];if(n instanceof Et){if(n.name)return n;e||(e=n)}}return e},getSymbolType:function(){for(var e=this.types.length-1;e>=0;--e)if(this.types[e]instanceof Ct)return this.types[e]},getType:function(e){return 0===this.types.length&&e!==!1?this.makeupType():1===this.types.length?this.types[0]:c(this.types)},toString:function(e,t){if(0==this.types.length)return K(this.makeupType(),e,t);if(1==this.types.length)return K(this.types[0],e,t);var n=it(this.types);return n.length>2?"?":n.map(function(n){return K(n,e,t)}).join("|")},makeupPropType:function(e){var t=this.propertyName,n=e.proto&&e.proto.hasProp(t);if(n){var r=n.getType();if(r)return r}if("<i>"!=t){var o=e.hasProp("<i>");if(o)return o.getType()}else if(e.props["<i>"]!=this)for(var s in e.props){var a=e.props[s];if(!a.isEmpty())return a.getType()}},makeupType:function(){var e=this.propertyOf&&this.makeupPropType(this.propertyOf);if(e)return e;if(!this.forward)return null;for(var t=this.forward.length-1;t>=0;--t){var n=this.forward[t].typeHint();if(n&&!n.isEmpty())return Vt=!0,n}for(var r=Object.create(null),o=null,t=0;t<this.forward.length;++t){var s=this.forward[t].propHint();s&&"length"!=s&&"<i>"!=s&&"✖"!=s&&s!=Rt.completingProperty&&(r[s]=!0,o=s)}if(!o)return null;var a=f(o);if(a){var i=[];e:for(var t=0;t<a.length;++t){var l=a[t];for(var s in r)if(!l.hasProp(s))continue e;l.hasCtor&&(l=mt(l)),i.push(l)}var p=c(i);if(p)return Vt=!0,i.length>0&&(p.potentialMatches=i),p}},typeHint:function(){return this.types.length?this.getType():null},propagatesTo:function(){return this},gatherProperties:function(e,t){for(var n=0;n<this.types.length;++n)this.types[n].gatherProperties(e,t)},guessProperties:function(e){if(this.forward)for(var t=0;t<this.forward.length;++t){var n=this.forward[t].propHint();n&&e(n,null,0)}var r=this.makeupType();r&&r.gatherProperties(e)}});var it=e.simplifyTypes=function(e){var t=[];e:for(var n=0;n<e.length;++n){for(var r=e[n],o=0;o<t.length;o++){var s=l(r,t[o],0);if(s){t[o]=s;continue e}}t.push(r)}return t},lt=e.constraint=function(e){var t=function(){this.origin=Rt.curOrigin,this.construct.apply(this,arguments)};t.prototype=Object.create(X);for(var n in e)e.hasOwnProperty(n)&&(t.prototype[n]=e[n]);return t},ct=lt({construct:function(e,t){this.prop=e,this.target=t},addType:function(e,t){e.getProp&&e.getProp(this.prop).propagate(this.target,t)},propHint:function(){return this.prop},propagatesTo:function(){return"<i>"!=this.prop&&/[^\w_]/.test(this.prop)?void 0:{target:this.target,pathExt:"."+this.prop}}}),pt=e.PropHasSubset=e.DefProp=lt({construct:function(e,t,n){this.prop=e,this.type=t,this.originNode=n},addType:function(e,t){if(e instanceof Et){var n=e.defProp(this.prop,this.originNode);n.origin||(n.origin=this.origin),this.type.propagate(n,t)}},propHint:function(){return this.prop}}),ut=lt({construct:function(e){this.c=e},addType:function(e){e instanceof Et&&e.forAllProps(this.c)}}),dt=e.IsCallee=lt({construct:function(e,t,n,r){this.self=e,this.args=t,this.argNodes=n,this.retval=r,this.disabled=Rt.disabledComputing},addType:function(e,t){if(e instanceof Tt){for(var n=0;n<this.args.length;++n)n<e.args.length&&this.args[n].propagate(e.args[n],t),e.arguments&&this.args[n].propagate(e.arguments,t);e.isArrowFn()||this.self.propagate(e.self,this.self==Rt.topScope?rt:t);var r=e.computeRet,o=e.retval;if(r)for(var s=this.disabled;s;s=s.prev)(s.fn==e||e.originNode&&s.fn.originNode==e.originNode)&&(r=null);if(r){var a=Rt.disabledComputing;Rt.disabledComputing=this.disabled,o=r(this.self,this.args,this.argNodes),Rt.disabledComputing=a}H(e,o).propagate(this.retval,t)}},typeHint:function(){for(var e=[],t=0;t<this.args.length;++t)e.push("?");return new Tt(null,this.self,this.args,e,X)},propagatesTo:function(){return{target:this.retval,pathExt:".!ret"}}}),ht=lt({construct:function(e,t,n,r){this.propName=e,this.args=t,this.argNodes=n,this.retval=r,this.disabled=Rt.disabledComputing},addType:function(e,t){var n=new dt(e,this.args,this.argNodes,this.retval);n.disabled=this.disabled,e.getProp(this.propName).propagate(n,t)},propHint:function(){return this.propName}}),ft=e.IsCtor=lt({construct:function(e,t){this.target=e,this.noReuse=t},addType:function(e,t){e instanceof Tt&&(Rt.parent&&!Rt.parent.options.reuseInstances&&(this.noReuse=!0),e.getProp("prototype").propagate(new gt(this.noReuse?!1:e,this.target),t))}}),mt=e.getInstance=function(e,t){if(t===!1)return new Et(e);t||(t=e.hasCtor),e.instances||(e.instances=[]);for(var n=0;n<e.instances.length;++n){var r=e.instances[n];if(r.ctor==t)return r.instance}var o=new Et(e,t&&t.name);return o.origin=e.origin,e.instances.push({ctor:t,instance:o}),o},gt=e.IsProto=lt({construct:function(e,t){this.ctor=e,this.target=t},addType:function(e){e instanceof Et&&((this.count=(this.count||0)+1)>8||this.target.addType(e==Rt.protos.Array?new Ot:mt(e,this.ctor)))}}),bt=lt({construct:function(e){this.fn=e},addType:function(e){if(e instanceof Et&&!e.hasCtor){e.hasCtor=this.fn;var t=new xt(e,this.fn);t.addType(this.fn),e.forAllProps(function(e,n,r){r&&n.propagate(t)})}}}),yt=lt({construct:function(e,t){this.other=e,this.target=t},addType:function(e,t){e==Rt.str?this.target.addType(Rt.str,t):e==Rt.num&&this.other.hasType(Rt.num)&&this.target.addType(Rt.num,t)},typeHint:function(){return this.other}}),vt=e.IfObj=lt({construct:function(e){this.target=e},addType:function(e,t){e instanceof Et&&this.target.addType(e,t)},propagatesTo:function(){return this.target}}),xt=lt({construct:function(e,t){this.obj=e,this.ctor=t},addType:function(e){e instanceof Tt&&e.self&&e.self.addType(mt(this.obj,this.ctor),st)}}),_t=lt({construct:function(e){this.obj=e},addType:function(e){e instanceof Et&&this.obj.proto==Rt.protos.Object&&this.obj.replaceProto(e)}}),St=lt({construct:function(e,t){this.inner=e,this.weight=t},addType:function(e,t){this.inner.addType(e,Math.min(t,this.weight))},propagatesTo:function(){return this.inner.propagatesTo()},typeHint:function(){return this.inner.typeHint()},propHint:function(){return this.inner.propHint()}}),wt=e.Type=function(){};wt.prototype=a(X,{constructor:wt,propagate:function(e,t){e.addType(this,t)},hasType:function(e){return e==this},isEmpty:function(){return!1},typeHint:function(){return this},getType:function(){return this}});var kt=e.Prim=function(e,t){this.name=t,this.proto=e};kt.prototype=a(wt.prototype,{constructor:kt,toString:function(){return this.name},getProp:function(e){return this.proto.hasProp(e)||X},gatherProperties:function(e,t){this.proto&&this.proto.gatherProperties(e,t)}});var Et=e.Obj=function(e,t){if(this.props||(this.props=Object.create(null)),this.proto=e===!0?Rt.protos.Object:e,this.proto&&!(this.proto instanceof Et))throw new Error("bad "+Object.keys(this.proto).join());if(e&&!t&&e.name&&!(this instanceof Tt)){var n=/^(.*)\.prototype$/.exec(this.proto.name);n&&(t=n[1])}this.name=t,this.maybeProps=null,this.origin=Rt.curOrigin};Et.prototype=a(wt.prototype,{constructor:Et,toString:function(e){if(null==e&&(e=0),0>=e&&this.name)return this.name;var t=[],n=!1;for(var r in this.props)if("<i>"!=r){if(t.length>5){n=!0;break}t.push(e?r+": "+K(this.props[r],e-1,this):r)}return t.sort(),n&&t.push("..."),"{"+t.join(", ")+"}"},hasProp:function(e,t){u(e)&&(e=this.normalizeIntegerProp(e));var n=this.props[e];if(t!==!1)for(var r=this.proto;r&&!n;r=r.proto)n=r.props[e];return n},defProp:function(e,t){var n=this.hasProp(e,!1);if(n)return t&&!n.originNode&&(n.originNode=t),n;if(d(e))return X;u(e)&&(e=this.normalizeIntegerProp(e));var r=this.maybeProps&&this.maybeProps[e];return r?(delete this.maybeProps[e],this.maybeUnregProtoPropHandler()):(r=new at,r.propertyOf=this,r.propertyName=e),this.props[e]=r,r.originNode=t,r.origin=Rt.curOrigin,this.broadcastProp(e,r,!0),r},getProp:function(e){var t=this.hasProp(e,!0)||this.maybeProps&&this.maybeProps[e];if(t)return t;if(d(e))return X;u(e)&&(e=this.normalizeIntegerProp(e));var n=this.ensureMaybeProps()[e]=new at;return n.propertyOf=this,n.propertyName=e,n},normalizeIntegerProp:function(){return"<i>"},broadcastProp:function(e,t,n){if(n&&(this.signal("addProp",e,t),this instanceof Pt||h(e,this)),this.onNewProp)for(var r=0;r<this.onNewProp.length;++r){var o=this.onNewProp[r];o.onProtoProp?o.onProtoProp(e,t,n):o(e,t,n)}},onProtoProp:function(e,t){var n=this.maybeProps&&this.maybeProps[e];n&&(delete this.maybeProps[e],this.maybeUnregProtoPropHandler(),this.proto.getProp(e).propagate(n)),this.broadcastProp(e,t,!1)},replaceProto:function(e){this.proto&&this.maybeProps&&this.proto.unregPropHandler(this),this.proto=e,this.maybeProps&&this.proto.forAllProps(this)},ensureMaybeProps:function(){return this.maybeProps||(this.proto&&this.proto.forAllProps(this),this.maybeProps=Object.create(null)),this.maybeProps},removeProp:function(e){var t=this.props[e];delete this.props[e],this.ensureMaybeProps()[e]=t,t.types.length=0},forAllProps:function(e){this.onNewProp||(this.onNewProp=[],this.proto&&this.proto.forAllProps(this)),this.onNewProp.push(e);for(var t=this;t;t=t.proto)for(var n in t.props)e.onProtoProp?e.onProtoProp(n,t.props[n],t==this):e(n,t.props[n],t==this)},maybeUnregProtoPropHandler:function(){if(this.maybeProps){for(var e in this.maybeProps)return;this.maybeProps=null}!this.proto||this.onNewProp&&this.onNewProp.length||this.proto.unregPropHandler(this)},unregPropHandler:function(e){for(var t=0;t<this.onNewProp.length;++t)if(this.onNewProp[t]==e){this.onNewProp.splice(t,1);break}this.maybeUnregProtoPropHandler()},gatherProperties:function(e,t){for(var n in this.props)"<i>"!=n&&":"!=n.charAt(0)&&e(n,this,t);this.proto&&this.proto.gatherProperties(e,t+1)},getObjType:function(){return this}});var jt="undefined"!=typeof StopIteration,Tt=e.Fn=function(e,t,n,r,o,s){Et.call(this,Rt.protos.Function,e),this.self=t,this.args=n,this.argNames=r,this.retval=o,this.generator=s};Tt.prototype=a(Et.prototype,{constructor:Tt,toString:function(e){null==e&&(e=0);for(var t=this.generator?"fn*(":"fn(",n=0;n<this.args.length;++n){n&&(t+=", ");var r=this.argNames[n];r&&"?"!=r&&(t+=r+": "),t+=e>-3?K(this.args[n],e-1,this):"?"}return t+=")",this.retval.isEmpty()||(t+=" -> "+(e>-3?K(this.retval,e-1,this):"?")),t},getProp:function(e){if("prototype"==e){var t=this.hasProp(e,!1);if(!t){t=this.defProp(e);var n=new Et(!0,this.name&&this.name+".prototype");n.origin=this.origin,t.addType(n,Z)}return t}return Et.prototype.getProp.call(this,e)},defProp:function(e,t){if("prototype"==e){var n=this.hasProp(e,!1);return n?n:(n=Et.prototype.defProp.call(this,e,t),n.origin=this.origin,n.propagate(new bt(this)),n)}return Et.prototype.defProp.call(this,e,t)},getFunctionType:function(){return this},isArrowFn:function(){return this.originNode&&"ArrowFunctionExpression"==this.originNode.type}});var Ot=e.Arr=function(e){Et.call(this,Rt.protos.Array);var t=this.defProp("<i>");if(Array.isArray(e)){this.tuple=e.length;for(var n=0;n<e.length;n++){var r=this.defProp(String(n));e[n].propagate(r),r.propagate(t)}}else e&&(this.tuple=0,e.propagate(t))};Ot.prototype=a(Et.prototype,{constructor:Ot,toString:function(e){if(null==e&&(e=0),-3>=e)return"[?]";var t="";if(this.tuple){for(var n,r=0;r in this.props;r++){var o=K(this.getProp(String(r)),e-1,this);n=null==n?o:n!=o?!1:o,t+=(t?", ":"")+o}n&&(t=n)}else t=K(this.getProp("<i>"),e-1,this);return"["+t+"]"},normalizeIntegerProp:function(e){return+e<this.tuple?e:"<i>"}});var Ct=e.Sym=function(e,t){kt.call(this,Rt.protos.Symbol,"Symbol"),this.symName=e,this.originNode=t};Ct.prototype=a(kt.prototype,{constructor:Ct,asPropName:function(){return":"+this.symName},getSymbolType:function(){return this}}),e.getSymbol=function(e,t){var n=e.replace(/[^\w$\.]/g,"_"),r=Rt.symbols[n];return r?(t&&!r.originNode&&(r.originNode=t),r):Rt.symbols[n]=new Ct(n,t)},e.Context=function(t,n){this.parent=n,this.props=Object.create(null),this.protos=Object.create(null),this.origins=[],this.curOrigin="ecma5",this.paths=Object.create(null),this.definitions=Object.create(null),this.purgeGen=0,this.workList=null,this.disabledComputing=null,this.curSuperCtor=this.curSuper=null,this.symbols=Object.create(null),e.withContext(this,function(){if(Rt.protos.Object=new Et(null,"Object.prototype"),Rt.topScope=new Pt,Rt.topScope.name="<top>",Rt.protos.Array=new Et(!0,"Array.prototype"),Rt.protos.Function=new Tt("Function.prototype",X,[],[],X),Rt.protos.Function.proto=Rt.protos.Object,Rt.protos.RegExp=new Et(!0,"RegExp.prototype"),Rt.protos.String=new Et(!0,"String.prototype"),Rt.protos.Number=new Et(!0,"Number.prototype"),Rt.protos.Boolean=new Et(!0,"Boolean.prototype"),Rt.protos.Symbol=new Et(!0,"Symbol.prototype"),Rt.str=new kt(Rt.protos.String,"string"),Rt.bool=new kt(Rt.protos.Boolean,"bool"),Rt.num=new kt(Rt.protos.Number,"number"),Rt.curOrigin=null,t)for(var e=0;e<t.length;++e)o.load(t[e])
})},e.Context.prototype.startAnalysis=function(){this.disabledComputing=this.workList=this.curSuperCtor=this.curSuper=null};var Rt=null;e.cx=function(){return Rt},e.withContext=function(e,t){var n=Rt;Rt=e;try{return t()}finally{Rt=n}},e.TimedOut=function(){this.message="Timed out",this.stack=(new Error).stack},e.TimedOut.prototype=Object.create(Error.prototype),e.TimedOut.prototype.name="infer.TimedOut";var At;e.withTimeout=function(e,t){var n=+new Date+e,r=At;if(r&&n>r)return t();At=n;try{return t()}finally{At=r}},e.addOrigin=function(e){Rt.origins.indexOf(e)<0&&Rt.origins.push(e)};var Dt=20,Mt=1e-4,Pt=e.Scope=function(e,t,n){Et.call(this,e||!0),this.prev=e,this.originNode=t,this.isBlock=!!n};Pt.prototype=a(Et.prototype,{constructor:Pt,defVar:function(e,t){for(var n=this;;n=n.proto){var r=n.props[e];if(r)return r;if(!n.prev)return n.defProp(e,t)}}});var Nt={},It=e.scopeGatherer=r.make({VariablePattern:function(e,t){t.inner&&w(t.inner,e)},AssignmentPattern:function(e,t,n){n(e.left,t,"Pattern"),n(e.right,t.outer,"Expression")},AssignmentExpression:function(e,t,n){"MemberExpression"==e.left.type?n(e.left,t,"Expression"):n(e.left,j(!1,t),"Pattern"),n(e.right,t,"Expression")},Function:function(e,t,n){if(t.inner)throw new Error("problem at "+e.start+" "+e.type);for(var r=e.scope=new Pt(t,e),o=[],s=[],a=0;a<e.params.length;++a){var i=e.params[a];if(s.push(k(i)),"Identifier"==i.type)o.push(w(r,i));else{var l=new at;o.push(l),l.originNode=i,n(i,j(r),"Pattern")}}if(r.fnType=new Tt(e.id&&e.id.name,new at,o,s,X,e.generator),r.fnType.originNode=e,e.id){var c="FunctionDeclaration"==e.type;w(c?t:r,e.id)}n(e.body,r,e.expression?"Expression":"Statement")},BlockStatement:function(e,t,n){!e.scope&&e.body.some(E)&&(t=e.scope=new Pt(t,e,!0)),r.base.BlockStatement(e,t,n)},TryStatement:function(e,t,n){if(n(e.block,t,"Statement"),e.handler)if("Identifier"==e.handler.param.type){var r=w(t,e.handler.param);n(e.handler.body,t,"Statement");var o=Rt.definitions.ecma5;o&&r.isEmpty()&&mt(o["Error.prototype"]).propagate(r,tt)}else n(e.handler.param,j(t),"Pattern");e.finalizer&&n(e.finalizer,t,"Statement")},VariableDeclaration:function(e,t,n){for(var r="var"==e.kind?b(t):t,o=0;o<e.declarations.length;++o){var s=e.declarations[o];n(s.id,j(r,t),"Pattern"),s.init&&n(s.init,t,"Expression")}},ClassDeclaration:function(e,t,n){w(t,e.id),e.superClass&&n(e.superClass,t,"Expression");for(var r=0;r<e.body.body.length;r++)n(e.body.body[r],t)},ForInStatement:function(e,t,n){!e.scope&&E(e.left)&&(t=e.scope=new Pt(t,e,!0)),r.base.ForInStatement(e,t,n)},ForStatement:function(e,t,n){!e.scope&&e.init&&E(e.init)&&(t=e.scope=new Pt(t,e,!0)),r.base.ForStatement(e,t,n)},ImportDeclaration:function(e,t){for(var n=0;n<e.specifiers.length;n++)w(t,e.specifiers[n].local)}});It.ForOfStatement=It.ForInStatement;var Lt=e.propName=function(e,t){var n=e.property||e.key;if(!e.computed&&"Identifier"==n.type)return n.name;if("Literal"==n.type){if("string"==typeof n.value)return n.value;if("number"==typeof n.value)return String(n.value)}if(t){var r=T(U(n,t));if(r)return e.propName=r}else if(e.propName)return e.propName;return"<i>"},Ft=e.inferPatternVisitor={Identifier:function(e,t,n){n.propagate(M(e,t))},MemberExpression:function(e,t,n){var r=U(e.object,t),o=Lt(e,t);r.propagate(new pt(o,n,e.property))},RestElement:function(e,t,n){P(e.argument,t,new Ot(n))},ObjectPattern:function(e,t,n){for(var r=0;r<e.properties.length;++r){var o=e.properties[r];P(o.value,t,n.getProp(o.key.name))}},ArrayPattern:function(e,t,n){for(var r=0;r<e.elements.length;r++)e.elements[r]&&P(e.elements[r],t,n.getProp(String(r)))},AssignmentPattern:function(e,t,n){P(e.left,t,A(n,U(e.right,t)))}},zt=e.inferExprVisitor={ArrayExpression:z(function(e,t){return F(e.elements,t,U)}),ObjectExpression:z(function(e,t,n){if("✖"===n)return X;for(var r,o=!0,s=0;s<e.properties.length;++s){var a=e.properties[s];if("__proto__"==a.key.name)if("Literal"==a.value.type&&null==a.value.value)o=null;else{var i=U(a.value,t),l=i.getObjType();l?o=l:r=i}}var c=e.objType=new Et(o,n);return r&&r.propagate(new _t(c)),c.originNode=e,g(null,r||o,function(){for(var n=0;n<e.properties.length;++n){var r=e.properties[n],o=r.key;if(!d(r.key.name)){var s,a=Lt(r,t);if("<i>"==a||"set"==r.kind)s=X;else{var i=s=c.defProp(a,o);i.initializer=!0,"get"==r.kind&&(s=new dt(c,[],null,i))}U(r.value,t,s,a),"FunctionExpression"==r.value.type&&r.value.scope.fnType.self.addType(c,ot)}}}),c}),FunctionExpression:z(function(e,t,n){var o=e.scope,s=o.fnType;return n&&!s.name&&(s.name=n),D(e,o),e.expression?U(e.body,o,o.fnType.retval=new at):r.recursive(e.body,o,null,qt,"Statement"),"ArrowFunctionExpression"==e.type&&N(t).propagate(s.self),x(e,s)||S(s),e.id&&o.getProp(e.id.name).addType(s),s}),ClassExpression:z(L),SequenceExpression:z(function(e,t){for(var n=0,r=e.expressions.length-1;r>n;++n)U(e.expressions[n],t,X);return U(e.expressions[r],t)}),UnaryExpression:z(function(e,t){return U(e.argument,t,X),O(e.operator)}),UpdateExpression:z(function(e,t){return U(e.argument,t,X),Rt.num}),BinaryExpression:z(function(e,t){if("+"==e.operator){var n=U(e.left,t),r=U(e.right,t);if(n.hasType(Rt.str)||r.hasType(Rt.str))return Rt.str;if(n.hasType(Rt.num)&&r.hasType(Rt.num))return Rt.num;var o=new at;return n.propagate(new yt(r,o)),r.propagate(new yt(n,o)),o}return U(e.left,t,X),U(e.right,t,X),C(e.operator)?Rt.bool:Rt.num}),AssignmentExpression:z(function(e,t,n){var r,o;if("MemberExpression"==e.left.type?(o=Lt(e.left,t),n||(n="Identifier"==e.left.object.type?e.left.object.name+"."+o:o)):n||"Identifier"!=e.left.type||(n=e.left.name),e.operator&&"="!=e.operator&&"+="!=e.operator?(U(e.right,t,X),r=Rt.num):r=U(e.right,t,null,n),"MemberExpression"==e.left.type){var s=U(e.left.object,t);if("prototype"==o&&y(t,20),"<i>"==o){var a=e.left.property.name,i=t.props[a],l=i&&i.iteratesOver;if(l){y(t,20);var c="MemberExpression"==e.right.type&&e.right.computed&&e.right.property.name==a;return l.forAllProps(function(e,t,n){n&&"prototype"!=e&&"<i>"!=e&&s.propagate(new pt(e,c?t:X))}),r}}s.propagate(new pt(o,r,e.left.property)),I(s),"FunctionExpression"==e.right.type&&s.propagate(e.right.scope.fnType.self,ot)}else P(e.left,t,r);return r}),LogicalExpression:q(function(e,t,n){U(e.left,t,n),U(e.right,t,n)}),ConditionalExpression:q(function(e,t,n){U(e.test,t,X),U(e.consequent,t,n),U(e.alternate,t,n)}),NewExpression:q(function(e,t,n,r){"Identifier"==e.callee.type&&e.callee.name in t.props&&y(t,20);for(var o=0,s=[];o<e.arguments.length;++o)s.push(U(e.arguments[o],t));var a=U(e.callee,t),i=new at;a.propagate(new ft(i,r&&/\.prototype$/.test(r))),i.propagate(n,Y),a.propagate(new dt(i,s,e.arguments,new vt(n)))}),CallExpression:q(function(e,t,n){for(var r=0,o=[];r<e.arguments.length;++r)o.push(U(e.arguments[r],t));var s=b(t).fnType;if("MemberExpression"==e.callee.type){var a=U(e.callee.object,t),i=Lt(e.callee,t);s&&("call"==i||"apply"==i)&&s.args.indexOf(a)>-1&&y(t,30),a.propagate(new ht(i,o,e.arguments,n))}else if("Super"==e.callee.type&&Rt.curSuperCtor)Rt.curSuperCtor.propagate(new dt(N(t),o,e.arguments,n));else{var l=U(e.callee,t);s&&s.args.indexOf(l)>-1&&y(t,30);var c=l.getFunctionType();c&&c.instantiateScore&&s&&y(t,c.instantiateScore/5),l.propagate(new dt(Rt.topScope,o,e.arguments,n))}}),MemberExpression:q(function(e,t,n){var r,o=Lt(e);if("<i>"==o){var s=U(e.property,t),a=T(s);a?o=e.propName=a:s.hasType(Rt.num)||(r=et)}U(e.object,t).getProp(o).propagate(n,r)}),Identifier:z(function(e,t){if("arguments"==e.name){var n=b(t);!n.fnType||e.name in n.props||t.defProp(e.name,n.fnType.originNode).addType(new Ot(n.fnType.arguments=new at))}return t.getProp(e.name)}),ThisExpression:z(function(e,t){return N(t)}),Super:z(function(e){return e.superType=Rt.curSuper||X}),Literal:z(function(e){return R(e)}),TemplateLiteral:z(function(e,t){for(var n=0;n<e.expressions.length;++n)U(e.expressions[n],t,X);return Rt.str}),TaggedTemplateExpression:q(function(e,t,n){for(var r=[new Ot(Rt.str)],o=0;o<e.quasi.expressions.length;++o)r.push(U(e.quasi.expressions[o],t));U(e.tag,t,new dt(Rt.topScope,r,e.quasi.expressions,n))}),YieldExpression:z(function(e,t){var n=X,r=b(t).fnType;return r&&(r.retval==X&&(r.retval=new at),r.yieldval||(r.yieldval=new at),n=r.retval),e.argument&&(e.delegate?U(e.argument,t,new ht("next",[],null,new ct("value",n))):U(e.argument,t,n)),r?r.yieldval:X})};zt.ArrowFunctionExpression=zt.FunctionExpression;var qt=e.inferWrapper=r.make({Expression:function(e,t){U(e,e.scope||t,X)},FunctionDeclaration:function(e,t,n){var r=e.scope,o=r.fnType;D(e,r),n(e.body,r,"Statement"),x(e,o)||S(o),t.getProp(e.id.name).addType(o)},Statement:function(e,t,n){n(e,e.scope||t)},VariableDeclaration:function(e,t){for(var n=0;n<e.declarations.length;++n){var r=e.declarations[n];if("Identifier"==r.id.type){var o=t.getProp(r.id.name);r.init&&U(r.init,t,o,r.id.name)}else r.init&&P(r.id,t,U(r.init,t))}},ClassDeclaration:function(e,t){t.getProp(e.id.name).addType(L(e,t,e.id.name))},ReturnStatement:function(e,t){if(e.argument){var n=X,r=b(t).fnType;r&&(r.retval==X&&(r.retval=new at),n=r.retval),U(e.argument,t,n)}},ForInStatement:function(e,t,n){var r=U(e.right,t);if("Identifier"==e.right.type&&e.right.name in t.props||"MemberExpression"==e.right.type&&"prototype"==e.right.property.name){y(t,5);var o=B(e.left);"Identifier"==o.type?(o.name in t.props&&(t.getProp(o.name).iteratesOver=r),r.getProp("<i>").propagate(M(o,t))):P(o,t,r.getProp("<i>"))}n(e.body,t,"Statement")},ForOfStatement:function(e,t,n){var r,o=B(e.left);"Identifier"==o.type?r=M(o,t):P(o,t,r=new at),U(e.right,t,new ht(":Symbol.iterator",[],null,new ht("next",[],null,new ct("value",r)))),n(e.body,t,"Statement")}}),Ut=e.parse=function(e,r,o){(!r||Array.isArray(r))&&(r=o);var s;try{s=t.parse(e,r)}catch(a){s=n.parse_dammit(e,r)}return s};e.analyze=function(t,n,o){"string"==typeof t&&(t=Ut(t)),n||(n="file#"+Rt.origins.length),e.addOrigin(Rt.curOrigin=n),o||(o=Rt.topScope),Rt.startAnalysis(),r.recursive(t,o,null,It),Rt.parent&&Rt.parent.signal("preInfer",t,o),r.recursive(t,o,null,qt),Rt.parent&&Rt.parent.signal("postInfer",t,o),Rt.curOrigin=null},e.purge=function(e,t,n){var r=W(e,t,n);++Rt.purgeGen,Rt.topScope.purge(r);for(var o in Rt.props){for(var s=Rt.props[o],a=0;a<s.length;++a){var i=s[a],l=i.props[o];(!l||r(l,l.originNode))&&s.splice(a--,1)}s.length||delete Rt.props[o]}},at.prototype.purge=function(e){if(this.purgeGen!=Rt.purgeGen){this.purgeGen=Rt.purgeGen;for(var t=0;t<this.types.length;++t){var n=this.types[t];e(n,n.originNode)?this.types.splice(t--,1):n.purge(e)}if(this.types.length||(this.maxWeight=0),this.forward)for(var t=0;t<this.forward.length;++t){var r=this.forward[t];e(r)?(this.forward.splice(t--,1),this.props&&(this.props=null)):r.purge&&r.purge(e)}}},X.purge=function(){},Et.prototype.purge=function(e){if(this.purgeGen==Rt.purgeGen)return!0;this.purgeGen=Rt.purgeGen;for(var t in this.props){var n=this.props[t];e(n,n.originNode)&&this.removeProp(t),n.purge(e)}},Tt.prototype.purge=function(e){if(!Et.prototype.purge.call(this,e)){this.self.purge(e),this.retval.purge(e);for(var t=0;t<this.args.length;++t)this.args[t].purge(e)}};var Bt=e.typeFinder={ArrayExpression:function(e,t){return F(e.elements,t,J)},ObjectExpression:function(e){return e.objType},ClassExpression:function(e){return e.objType},FunctionExpression:function(e){return e.scope.fnType},ArrowFunctionExpression:function(e){return e.scope.fnType},SequenceExpression:function(e,t){return J(e.expressions[e.expressions.length-1],t)},UnaryExpression:function(e){return O(e.operator)},UpdateExpression:function(){return Rt.num},BinaryExpression:function(e,t){if(C(e.operator))return Rt.bool;if("+"==e.operator){var n=J(e.left,t),r=J(e.right,t);if(n.hasType(Rt.str)||r.hasType(Rt.str))return Rt.str}return Rt.num},AssignmentExpression:function(e,t){return J(e.right,t)},LogicalExpression:function(e,t){var n=J(e.left,t);return n.isEmpty()?J(e.right,t):n},ConditionalExpression:function(e,t){var n=J(e.consequent,t);return n.isEmpty()?J(e.alternate,t):n},NewExpression:function(e,t){var n=J(e.callee,t).getFunctionType(),r=n&&n.getProp("prototype").getObjType();return r?mt(r,n):X},CallExpression:function(e,t){return $(e.callee,e.arguments,t)},MemberExpression:function(e,t){var n=Lt(e),r=J(e.object,t).getType();if(r){var o=r.getProp(n);if(Vt&&Array.isArray(r.potentialMatches)){for(var s=r.potentialMatches,a=[],i=0,l=s.length;l>i;i++){var c=s[i],p=c.getProp(n);"undefined"!=typeof p&&"undefined"!=typeof p.originNode&&"undefined"!=typeof p.origin&&p.originNode.sourceFile&&p.originNode.sourceFile.name===p.origin&&a.push(p)}a.length>0&&(o.potentialMatches=a)}return o}return"<i>"==n?X:G(n)},MethodDefinition:function(e){var t=e.key.name,n=N(e.value.scope).getType();return n?n.getProp(t):X},Identifier:function(e,t){return t.hasProp(e.name)||X},ThisExpression:function(e,t){return N(t)},Literal:function(e){return R(e)},Super:z(function(e){return e.superType}),TemplateLiteral:function(){return Rt.str},TaggedTemplateExpression:function(e,t){return $(e.tag,e.quasi.expressions,t)},YieldExpression:function(e,t){var n=b(t).fnType;return n?n.yieldval:X}},Wt=e.searchVisitor=r.make({Function:function(e,t,n){r.base.Function(e,e.scope,n)},Property:function(e,t,n){e.computed&&n(e.key,t,"Expression"),e.key!=e.value&&n(e.value,t,"Expression")},Statement:function(e,t,n){n(e,e.scope||t)},ImportSpecifier:function(e,t,n){n(e.local,t)},ImportDefaultSpecifier:function(e,t,n){n(e.local,t)},ImportNamespaceSpecifier:function(e,t,n){n(e.local,t)}});e.fullVisitor=r.make({MemberExpression:function(e,t,n){n(e.object,t,"Expression"),n(e.property,t,e.computed?"Expression":null)},ObjectExpression:function(e,t,n){for(var r=0;r<e.properties.length;++r)n(e.properties[r].value,t,"Expression"),n(e.properties[r].key,t)}},Wt),e.findExpressionAt=function(e,t,n,o,s){var a=s||function(e,t){return"Identifier"==t.type&&"✖"==t.name?!1:Bt.hasOwnProperty(t.type)};return r.findNodeAt(e,t,n,a,Wt,o||Rt.topScope)},e.findExpressionAround=function(e,t,n,o,s){var a=s||function(e,n){return null!=t&&n.start>t?!1:"Identifier"==n.type&&"✖"==n.name?!1:Bt.hasOwnProperty(n.type)};return r.findNodeAround(e,n,a,Wt,o||Rt.topScope)},e.expressionType=function(e){return J(e.node,e.state)},e.parentNode=function(e,t){function n(t,s,a){if(t.start<=e.start&&t.end>=e.end){var i=o[o.length-1];if(t==e)throw{found:i};i!=t&&o.push(t),r.base[a||t.type](t,s,n),i!=t&&o.pop()}}var o=[];try{n(t,null)}catch(s){if(s.found)return s.found;throw s}};var Gt=e.findTypeFromContext={ArrayExpression:function(e,t,n){return n(e,!0).getProp("<i>")},ObjectExpression:function(e,t,n){for(var r=0;r<e.properties.length;++r){var o=t.properties[r];if(o.value==t)return n(e,!0).getProp(o.key.name)}},UnaryExpression:function(e){return O(e.operator)},UpdateExpression:function(){return Rt.num},BinaryExpression:function(e){return C(e.operator)?Rt.bool:Rt.num},AssignmentExpression:function(e,t,n){return n(e.left)},LogicalExpression:function(e,t,n){return n(e,!0)},ConditionalExpression:function(e,t,n){return e.consequent==t||e.alternate==t?n(e,!0):void 0},CallExpression:function(e,t,n){for(var r=0;r<e.arguments.length;r++){var o=e.arguments[r];if(o==t){var s=n(e.callee).getFunctionType();if(s instanceof Tt)return s.args[r];break}}},ReturnStatement:function(e,t,n){var o=r.findNodeAround(t.sourceFile.ast,t.start,"Function");if(o){var s="FunctionDeclaration"!=o.node.type?n(o.node,!0).getFunctionType():o.node.scope.fnType;if(s)return s.retval.getType()}},VariableDeclarator:function(e,t,n){return e.init==t?n(e.id):void 0}};Gt.NewExpression=Gt.CallExpression,e.typeFromContext=function(t,n){var r=e.parentNode(n.node,t),o=null;if(Gt.hasOwnProperty(r.type)){var s=Gt[r.type];o=s&&s(r,n.node,function(r,o){var s={node:r,state:n.state},a=o?e.typeFromContext(t,s):e.expressionType(s);return a||X})}return o||e.expressionType(n)};var Vt=!1;e.resetGuessing=function(e){Vt=e},e.didGuess=function(){return Vt},e.forAllPropertiesOf=function(e,t){e.gatherProperties(t,0)};var Ht=r.make({},Wt);e.findRefs=function(e,t,n,o,s){Ht.Identifier=Ht.VariablePattern=function(t,r){if(t.name==n&&(t!=e.id||"FunctionDeclaration"!=e.type))for(var a=r;a;a=a.prev)if(a==o&&s(t,r),n in a.props)return},r.recursive(e,t,null,Ht)};var $t=r.make({Function:function(e,t,n){n(e.body,e.scope,e.expression?"Expression":"Statement")},Statement:function(e,t,n){n(e,e.scope||t)}});e.findPropRefs=function(e,t,n,o,s){function a(e){for(;e&&e!=n;){if(e.props[o]||e.maybeProps&&e.maybeProps[o])return!1;e=e.proto}return e}for(;!(!n||n.props[o]||n.maybeProps&&n.maybeProps[o]);)n=n.proto;if(!n)throw new Error("Couldn't locate property in the base object type.");r.simple(e,{MemberExpression:function(e,t){e.computed||e.property.name!=o||a(J(e.object,t).getType())&&s(e.property,t)},ObjectExpression:function(e,t){if(J(e,t).getType()==n)for(var r=0;r<e.properties.length;++r)e.properties[r].key.name==o&&s(e.properties[r].key,t)},MethodDefinition:function(e){e.key.name==o&&e.value&&a(N(e.value.scope).getType())&&s(e.key,e.value.scope)}},$t,t)};var Jt=e.scopeAt=function(e,t,n){var o=r.findNodeAround(e,t,function(e,t){return t.scope});return o?o.node.scope:n||Rt.topScope};e.forAllLocalsAt=function(e,t,n,r){var o=Jt(e,t,n);o.gatherProperties(r,0)},o=e.def=o.init({},e)}),function(e,t){return"object"==typeof exports&&"object"==typeof module?t(exports,require("./infer"),require("./signal"),require("acorn"),require("acorn/dist/walk")):"function"==typeof define&&define.amd?define("tern/lib/tern",["exports","./infer","./signal","acorn/dist/acorn","acorn/dist/acorn_loose","acorn/dist/walk"],t):void t(e.tern||(e.tern={}),tern,tern.signal,acorn,acornloose,acorn.walk)}(this,function(e,t,n,r,o,s){"use strict";function a(e,t){this.name=e,this.parent=t,this.scope=this.text=this.ast=this.lineOffsets=null}function i(e,n){var s={directSourceFile:n,allowReturnOutsideFunction:!0,allowImportExportEverywhere:!0,ecmaVersion:e.options.ecmaVersion,sourceType:e.options.sourceType},a=e.signalReturnFirst("preParse",n.text,s);"string"!=typeof a&&(a=n.text),e.signal("parseOptions",a,s,r,o);var i=t.parse(a,s);return e.signal("postParse",i,a),i}function l(e,n,r){e.text=r.options.stripCRs?n.replace(/\r\n/g,"\n"):n,t.withContext(r.cx,function(){e.ast=i(r,e)}),e.lineOffsets=null}function c(e,n,r){if(n.query&&!Q.hasOwnProperty(n.query.type))return r("No query type '"+n.query.type+"' defined");var o=n.query;o||r(null,{});var s=n.files||[];s.length&&++e.uses;for(var a=0;a<s.length;++a){var i=s[a];i.name=e.normalizeFilename(i.name),"delete"==i.type?e.delFile(i.name):u(e,i.name,null,"full"==i.type?i.text:null)}var l="number"==typeof n.timeout?[n.timeout]:null;if(!o)return void h(e,l,function(){});var c=Q[o.type];if(c.takesFile){if("string"!=typeof o.file)return r(".query.file must be a string");/^#/.test(o.file)||u(e,o.file,null)}h(e,l,function(n){if(n)return r(n);var a=c.takesFile&&y(e,s,o.file);return c.fullFile&&"part"==a.type?r("Can't run a "+o.type+" query on a file fragment"):(t.resetGuessing(),void t.withContext(e.cx,function(){var n,s=function(){n=c.run(e,o,a)};try{l?t.withTimeout(l[0],s):s()}catch(i){return e.options.debug&&"TernError"!=i.name&&console.error(i.stack),r(i)}r(null,n)}))})}function p(e,n){return t.withContext(e.cx,function(){n.scope=e.cx.topScope,e.signal("beforeLoad",n),t.analyze(n.ast,n.name,n.scope),e.signal("afterLoad",n)}),n}function u(e,t,n,r){var o=e.findFile(t);if(o)return null!=r&&(o.scope&&(e.needsPurge.push(t),o.scope=null),l(o,r,e)),void(x(e,o.parent)>x(e,n)?(o.parent=n,o.excluded&&(o.excluded=null)):o.parent||(o.parent=n));var s=new a(t,n);e.files.push(s),e.fileMap[t]=s,null!=r?l(s,r,e):e.options.async?(e.startAsyncAction(),e.options.getFile(t,function(t,n){l(s,n||"",e),e.finishAsyncAction(t)})):l(s,e.options.getFile(t)||"",e)}function d(e,t,n){var r=function(){e.off("everythingFetched",r),clearTimeout(o),h(e,t,n)};e.on("everythingFetched",r);var o=setTimeout(r,e.options.fetchTimeout)}function h(e,n,r){if(e.pending)return d(e,n,r);var o=e.fetchError;if(o)return e.fetchError=null,r(o);e.needsPurge.length>0&&t.withContext(e.cx,function(){t.purge(e.needsPurge),e.needsPurge.length=0});for(var s=!0,a=0;a<e.files.length;){for(var i=[];a<e.files.length;++a){var l=e.files[a];null==l.text?s=!1:null!=l.scope||l.excluded||i.push(l)}i.sort(function(t,n){return x(e,t.parent)-x(e,n.parent)});for(var c=0;c<i.length;c++){var l=i[c];if(l.parent&&!S(e,l))l.excluded=!0;else if(n){var u=+new Date;try{t.withTimeout(n[0],function(){p(e,l)})}catch(o){if(o instanceof t.TimedOut)return r(o);throw o}n[0]-=+new Date-u}else p(e,l)}}s?r():d(e,n,r)}function f(e){var t=e.indexOf("\n");return 0>t?e:e.slice(0,t)}function m(e,t,n){var r=Math.max(0,n-500),o=null;if(!/^\s*$/.test(e))for(;;){var s=t.indexOf(e,r);if(0>s||s>n+500)break;(null==o||Math.abs(o-n)>Math.abs(s-n))&&(o=s),r=s+e.length}return o}function g(e){for(var t=0;e;++t,e=e.prev);return t}function b(e){var t=new Error(e);return t.name="TernError",t}function y(e,n,r){var o=r.match(/^#(\d+)$/);if(!o)return e.findFile(r);var a=n[o[1]];if(!a||"delete"==a.type)throw b("Reference to unknown file "+r);if("full"==a.type)return e.fileMap[a.name];var l=a.backing=e.fileMap[a.name],c=a.offset;a.offsetLines&&(c={line:a.offsetLines,ch:0}),a.offset=c=et(l,null==a.offsetLines?a.offset:{line:a.offsetLines,ch:0},!0);var p,u,d=f(a.text),h=m(d,l.text,c),y=null==h?Math.max(0,l.text.lastIndexOf("\n",c)):h;return t.withContext(e.cx,function(){t.purge(a.name,y,y+a.text.length);var n,r=a.text;if(n=r.match(/(?:"([^"]*)"|([\w$]+))\s*:\s*function\b/)){var o=s.findNodeAround(a.backing.ast,y,"ObjectExpression");o&&o.node.objType&&(p={type:o.node.objType,prop:n[2]||n[1]})}if(h&&(n=d.match(/^(.*?)\bfunction\b/))){for(var c=n[1].length,f="",m=0;c>m;++m)f+=" ";a.text=f+r.slice(c),u=!0}var b=t.scopeAt(l.ast,y,l.scope),v=t.scopeAt(l.ast,y+r.length,l.scope),x=a.scope=g(b)<g(v)?v:b;a.ast=i(e,a),t.analyze(a.ast,a.name,x);e:if(p||u){var _=t.scopeAt(a.ast,d.length,b);if(!_.fnType)break e;if(p){var S=p.type.getProp(p.prop);S.addType(_.fnType)}else if(u){var w=t.scopeAt(l.ast,y+d.length,l.scope);if(w==b||!w.fnType)break e;var k=w.fnType,E=_.fnType;if(!E||E.name!=k.name&&k.name)break e;for(var m=0,j=Math.min(k.args.length,E.args.length);j>m;++m)k.args[m].propagate(E.args[m]);k.self.propagate(E.self),E.retval.propagate(k.retval)}}}),a}function v(e){var t=0;return s.simple(e,{Expression:function(){++t}}),t}function x(e,t){for(var n=0;t;)t=e.fileMap[t].parent,++n;return n}function _(e,t){for(;;){var n=e.fileMap[t.parent];if(!n.parent)break;t=n}return t.name}function S(e,t){var n=_(e,t),r=v(t.ast),o=e.budgets[n];return null==o&&(o=e.budgets[n]=e.options.dependencyBudget),r>o?!1:(e.budgets[n]=o-r,!0)}function w(e){return"number"==typeof e||"object"==typeof e&&"number"==typeof e.line&&"number"==typeof e.ch}function k(e){if(e.query){if("string"!=typeof e.query.type)return".query.type must be a string";if(e.query.start&&!w(e.query.start))return".query.start must be a position";if(e.query.end&&!w(e.query.end))return".query.end must be a position"}if(e.files){if(!Array.isArray(e.files))return"Files property must be an array";for(var t=0;t<e.files.length;++t){var n=e.files[t];if("object"!=typeof n)return".files[n] must be objects";if("string"!=typeof n.name)return".files[n].name must be a string";if("delete"!=n.type){if("string"!=typeof n.text)return".files[n].text must be a string";if("part"==n.type){if(!w(n.offset)&&"number"!=typeof n.offsetLines)return".files[n].offset must be a position"}else if("full"!=n.type)return'.files[n].type must be "full" or "part"'}}}}function E(e,t){for(var n=e.text,r=e.lineOffsets||(e.lineOffsets=[0]),o=0,s=0,a=Math.min(Math.floor(t/Z),r.length-1),o=r[a],s=a*Z;t>s;){if(++s,o=n.indexOf("\n",o)+1,0===o)return null;s%Z===0&&r.push(o)}return o}function j(e,t){if(!e)return{line:0,ch:0};for(var n,r,o=e.lineOffsets||(e.lineOffsets=[0]),s=e.text,a=o.length-1;a>=0;--a)o[a]<=t&&(n=a*Z,r=o[a]);for(;;){var i=s.indexOf("\n",r);if(i>=t||0>i)break;r=i+1,++n}return{line:n,ch:t-r}}function T(e){for(var t in e)null==e[t]&&delete e[t];return e}function O(e,t,n){null!=n&&(e[t]=n)}function C(e,t){"string"!=typeof e&&(e=e.name,t=t.name);var n=/^[A-Z]/.test(e),r=/^[A-Z]/.test(t);return n==r?t>e?-1:e==t?0:1:n?1:-1}function R(e,t,n){return"Literal"==e.type&&"string"==typeof e.value&&e.start==t-1&&e.end<=n+1}function A(e,t){for(var n=0;n<e.properties.length;n++){var r=e.properties[n];if(r.key.start<=t&&r.key.end>=t)return r}}function D(e,n,o){function s(t,r,o,s){if((!v&&n.omitObjectPrototype===!1||r!=e.cx.protos.Object||u)&&!(n.filter!==!1&&u&&0!==(n.caseInsensitive?t.toLowerCase():t).indexOf(u)||p&&p.props[t])){var a=rt(n,d,t,r&&r.props[t],o);if(a&&n.origins&&e.mod&&e.mod.modules&&e.mod.modules.modules){var i=e.mod.modules.modules[a.origin];i&&O(a,"origin",i.modName||a.origin)}s&&a&&"string"!=typeof a&&s(a)}}if(null==n.end)throw b("missing .query.end field");var a=e.signalReturnFirst("completion",o,n);if(a)return a;for(var i=et(o,n.end),l=i,c=o.text;i&&r.isIdentifierChar(c.charCodeAt(i-1));)--i;if(n.expandWordForward!==!1)for(;l<c.length&&r.isIdentifierChar(c.charCodeAt(l));)++l;var p,u=c.slice(i,l),d=[];n.caseInsensitive&&(u=u.toLowerCase());var h,f,m,g,y,v,x=t.findExpressionAround(o.ast,null,i,o.scope);if(x){var _=x.node;if("Literal"===_.type&&"string"==typeof _.value)return{start:tt(n,o,i),end:tt(n,o,l),isProperty:!!f,isObjectKey:!!g,completions:[]};if("MemberExpression"==_.type&&_.object.end<i)y=x;else if(R(_,i,l)){var S=t.parentNode(_,o.ast);"MemberExpression"==S.type&&S.property==_&&(y={node:S,state:x.state})}else if("ObjectExpression"==_.type){var w=A(_,l);w?(v=x,f=g=w.key.name):u||/:\s*$/.test(o.text.slice(0,i))||(v=x,f=g=!0)}}if(v)m=t.typeFromContext(o.ast,v),p=v.node.objType;else if(y)f=y.node.property,f="Literal"==f.type?f.value.slice(1):f.name,y.node=y.node.object,m=t.expressionType(y);else if("."==c.charAt(i-1)){for(var k=i-1;k&&("."==c.charAt(k-1)||r.isIdentifierChar(c.charCodeAt(k-1)));)k--;var E=c.slice(k,i-1);E&&(m=t.def.parsePath(E,o.scope).getObjType(),f=u)}return null!=f?(e.cx.completingProperty=f,m&&t.forAllPropertiesOf(m,s),!d.length&&n.guess!==!1&&m&&m.guessProperties&&m.guessProperties(function(e,t,n){e!=f&&"✖"!=e&&s(e,t,n)}),!d.length&&u.length>=2&&n.guess!==!1&&Object.keys(e.cx.props).forEach(function(t){e.cx.props[t].forEach(function(e){s(t,e,0)})}),h="memberCompletion"):(t.forAllLocalsAt(o.ast,i,o.scope,s),n.includeKeywords&&nt.forEach(function(e){s(e,null,0,function(e){e.isKeyword=!0})}),h="variableCompletion"),e.signal(h,o,i,l,s),n.sort!==!1&&d.sort(C),e.cx.completingProperty=null,{start:tt(n,o,i),end:tt(n,o,l),isProperty:!!f,isObjectKey:!!g,completions:d}}function M(e,t){var n=t.prefix,r=[];for(var o in e.cx.props)"<i>"==o||n&&0!==o.indexOf(n)||r.push(o);return t.sort!==!1&&r.sort(C),{completions:r}}function P(e,t){var n,r,o=e.body;return o?(Array.isArray(o)?(n=o[0].start,r=o[o.length-1].end):(n=o.start,r=o.end),t>=n&&r>=t):!1}function N(e,t,n){var r=ot(e,t,n);if(r)return r;throw b("No expression at the given position.")}function I(e){return e&&(e=e.getType())&&e instanceof t.Obj?e:null}function L(e,n,r,o){var s;o&&(t.resetGuessing(),s=t.expressionType(o));var a=e.hasHandler("typeAt");if(a)for(var i=et(r,n.end),l=0;l<a.length;l++)s=a[l](r,i,o,s);if(!s)throw b("No type found at the given position.");var c;if("ObjectExpression"==o.node.type&&null!=n.end&&(c=A(o.node,et(r,n.end)))){var p=c.key.name,u=I(t.typeFromContext(r.ast,o));if(u&&u.hasProp(p))s=u.hasProp(p);else{var d=I(s);d&&d.hasProp(p)&&(s=d.hasProp(p))}}return s.guess=t.didGuess(),s}function F(e,n,r){var o,s=ot(r,n),a=L(e,n,r,s),i=a;if(a=n.preferFunction?a.getFunctionType()||a.getType():a.getType(),s&&("Identifier"==s.node.type?o=s.node.name:"MemberExpression"!=s.node.type||s.node.computed?"MethodDefinition"!=s.node.type||s.node.computed||(o=s.node.key.name):o=s.node.property.name),null!=n.depth&&"number"!=typeof n.depth)throw b(".query.depth must be a number");var l={guess:t.didGuess(),type:t.toString(i,n.depth),name:a&&a.name,exprName:o,doc:i.doc,url:i.url};return a&&U(n,a,l),T(l)}function z(e,t){if(!t)return null;if("full"==e.docFormat)return t;var n=/.\n[\s@\n]/.exec(t);if(n&&(t=t.slice(0,n.index+1)),t=t.replace(/\n\s*/g," "),t.length<100)return t;var r=/[\.!?] [A-Z]/g;r.lastIndex=80;var o=r.exec(t);return o&&(t=t.slice(0,o.index+1)),t}function q(e,n,r){var o=ot(r,n),s=L(e,n,r,o),a={url:s.url,doc:z(n,s.doc),type:t.toString(s)},i=s.getType();return i&&U(n,i,a),T(a)}function U(e,n,r){r.url||(r.url=n.url),r.doc||(r.doc=z(e,n.doc)),r.origin||(r.origin=n.origin);var o,s=t.cx().protos;!r.url&&!r.doc&&n.proto&&(o=n.proto.hasCtor)&&n.proto!=s.Object&&n.proto!=s.Function&&n.proto!=s.Array&&n.proto!=s.Number&&n.proto!=s.String&&n.proto!=s.Boolean&&n.proto!=s.RegExp&&(r.url=o.url,r.doc=z(e,o.doc))}function B(e,n,r){var o=ot(r,n),s=L(e,n,r,o);if(t.didGuess()&&!n.guess)return{};var a=W(s,e,n);if(t.didGuess()&&s.potentialMatches){for(var i=[],l=0;l<s.potentialMatches.length;l++)i.push(W(s.potentialMatches[l],e,n));a.results=i}if("number"!=typeof a.start&&"number"!=typeof a.end){var c=s.getType();c&&c.originNode?a=W(c,e,n):o&&o.node&&"ThisExpression"===o.node.type&&(c=c.proto,c&&c.hasCtor&&(a=W(c.hasCtor,e,n)))}return a}function W(e,n,r){var o=st(e),s={url:e.url,doc:z(r,e.doc),origin:e.origin,guess:t.didGuess()};if(e.types)for(var a=e.types.length-1;a>=0;--a){var i=e.types[a];U(r,i,s),o||(o=st(i))}if(o&&o.node){var l=o.node.sourceFile||n.fileMap[o.origin],c=tt(r,l,o.node.start),p=tt(r,l,o.node.end);s.start=c,s.end=p,s.file=o.origin;var u=Math.max(0,o.node.start-50);s.contextOffset=o.node.start-u,s.context=l.text.slice(u,u+50)}else o&&(s.file=o.origin,at(n,r,o,s));return T(s)}function G(e,n,r,o,s){function a(e){return function(t,r){if(s)for(var o=r;o!=l;o=o.prev){var a=o.hasProp(s);if(a)throw b("Renaming `"+i+"` to `"+s+"` would make a variable at line "+(j(e,t.start).line+1)+" point to the definition at line "+(j(e,a.name.start).line+1))}p.push({file:e.name,start:tt(n,e,t.start),end:tt(n,e,t.end)})}}for(var i=o.node.name,l=o.state;l&&!(i in l.props);l=l.prev);if(!l)throw b("Could not find a definition for "+i);var c,p=[];if(l.originNode){if(c="local",s){for(var u=l.prev;u&&!(s in u.props);u=u.prev);u&&t.findRefs(l.originNode,l,s,u,function(e){throw b("Renaming `"+i+"` to `"+s+"` would shadow the definition used at line "+(j(r,e.start).line+1))})}t.findRefs(l.originNode,l,i,l,a(r))}else if(c="global",n.onlySourceFile)t.findRefs(r.ast,r.scope,i,l,a(r));else for(var d=0;d<e.files.length;++d){var h=e.files[d];t.findRefs(h.ast,h.scope,i,l,a(h))}return{refs:p,type:c,name:i}}function V(e,n,r,o,s){function a(e){return function(t){c.push({file:e.name,start:tt(n,e,t.start),end:tt(n,e,t.end)})}}var i=t.expressionType(o);"MethodDefinition"==o.node.type&&(i=i.propertyOf);var l=i.getObjType();if(!l)throw b("Couldn't determine type of base object.");var c=[];if(n.onlySourceFile)t.findPropRefs(r.ast,r.scope,l,s.name,a(r));else for(var p=0;p<e.files.length;++p){var u=e.files[p];t.findPropRefs(u.ast,u.scope,l,s.name,a(u))}return{refs:c,name:s.name}}function H(e,t,n){var r=N(n,t,!0);if(r&&"Identifier"==r.node.type)return G(e,t,n,r);if(r&&"MemberExpression"==r.node.type&&!r.node.computed){var o=r.node.property;return r.node=r.node.object,V(e,t,n,r,o)}if(r&&"ObjectExpression"==r.node.type)for(var s=et(n,t.end),a=0;a<r.node.properties.length;++a){var i=r.node.properties[a].key;if(i.start<=s&&i.end>=s)return V(e,t,n,r,i)}else if(r&&"MethodDefinition"==r.node.type){var o=r.node.key;return V(e,t,n,r,o)}throw b("Not at a variable or property name.")}function $(e,t,n){if("string"!=typeof t.newName)throw b(".query.newName should be a string");var r=N(n,t);if(!r||"Identifier"!=r.node.type)throw b("Not at a variable.");var o=G(e,t,n,r,t.newName),s=o.refs;delete o.refs,o.files=e.files.map(function(e){return e.name});for(var a=o.changes=[],i=0;i<s.length;++i){var l=s[i];l.text=t.newName,a.push(l)}return o}function J(e){return{files:e.files.map(function(e){return e.name})}}var K=Object.create(null);e.registerPlugin=function(e,t){K[e]=t};var X=e.defaultOptions={debug:!1,async:!1,getFile:function(e,t){this.async&&t(null,null)
},normalizeFilename:function(e){return e},defs:[],plugins:{},fetchTimeout:1e3,dependencyBudget:2e4,reuseInstances:!0,stripCRs:!1,ecmaVersion:6,projectDir:"/",parent:null},Q={completions:{takesFile:!0,run:D},properties:{run:M},type:{takesFile:!0,run:F},documentation:{takesFile:!0,run:q},definition:{takesFile:!0,run:B},refs:{takesFile:!0,fullFile:!0,run:H},rename:{takesFile:!0,fullFile:!0,run:$},files:{run:J}};e.defineQueryType=function(e,t){Q[e]=t},a.prototype.asLineChar=function(e){return j(this,e)};var Y=e.Server=function(e){this.cx=null,this.options=e||{};for(var t in X)e.hasOwnProperty(t)||(e[t]=X[t]);this.projectDir=e.projectDir.replace(/\\/g,"/"),/\/$/.test(this.projectDir)||(this.projectDir+="/"),this.parent=e.parent,this.handlers=Object.create(null),this.files=[],this.fileMap=Object.create(null),this.needsPurge=[],this.budgets=Object.create(null),this.uses=0,this.pending=0,this.asyncError=null,this.mod={},this.defs=e.defs.slice(0),this.plugins=Object.create(null);try{for(var n in e.plugins)e.plugins.hasOwnProperty(n)&&this.loadPlugin(n,e.plugins[n])}catch(r){throw b("Plugin failed to load: "+r.message)}try{this.reset()}catch(r){throw b("Tern failed to reset: "+r.message)}};Y.prototype=n.mixin({addFile:function(e,t,n){!n||n in this.fileMap||(n=null),e in this.fileMap||(e=this.normalizeFilename(e)),u(this,e,n,t)},delFile:function(e){var t=this.findFile(e);t&&(this.needsPurge.push(t.name),this.files.splice(this.files.indexOf(t),1),delete this.fileMap[t.name])},reset:function(){this.signal("reset"),this.cx=new t.Context(this.defs,this),this.uses=0,this.budgets=Object.create(null);for(var e=0;e<this.files.length;++e){var n=this.files[e];n.scope=null}this.signal("postReset")},request:function(e,t){var n=k(e);if(n)return t(n);var r=this;c(this,e,function(e,n){t(e,n),r.uses>40&&(r.reset(),h(r,null,function(){}))})},findFile:function(e){return this.fileMap[this.normalizeFilename(e)]},flush:function(e){var n=this.cx;h(this,null,function(r){return r?e(r):void t.withContext(n,e)})},startAsyncAction:function(){++this.pending},finishAsyncAction:function(e){e&&(this.asyncError=e),this.pending>0&&this.pending--,0===this.pending&&this.signal("everythingFetched")},addDefs:function(e,t){t?this.defs.unshift(e):this.defs.push(e),this.cx&&this.reset()},deleteDefs:function(e){for(var t=0;t<this.defs.length;t++)if(this.defs[t]["!name"]==e)return this.defs.splice(t,1),void(this.cx&&this.reset())},loadPlugin:function(e,t){if(1==arguments.length&&(t=this.options.plugins[e]||!0),!(e in this.plugins)&&e in K&&t){this.plugins[e]=!0;var n=K[e](this,t);if(n&&(n.defs&&this.addDefs(n.defs,n.loadFirst),n.passes))for(var r in n.passes)n.passes.hasOwnProperty(r)&&this.on(r,n.passes[r])}},normalizeFilename:function(e){var t=this.options.normalizeFilename(e).replace(/\\/g,"/");return 0==t.indexOf(this.projectDir)&&(t=t.slice(this.projectDir.length)),t}});var Z=25,et=e.resolvePos=function(e,t,n){if("number"!=typeof t){var r=E(e,t.line);if(null==r){if(!n)throw b("File doesn't contain a line "+t.line);t=e.text.length}else t=r+t.ch}if(t>e.text.length){if(!n)throw b("Position "+t+" is outside of file.");t=e.text.length}return t},tt=e.outputPos=function(e,t,n){if(e.lineCharPositions){var r=j(t,n);return"part"==t.type&&(r.line+=null!=t.offsetLines?t.offsetLines:j(t.backing,t.offset).line),r}return n+("part"==t.type?t.offset:0)},nt="break do instanceof typeof case else new var catch finally return void continue for switch while debugger function this with default if throw delete in try".split(" "),rt=e.addCompletion=function(e,n,r,o,s){for(var a=e.types||e.docs||e.urls||e.origins,i=a||e.depths,l=0,c=n.length;c>l;++l){var p=n[l];if((i?p.name:p)==r){if(e.origins&&o&&p.origin!==o.origin)continue;return}}var u=i?{name:r}:r;if(n.push(u),o&&a){t.resetGuessing();var d=o.getType();u.guess=t.didGuess(),e.types&&(u.type=t.toString(o)),e.docs&&O(u,"doc",z(e,o.doc||d&&d.doc)),e.urls&&O(u,"url",o.url||d&&d.url),e.origins&&O(u,"origin",o.origin||d&&d.origin)}return e.depths&&(u.depth=s||0),u},ot=e.findQueryExpr=function(e,n,r){if(null==n.end)throw b("missing .query.end field");if(n.variable){var o=t.scopeAt(e.ast,et(e,n.end),e.scope);return{node:{type:"Identifier",name:n.variable,start:n.end,end:n.end+1},state:o}}var s=n.start&&et(e,n.start),a=et(e,n.end),i=t.findExpressionAt(e.ast,s,a,e.scope);if(!i){var l=t.findExpressionAround(e.ast,s,a,e.scope);l&&!P(l.node,a)&&("ObjectExpression"==l.node.type||r||(null==s?a:s)-l.node.start<20||l.node.end-a<20)&&(i=l)}return i},st=e.getSpan=function(e){if(e.origin){if(e.originNode){var t=e.originNode;return/^Function/.test(t.type)&&t.id&&(t=t.id),{origin:e.origin,node:t}}return e.span?{origin:e.origin,span:e.span}:void 0}},at=e.storeSpan=function(e,t,n,r){if(r.origin=n.origin,n.span){var o=/^(\d+)\[(\d+):(\d+)\]-(\d+)\[(\d+):(\d+)\]$/.exec(n.span);r.start=t.lineCharPositions?{line:Number(o[2]),ch:Number(o[3])}:Number(o[1]),r.end=t.lineCharPositions?{line:Number(o[5]),ch:Number(o[6])}:Number(o[4])}else{var s=e.fileMap[n.origin];r.start=tt(t,s,n.node.start),r.end=tt(t,s,n.node.end)}};e.version="0.18.0",e.findDef=B,e.findExprType=L,e.resolveFile=y,e.storeTypeDocs=U,e.parseDoc=z,e.findRefs=H,e.findRefsToProperty=V,e.findRefsToVariable=G,e.ternError=b}),function(){"use strict";function e(e,t,n,r,o,s){t[e]&&(n.push(e),(t[e]===!0||1===t[e])&&r.push(o+e+"/"+s))}function t(e,t,n,r,o){var s=r+t+"/"+o;require._fileExists(e.toUrl(s+".js"))&&n.push(s)}function n(e,t,r){var o;for(o in t)!t.hasOwnProperty(o)||e.hasOwnProperty(o)&&!r?"object"==typeof t[o]&&(!e[o]&&t[o]&&(e[o]={}),n(e[o],t[o],r)):e[o]=t[o]}var r=/(^.*(^|\/)nls(\/|$))([^\/]*)\/?([^\/]*)/;define("i18n",["module"],function(o){var s=o.config?o.config():{};return s=s||{},{version:"2.0.4",load:function(o,a,i,l){l=l||{},l.locale&&(s.locale=l.locale);var c,p,u,d=r.exec(o),h=d[1],f=d[4],m=d[5],g=f.split("-"),b=[],y={},v="";if(d[5]?(h=d[1],c=h+m):(c=o,m=d[4],f=s.locale,f||(f=s.locale="undefined"==typeof navigator?"root":(navigator.language||navigator.userLanguage||"root").toLowerCase()),g=f.split("-")),l.isBuild){for(b.push(c),t(a,"root",b,h,m),p=0;p<g.length;p++)u=g[p],v+=(v?"-":"")+u,t(a,v,b,h,m);if(l.locales){var x,_;for(x=0;x<l.locales.length;x++)for(f=l.locales[x],g=f.split("-"),v="",_=0;_<g.length;_++)u=g[_],v+=(v?"-":"")+u,t(a,v,b,h,m)}a(b,function(){i()})}else a([c],function(t){var r,o=[];for(e("root",t,o,b,h,m),p=0;p<g.length;p++)r=g[p],v+=(v?"-":"")+r,e(v,t,o,b,h,m);a(b,function(){var e,r,s;for(e=o.length-1;e>-1&&o[e];e--)s=o[e],r=t[s],(r===!0||1===r)&&(r=a(h+s+"/"+m)),n(y,r);i(y)})})}}})}(),define("javascript/nls/messages",{root:!0}),define("javascript/nls/root/messages",{pluginName:"Orion JavaScript Tool Support",pluginDescription:"This plug-in provides JavaScript tools support for Orion, like editing, search, navigation, validation, and code completion.",error:"Error",warning:"Warning",ignore:"Ignore",info:"Info",ternContentAssist:"Tern JavaScript content assist",ternProjectAssist:"Tern project file content assist",emptyFileTemplateDoc:"Create new default contents for the .tern-project file",prefCodeStyle:"Code Style",prefBestPractices:"Best Practices",prefPotentialProblems:"Possible Errors",sourceOutline:"Source Outline",sourceOutlineTitle:"JavaScript source outline",astOutline:"AST Outline",astOutlineTitle:"JavaScript AST outline",contentAssist:"JavaScript content assist",eslintValidator:"JavaScript Validator",missingCurly:"Statements not enclosed in braces:",curlyFixName:"Enclose statement in braces",ignoreInFileFixName:"Disable ${0}",noCaller:"Discouraged 'arguments.caller' or 'arguments.callee' use:",noCommaDangle:"Trailing commas in object expressions:",noCondAssign:"Assignments in conditional expressions:",noConsole:"Discouraged console use in browser code:",noConstantCondition:"Constant as conditional expression:",noRegexSpaces:"Multiple spaces in regular expressions:",noReservedKeys:"Reserved words used as property keys:",noReservedKeysFixName:"Surround key with quotes",noEqeqeq:"Discouraged '==' use:",unknownRequire:"Unknown required library:",noDebugger:"Discouraged 'debugger' statement use:",noDebuggerFixName:"Remove statement",noWith:"Discouraged 'with' statement use:",noEval:"Discouraged 'eval()' use:",noImpliedEval:"Discouraged implied 'eval()' use:",noDupeKeys:"Duplicate object keys:",noDupeKeysFixName:"Rename key",NoRedeclareFixName:"Rename variable",noDuplicateCaseFixName:"Rename case",removeDuplicateCaseFixName:"Remove case",noIterator:"Discouraged __iterator__ property use:",noProto:"Discouraged __proto__ property use:",noUndefInit:"Explicitly initializing variables to undefined:",noundefinitFixName:"Remove assignment",useIsNaN:"NaN not compared with isNaN():",useIsNanFixName:"Use isNaN()",missingDoc:"Missing JSDoc:",missingDocFixName:"Generate element JSDoc",noUnreachable:"Unreachable code:",noFallthrough:"Switch case fall-through:",useBeforeDefine:"Member used before definition:",noEmptyBlock:"Undocumented empty block:",newParens:"Missing parentheses in constructor call:",newparensFixName:"Add parentheses",noNewArray:"Discouraged 'new Array()':",noNewArrayFixName:"Convert to array literal",noNewFunc:"Discouraged 'new Function()':",noNewObject:"Discouraged 'new Object()':",noNewWrappers:"Discouraged wrapper objects:",noNewWrappersLiteralFixName:"Convert to literal",noNewWrappersFixName:"Remove 'new' keyword",noMixedSpacesAndTabs:"Mixed spaces and tabs:",missingSemi:"Missing semicolons:",missingSemiFineGrained:"Kinds:",missingSemiOmitLastInOneLineBlock:"Omit the last semicolon in a one-line block:",unusedVars:"Unused variables:",varRedecl:"Variable re-declarations:",varShadow:"Variable shadowing:",undefMember:"Undeclared global reference:",undefExpression:"Undeclared function reference:",unnecessarySemis:"Unnecessary semicolons:",unusedParams:"Unused parameters:",missingRequirejs:"'requirejs' plugin missing in AMD environment:",unsupportedJSLint:"Unsupported environment directive:",noThrowLiteral:"Literal used in 'throw':",noselfassignFixName:"Remove assignment",noselfassignRenameFixName:"Rename right hand variable",missingNls:"Non-externalized string literals (missing $NON-NLS$ tag):",unnecessaryNls:"Unnecessary $NON-NLS$ tags:",generateDocName:"Generate Element Comment",generateDocTooltip:"Generate a JSDoc-like comment for the selected JavaScript element",renameElement:"Rename Element",renameElementTooltip:"Rename the selected JavaScript element",renameFailedTimedOut:"Could not rename element - operation timed out",openDeclName:"Open Declaration",openDeclTooltip:"Open the declaration of the selected element",openImplName:"Open Implementation",openImplTooltip:"Open the implementation of the selected element",noImplFound:"No implementation was found",implTimedOut:"Could not compute implementation, the operation timed out",workspaceRefsName:"Workspace",workspaceRefsTooltip:"Show all references to the selection in the workspace",projectRefsName:"Project",projectRefsTooltip:"Show all references to the selection in the current project",referencesMenuName:"References",referencesMenuTooltip:"Show different kinds of references",noDeclTimedOut:"No declaration was found - operation timed out",validTypeof:"Invalid 'typeof' comparison:",noSparseArrays:"Sparse array declarations:",javascriptValidation:"Javascript Validation",jsHover:"JavaScript Hover Provider",removeExtraParensFixName:"Remove gratuitous parentheses",removeExtraSemiFixName:"Remove extra semicolon",addFallthroughCommentFixName:"Add $FALLTHROUGH$ comment",addEmptyCommentFixName:"Comment empty block",addESLintEnvFixName:"Add to eslint-env directive",addESLintGlobalFixName:"Add to globals directive",openDefinition:"Go to definition...",removeUnusedParamsFixName:"Remove parameter",commentCallbackFixName:"Add @callback to function",eqeqeqFixName:"Update operator",unreachableFixName:"Remove unreachable code",sparseArrayFixName:"Convert to normal array",semiFixName:"Add missing semicolon",unknownRequirePluginFixName:"Update project settings",unknownRequirePackagejsonFixName:"Update package.json",radix:"Missing radix parameter to parseInt():",radixFixName:"Add default radix",unusedVarsUnusedFixName:"Remove unused variable",unreadVarsFixName:"Remove unread variable",unusedFuncDeclFixName:"Remove unused function",noCommaDangleFixName:"Remove extra ','",addBBreakFixName:"Add break statement",noShadowGlobals:"Global shadowing:",noThrowLiteralFixName:"Change to Error",missingNlsFixName:"Add missing $NON-NLS$ tag",unnecessaryNlsFixName:"Remove unnecessary $NON-NLS$ tag",funcProposalDescription:" - The name of the function",funcParamProposalDescription:" - Function parameter",eslintRuleProposalDescripton:" - ESLint rule",eslintEnvProposalDescription:" - ESLint environment name",onlineDocumentationProposalEntry:"\n\n[Online documentation](${0})",keywordHoverProposal:"ECMAScript reserved keyword",reloadPluginCmd:"Reload",reloadPluginCmdTooltip:"Reload plug-in",reloadAllPluginsCmd:"Reload All",reloadAllPluginsCmdTooltip:"Reload all plug-ins",templateHoverHeader:"Template source code:\n\n",templateAssistHeader:"Templates",keywordAssistHeader:"Keywords",ternPlugins:"Tern Plug-ins",noTernPluginsAvailable:"No Tern plug-ins are currently loaded. This may be because you have not yet activated content assist in a JavaScript file. Tern plug-ins provide type information and code templates for JavaScript.",noDeclFound:"Could not find declaration",declFoundInIndex:"Declaration was not found in source, it was found in the '${0}' index.",implFoundInIndex:"Implementation is not in your workspace. Found in '${0}' index.",deprecatedHoverTitle:"Deprecated.",parametersHoverTitle:"Parameters:",returnsHoverTitle:"Returns:",throwsHoverTitle:"Throws:",callbackHoverTitle:"Callback:",callbackText:"This function is used as a callback",sinceHoverTitle:"Since:",seeAlsoHoverTitle:"See Also:",openFileForTitle:"Open file for",failedToReadFile:"Failed to read file: ${0}",badInlineRename:"In-line rename is only available for local variables and declarations.",failedRename:"In-line rename failed: ${0}",declDisplayName:"${0} (start: ${1}, end: ${2})",declPotentialHeader:"**Potential matches:**\n",typeofOptions:"Typeof Options",NoCondAssignFixName:"Surround with parenthesis","no-void":"Disallow use of the void operator:","no-extra-bind":"Disallow unnecessary calls to '.bind()':",NoExtraBindFixName:"Remove 'bind' call","no-implicit-coercion":"Disallow the type conversion with shorter notations:","no-implicit-coercion-boolean":"Report type conversion to boolean:","no-implicit-coercion-number":"Report type conversion to number:","no-implicit-coercion-string":"Report type conversion to string:","no-extend-native":"Disallow extending of native objects:","no-extend-native-exceptions":"Exceptions:","no-lone-blocks":"Disallow unnecessary nested blocks:",quotes:"Enforce quote style:",quotesKind:"Kind of quotes:",quotesAvoidEscape:"Avoid escaped quotes:",quotesAllowTemplateLiterals:"Allow template literals:",singleQuote:"single quote (')",doubleQuote:'double quote (")',backtickQuote:"backtick (`)",quoteFixName:"Fix quotes",yoda:"Require or disallow Yoda conditions:",always:"Always",never:"Never",yodaKind:"Kinds:",yodaExceptRange:"Except for range comparisons:",yodaOnlyEquality:"Check only for '==' and '===' operators:","no-param-reassign":"Disallow reassignment of function parameters:","no-param-reassign-props":"Disallow for parameter properties:","no-native-reassign":"Disallow reassignment of native objects","no-native-reassign-exceptions":"Exceptions:","no-unused-expressions":"Disallow unused expressions:","no-unused-expressions-allowShortCircuit":"Allow to use short circuit evaluations:","no-unused-expressions-allowTernary":"Allow to use ternary operators:",noUnusedExpressionsFixName:"Remove unused expressions","no-invalid-this":"Disallow this keywords outside of classes or class-like objects:",noTrailingSpaces:"Disallow trailing whitespace:",noTrailingSpacesSkipBlankLines:"Skip empty lines:",noTrailingSpacesFixName:"Remove trailing spaces","no-irregular-whitespace":"Disallow irregular whitespace:","no-irregular-whitespace-skipStrings":"Skip strings:","no-irregular-whitespace-skipComments":"Skip comments:","no-irregular-whitespace-skipRegexps":"Skip regular expressions:","no-irregular-whitespace-skipTemplates":"Skip templates:",functionDecls:"Function Declarations",functionCalls:"Function Calls",propAccess:"Property Access",propWrite:"Property Write",varAccess:"Variable Access",varWrite:"Variable Write",varDecls:"Variable Declarations",regex:"Regular Expressions",strings:"Strings",blockComments:"Block Comments",lineComments:"Line Comments",partial:"Partial Matches",uncategorized:"Uncategorized",parseErrors:"Parse Errors",noFileContents:"Could not compute references: failed to compute file text content",noFileMeta:"Could not compute references: failed to compute file metadata",cannotComputeRefs:"Cannot compute references: ${0}",notAnIdentifier:"Cannot compute references at the selected location: Location is not an identifier",notHtmlOffset:"Not a valid offset in HTML",allProjectRefs:"Finding all project references...",allWorkspaceRefs:"Finding all workspace references...",refsFoundIn:"References found in file: '${0}' (${1}/${2})","accessor-pairs":"Getter and setter accessors not in pairs:",noConstAssign:"Disallow modifying variables that are declared using const:","no-control-regex":"Disallow control characters in regular expressions:","no-duplicate-case":"Duplicate case:","no-empty-character-class":"Disallow empty character classes:","no-extra-boolean-cast":"Discourage redundant double negation:","no-extra-parens":"Discourage redundant parentheses:","no-extra-parens-kinds":"Kinds:","no-extra-parens-conditionalAssign":"Allows extra parentheses around assignments in conditional test expressions:","no-extra-parens-returnAssign":"Allows extra parentheses around assignments in return statements:","no-extra-parens-nestedBinaryExpressions":"Allows extra parentheses in nested binary expressions:","no-invalid-regexp":"Invalid regular expressions:","no-invalid-regexp-flags":"List of allowed flags:","no-negated-in-lhs":"Disallow negated left operand of in operator:","no-obj-calls":"Disallow global object as function calls:","no-eq-null":"Disallow null comparisons:",noeqnullFixName:"Update operator","no-else-return":"Unnecessary else after return:","no-empty-label":"No empty labels:","no-self-compare":"Disallow self compare:","no-self-assign":"Disallow self assignment:",noShadowFixName:"Rename in scope","type-checked-consistent-return":"Discouraged inconsistent returns:","check-tern-plugin":"Missing .tern-project plugins entry for environment directive:",forbiddenExportImportFixName:"Set sourceType to module",noElseReturnFixName:"Remove unnecessary else",noImplicitCoercionFixName:"Remove implicit coercion",commonjsPluginName:"CommonJS",commonjsPluginDescription:"Plug-in that handles CommonJS-style dependency resolution.",ternDocPluginName:"Doc Comments",ternDocPluginDescription:"Tern plug-in to parse and use JSDoc-like comments for inferencing",orionAMQPPluginName:"Orion AMQP",orionAMQPPluginDescription:"Plug-in that contributes type information and code templates for AMQP.",orionAngularPluginName:"AngularJS",orionAngularPluginDescription:"Plug-in that contributes type information and code templates for AngularJS.",orionComponentPluginName:"ComponentJS",orionComponentPluginDescription:"Plug-in that contributes type information and code templates for ComponentJS.",orionExpressPluginName:"Orion ExpressJS",orionExpressPluginDescription:"Plug-in that contributes type information and code templates for ExpressJS.",orionESModulesPluginName:"Orion ES_Modules",orionESModulesPluginDescription:"Plug-in that contributes type information and code templates for ES Modules.",orionMongoDBPluginName:"Orion MongoDB",orionMongoDBPluginDescription:"Plug-in that contributes type information and code templates for MongoDB.",orionMySQLPluginName:"Orion MySQL",orionMySQLPluginDescription:"Plug-in that contributes type information and code templates for MySQL.",orionNodePluginName:"Orion Node.js",orionNodePluginDescription:"Plug-in that contributes type information and code templates for Node.js.",orionPostgresPluginName:"Orion PostgreSQL",orionPostgresPluginDescription:"Plug-in that contributes type information and code templates for PostgreSQL.",orionRequirePluginName:"Orion RequireJS",orionRequirePluginDescription:"Plug-in that contributes type information and code templates for RequireJS.",orionRedisPluginName:"Orion Redis",orionRedisPluginDescription:"Plug-in that contributes type information and code templates for Redis.",ternPluginsPluginName:"Orion Tern Plug-in Support",ternPluginsPluginDescription:"Plug-in that allows Orion to inspect and modify plug-ins running in Tern.",occurrencesPluginName:"Orion Occurrences Support",occurrencesPluginDescription:"Plug-in that allows Orion to highlight the occurrenes of an identifier in a file",openImplPluginName:"Orion Open Implementation Support",openImplPluginDescription:"Plug-in that allows Orion to try to find implementation locations of elements rather than simple declarations",htmlDepPluginName:"Orion HTML Dependency Analysis",htmlDepPluginDescription:"Resolves script block and script tag dependencies",findTypesName:"Orion References Support",findTypesDescription:"Plug-in that provides expanded type-finding support in Orion",eslintPluginName:"ESLint plugin for Tern",eslintPluginDescription:"Provides ESLint linting for Tern",jsdocPluginName:"JSDoc types and completion support",jsdocPluginDescription:"Provides auto-complete and type information for JSDoc",outlinerPluginName:"JavaScript outlining",outlinerPluginDescription:"Provides JavaScript outlining",fixesPluginName:"JavaScript quick fixes",fixesPluginDescription:"Provides quick fixes for Orion ESLint problems",astPluginName:"AST (acorn) plugin for Tern",astPluginDescription:"Provides AST (acorn) for Tern",templatesPlugin:"Orion code templates",templatesPluginDescription:"Provides a variety of code templates for JavaScript in Orion.",beautifierPluginName:"JSBeautify plugin for Tern",beautifierPluginDescription:"Provides JS formatting for Tern",resolverPluginName:"Resolver plugin for Tern",resolverPluginDescription:"Resolves Orion file paths for other Tern plugins.",browser:"Browser global variables.",node:"Node.js global variables and Node.js scoping.",commonjs:"CommonJS global variables and CommonJS scoping (use this for browser-only code that uses Browserify/WebPack).",worker:"Web workers global variables.",amd:"Defines require() and define() as global variables as per the amd spec.",mocha:"Adds all of the Mocha testing global variables.",jasmine:"Adds all of the Jasmine testing global variables for version 1.3 and 2.0.",jest:"Jest global variables.",phantomjs:"PhantomJS global variables.",protractor:"Protractor global variables.",qunit:"QUnit global variables.",jquery:"jQuery global variables.",prototypejs:"Prototype.js global variables.",shelljs:"ShellJS global variables.",meteor:"Meteor global variables.",mongo:"MongoDB global variables.",applescript:"AppleScript global variables.",nashorn:"Java 8 Nashorn global variables.",serviceworker:"Service Worker global variables.",embertest:"Ember test helper globals.",webextensions:"WebExtensions globals.",es6:"Enable all ECMAScript 6 features except for modules.",jsDocEmptyObjDesc:" - Empty object",jsDocEmptyObjDoc:"Represents an object wrapper with no known properties.",jsDocObjPropDesc:" - Object with a specific property",jsDocObjPropDoc:"Represents an object wrapper with one or more known properties.",jsDocAnyTypeDesc:" - No type information",jsDocAnyTypeDoc:"Represents that no type information is known. The type is described as the 'any' type.",javascriptFormatter:"Javascript Formatter",javascriptFormattingSettings:"Formatting Settings for Javascript",javascriptFormatting:"Javascript Formatting",js_indent_size:"Indention size:",js_indent_char:"Indentation character:",js_eol:"Character(s) to use as line terminators:",js_end_with_newline:"End ouput with newline:",indentation_unix:"Unix",indentation_mac:"Mac",indentation_windows:"Windows",indentation_space:"space",indentation_tab:"tab",jsFormattingSettings:"Formatting Settings for Javascript",indent_level:"Initial indentation level:",before_newline:"Before new line",after_newline:"After new line",preserve_newline:"Preserve new line",collapse_preserve_inline:"Collapse Preserve inline",collapse:"Collapse",expand:"Expand",end_expand:"End expand",none:"None",js_preserve_newlines:"Preserve line-breaks:",js_max_preserve_newlines:"Number of line-breaks to be preserved in one chunk:",space_in_paren:"Add padding space within paren:",space_in_empty_paren:"Add padding space in empty paren:",space_after_anon_function:"Add a space before an anonymous function's parens",js_brace_style:"Brace Style:",break_chained_methods:"Break chained method calls across subsequent lines:",keep_array_indentation:"Preserve array indentation:",space_before_conditional:"Space before condition:",unescape_strings:"Decode printable characters encoded in xNN notation:",js_wrap_line_length:"Wrap lines at next opportunity after N characters (0 for unlimited):",e4x:"Pass E4X xml literal through untouched:",comma_first:"Put commas at the beginning of new line instead of end:",operator_position:"Position for operator:",unknownError:"An unknown error occurred.",failedDeleteRequest:"Failed to delete file from Tern: ${0}",failedReadRequest:"Failed to read file into Tern: ${0}",failedToComputeProposals:"Failed to compute proposals",failedToComputeProposalsNoServer:"Failed to compute proposals, server not started",failedToComputeDecl:"Failed to compute declaration",failedToComputeDeclNoServer:"Failed to compute declaration, server not started",failedToComputeImpl:"Failed to compute implementation",failedToComputeImplNoServer:"Failed to compute implementation, server not started",failedToComputeDoc:"Failed to compute documentation",failedToComputeDocNoServer:"Failed to compute documentation, server not started",failedToComputeOccurrences:"Failed to compute occurrences",failedToComputeOccurrencesNoServer:"failed to compute occurrences, server not started",failedGetInstalledPlugins:"Failed to get installed plug-ins",failedGetInstalledPluginsNoServer:"Failed to get installed plug-ins, server not started",failedGetInstalledDefs:"Failed to get installed Tern definitions",failedGetInstalledDefsNoServer:"Failed to get installed Tern definitions, server not started",failedInstallPlugins:"Failed to install plug-ins",failedInstallPluginsNoServer:"Failed to install plug-ins, server not started",failedRemovePlugins:"Failed to remove plug-ins",failedRemovePluginsNoServer:"Failed to remove plug-ins, server not started",failedEnablementPlugins:"Failed to set enablement of plug-ins",failedEnablementPluginsNoServer:"Failed to set enablement of plug-ins, server not started",failedGetEnvs:"Failed to get contributed environments",failedGetEnvsNoServer:"Failed to get contributed environments, server not started",failedRenameTern:"Failed to compute rename changes",failedRenameNoServer:"Failed to compute rename changes, server not started",failedRefs:"Failed to find references",failedRefsNoServer:"failed to find references - server not started",failedType:"Failed to find type",failedQuickfixesNoServer:"Failed to compute quick fixes, server not started",unknownRequest:"The request '${0}' is unknown",serverNotStarted:"The server has not been started. Request: '${0}'",failedToComputeProblems:"Failed to compute ESLint problems/markers",failedToComputeOutline:"Failed to compute outline",failedToFormat:"Failed to format",failedToFormatNoServer:"Failed to format, server not started",eslintRuleEnableDisable:"Enable or disable ESLint rule using the ```ruleid:0/1/2``` form.\n\nExample use:\n\n>```/* eslint semi:1, no-console:0, no-redeclare:2 */```",eslintEnvDirective:"Specify which environments are used in this JavaScript file.\n\nExample use:\n\n>```/* eslint-env amd, node, broswer */```",eslintRuleEnable:"Enable a given set of ESLint rules.\n\nExample use:\n\n>```/* eslint-enable semi, no-console, no-redeclare */```",eslintRuleDisable:"Disable a given set of ESLint rules.\n\nExample use:\n\n>```/* eslint-disable semi, no-console, no-redeclare */```",arrowFunc:"Create a simple arrow function expression.",arrowFuncObj:"Create a simple arrow function expression that returns an object.",importSimpleDefault:"Create an import statement that imports the default value from a module.",importStarAs:"Create an import statement that imports an entire module as a given name.",importMultiMember:"Create an import statement that imports multiple named members.",importSideEffects:"Create an import statment that imports an entire module for side effects only",letSimple:"Create a new let statement.",exportSimple:"Create a new export statement.",exportDefault:"Create a new export statement that exports the value as the default for the module.",forOf:"Create a new for..of statement.",constSimple:"Create a new const statement.",funcGenerator:"Create a new generator function.",yieldSimple:"Create a new yield statement.",yieldSimpleReturn:"Create a new yield statement that returns the optional value passed to the generator's next() method.",yieldDelegate:"Create a new yield* statement that is used to delegate to another generator.",ifSimple:"Create a new if statement.",ifElseSimple:"Create a new if..else statement.",forArray:"Create a new for loop that iterates over an array.",forArrayVar:"Create a new for loop that iterates over an array, with a local variable.",forInSimple:"Create a for..in loop that iterates the properties of an object.",whileSimple:"Create a while loop.",doSimple:"Create a do..while loop.",switchSimple:"Create a switch statement with a case and a default case.",tryCatch:"Create a new try..catch statement.",tryCatchFinally:"Create a new try..catch..finally statement.",typeofSimple:"Create a new typeof expression.",instanceofSimple:"Create a new instanceof expression.",withSimple:"Create a new with statement.\n\n```Use of the with statement is not recommended, as it may be the source of confusing bugs and compatibility issues```.",functionSimple:"Create a new function declaration.",functionProp:"Create a new object property that is set to a function expression.",defineSimple:"Create a new AMD define function call.",nlsSimple:"Create a new //$NON-NLS-$ comment.",logSimple:"Create a new console.log expression.\n\n```This feature is non-standard and is not on a standards track. Do not use it on production sites facing the Web: it will not work for every user. There may also be large incompatibilities between implementations and the behavior may change in the future.```",requireSimple:"Create a Node.js require statement and assign it to a local variable.",caseSimple:"Create a new case statement.",classSimple:"Create a new JavaScript class that extends another class and has a constructor.",classExpr:"Create a new JavaScript class expression that extends another class and has a constructor.",amqpRequire:"Create a new Node.js require statement to import the AMQP framework.",amqpConnection:"Create a new AMQP connection.",amqpOn:"Create a new AMQP connection on call.",amqpQueue:"Create a new AMQP connection queue.",amqpExchange:"Create a new AMQP connection exchange.",expressRequire:"Create a new Node.js require statement to import Express.",expressInstance:"Create a new Express app instance.",expressGet:"Create a new Express app.get call.",expressSet:"Create a new Express app.set call.",expressUse:"Create a new Express app.use call.",expressEngine:"Create a new Express app.engine call.",expressParam:"Create a new Express app.param call.",expressUseError:"create a new Express app.use call with error handling.",mongodbRequire:"Create a Node.js require statement to import MongoDB.",mongodbClient:"Create a new MongoDB client.",mongodbOpen:"Create a new MongoDB client and open a connection.",mongodbConnect:"Connect to an existing MongoDB database.",mongodbConnectCF:"Connect to an existing MongoDB database using Cloud Foundry.",mongodbCollection:"Create a MongoDB database collection.",mongodbStrictCollection:"Create a MongoDB database strict collection.",mysqlRequire:"Create a Node.js require statement to import MySQL DB.",mysqlConnection:"Create a new MySQL DB connection.",mysqlQuery:"Create a new MySQL DB query statement.",postgresRequire:"Create a Node.js require statement to import Postgres DB.",postgresClient:"Create a new Postgres DB client.",postgresConnect:"Create a new Postgres DB client and connect.",postgresQuery:"Create a new Postgres DB query statement.",redisRequire:"Create a Node.js require statement to import Redis.",redisClient:"Create a new Redis client.",redisConnect:"Create a new Redis client and connect.",redisSet:"Create a new Redis client set call.",redisGet:"Create a new Redis client get call.",redisOn:"Create a new Redis client event handler."}),define("requirejs/text",["module"],function(e){"use strict";
var t,n,r,o,s,a=["Msxml2.XMLHTTP","Microsoft.XMLHTTP","Msxml2.XMLHTTP.4.0"],i=/^\s*<\?xml(\s)+version=[\'\"](\d)*.(\d)*[\'\"](\s)*\?>/im,l=/<body[^>]*>\s*([\s\S]+)\s*<\/body>/im,c="undefined"!=typeof location&&location.href,p=c&&location.protocol&&location.protocol.replace(/\:/,""),u=c&&location.hostname,d=c&&(location.port||void 0),h={},f=e.config&&e.config()||{};return t={version:"2.0.12",strip:function(e){if(e){e=e.replace(i,"");var t=e.match(l);t&&(e=t[1])}else e="";return e},jsEscape:function(e){return e.replace(/(['\\])/g,"\\$1").replace(/[\f]/g,"\\f").replace(/[\b]/g,"\\b").replace(/[\n]/g,"\\n").replace(/[\t]/g,"\\t").replace(/[\r]/g,"\\r").replace(/[\u2028]/g,"\\u2028").replace(/[\u2029]/g,"\\u2029")},createXhr:f.createXhr||function(){var e,t,n;if("undefined"!=typeof XMLHttpRequest)return new XMLHttpRequest;if("undefined"!=typeof ActiveXObject)for(t=0;3>t;t+=1){n=a[t];try{e=new ActiveXObject(n)}catch(r){}if(e){a=[n];break}}return e},parseName:function(e){var t,n,r,o=!1,s=e.indexOf("."),a=0===e.indexOf("./")||0===e.indexOf("../");return-1!==s&&(!a||s>1)?(t=e.substring(0,s),n=e.substring(s+1,e.length)):t=e,r=n||t,s=r.indexOf("!"),-1!==s&&(o="strip"===r.substring(s+1),r=r.substring(0,s),n?n=r:t=r),{moduleName:t,ext:n,strip:o}},xdRegExp:/^((\w+)\:)?\/\/([^\/\\]+)/,useXhr:function(e,n,r,o){var s,a,i,l=t.xdRegExp.exec(e);return l?(s=l[2],a=l[3],a=a.split(":"),i=a[1],a=a[0],!(s&&s!==n||a&&a.toLowerCase()!==r.toLowerCase()||(i||a)&&i!==o)):!0},finishLoad:function(e,n,r,o){r=n?t.strip(r):r,f.isBuild&&(h[e]=r),o(r)},load:function(e,n,r,o){if(o&&o.isBuild&&!o.inlineText)return void r();f.isBuild=o&&o.isBuild;var s=t.parseName(e),a=s.moduleName+(s.ext?"."+s.ext:""),i=n.toUrl(a),l=f.useXhr||t.useXhr;return 0===i.indexOf("empty:")?void r():void(!c||l(i,p,u,d)?t.get(i,function(n){t.finishLoad(e,s.strip,n,r)},function(e){r.error&&r.error(e)}):n([a],function(e){t.finishLoad(s.moduleName+"."+s.ext,s.strip,e,r)}))},write:function(e,n,r){if(h.hasOwnProperty(n)){var o=t.jsEscape(h[n]);r.asModule(e+"!"+n,"define(function () { return '"+o+"';});\n")}},writeFile:function(e,n,r,o,s){var a=t.parseName(n),i=a.ext?"."+a.ext:"",l=a.moduleName+i,c=r.toUrl(a.moduleName+i)+".js";t.load(l,r,function(){var n=function(e){return o(c,e)};n.asModule=function(e,t){return o.asModule(e,c,t)},t.write(e,l,n,s)},s)}},"node"===f.env||!f.env&&"undefined"!=typeof process&&process.versions&&process.versions.node&&!process.versions["node-webkit"]?(n=require.nodeRequire("fs"),t.get=function(e,t,r){try{var o=n.readFileSync(e,"utf8");0===o.indexOf("﻿")&&(o=o.substring(1)),t(o)}catch(s){r&&r(s)}}):"xhr"===f.env||!f.env&&t.createXhr()?t.get=function(e,n,r,o){var s,a=t.createXhr();if(a.open("GET",e,!0),o)for(s in o)o.hasOwnProperty(s)&&a.setRequestHeader(s.toLowerCase(),o[s]);f.onXhr&&f.onXhr(a,e),a.onreadystatechange=function(){var t,o;4===a.readyState&&(t=a.status||0,t>399&&600>t?(o=new Error(e+" HTTP status: "+t),o.xhr=a,r&&r(o)):n(a.responseText),f.onXhrComplete&&f.onXhrComplete(a,e))},a.send(null)}:"rhino"===f.env||!f.env&&"undefined"!=typeof Packages&&"undefined"!=typeof java?t.get=function(e,t){var n,r,o="utf-8",s=new java.io.File(e),a=java.lang.System.getProperty("line.separator"),i=new java.io.BufferedReader(new java.io.InputStreamReader(new java.io.FileInputStream(s),o)),l="";try{for(n=new java.lang.StringBuffer,r=i.readLine(),r&&r.length()&&65279===r.charAt(0)&&(r=r.substring(1)),null!==r&&n.append(r);null!==(r=i.readLine());)n.append(a),n.append(r);l=String(n.toString())}finally{i.close()}t(l)}:("xpconnect"===f.env||!f.env&&"undefined"!=typeof Components&&Components.classes&&Components.interfaces)&&(r=Components.classes,o=Components.interfaces,Components.utils["import"]("resource://gre/modules/FileUtils.jsm"),s="@mozilla.org/windows-registry-key;1"in r,t.get=function(e,t){var n,a,i,l={};s&&(e=e.replace(/\//g,"\\")),i=new FileUtils.File(e);try{n=r["@mozilla.org/network/file-input-stream;1"].createInstance(o.nsIFileInputStream),n.init(i,1,0,!1),a=r["@mozilla.org/intl/converter-input-stream;1"].createInstance(o.nsIConverterInputStream),a.init(n,"utf-8",n.available(),o.nsIConverterInputStream.DEFAULT_REPLACEMENT_CHARACTER),a.readString(n.available(),l),a.close(),n.close(),t(l.value)}catch(c){throw new Error((i&&i.path||"")+": "+c)}}),t}),define("json",["requirejs/text"],function(e){var t=Object.create(null);return{load:function(n,r,o,s){e.get(r.toUrl(n),function(e){if(s.isBuild)t[n]=e,o(e);else{try{var r=JSON.parse(e)}catch(a){o.error(a)}o(r)}},o.error,{accept:"application/json"})},write:function(e,n,r){var o=t[n];o&&r('define("'+e+"!"+n+'", function(){ return '+o+";});\n")}}}),define("json!tern/defs/ecma5.json",function(){return{"!name":"ecma5","!define":{"Error.prototype":"Error.prototype"},Infinity:{"!type":"number","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Infinity","!doc":"A numeric value representing infinity."},undefined:{"!type":"?","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/undefined","!doc":"The value undefined."},NaN:{"!type":"number","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/NaN","!doc":"A value representing Not-A-Number."},Object:{"!type":"fn()",getPrototypeOf:{"!type":"fn(obj: ?) -> ?","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/getPrototypeOf","!doc":"Returns the prototype (i.e. the internal prototype) of the specified object."},create:{"!type":"fn(proto: ?) -> !custom:Object_create","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/create","!doc":"Creates a new object with the specified prototype object and properties."},defineProperty:{"!type":"fn(obj: ?, prop: string, desc: ?) -> !custom:Object_defineProperty","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/defineProperty","!doc":"Defines a new property directly on an object, or modifies an existing property on an object, and returns the object. If you want to see how to use the Object.defineProperty method with a binary-flags-like syntax, see this article."},defineProperties:{"!type":"fn(obj: ?, props: ?) -> !custom:Object_defineProperties","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/defineProperty","!doc":"Defines a new property directly on an object, or modifies an existing property on an object, and returns the object. If you want to see how to use the Object.defineProperty method with a binary-flags-like syntax, see this article."},getOwnPropertyDescriptor:{"!type":"fn(obj: ?, prop: string) -> ?","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/getOwnPropertyDescriptor","!doc":"Returns a property descriptor for an own property (that is, one directly present on an object, not present by dint of being along an object's prototype chain) of a given object."},keys:{"!type":"fn(obj: ?) -> [string]","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/keys","!doc":"Returns an array of a given object's own enumerable properties, in the same order as that provided by a for-in loop (the difference being that a for-in loop enumerates properties in the prototype chain as well)."},getOwnPropertyNames:{"!type":"fn(obj: ?) -> [string]","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/getOwnPropertyNames","!doc":"Returns an array of all properties (enumerable or not) found directly upon a given object."},seal:{"!type":"fn(obj: ?)","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/seal","!doc":"Seals an object, preventing new properties from being added to it and marking all existing properties as non-configurable. Values of present properties can still be changed as long as they are writable."},isSealed:{"!type":"fn(obj: ?) -> bool","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/isSealed","!doc":"Determine if an object is sealed."},freeze:{"!type":"fn(obj: ?) -> !0","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/freeze","!doc":"Freezes an object: that is, prevents new properties from being added to it; prevents existing properties from being removed; and prevents existing properties, or their enumerability, configurability, or writability, from being changed. In essence the object is made effectively immutable. The method returns the object being frozen."},isFrozen:{"!type":"fn(obj: ?) -> bool","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/isFrozen","!doc":"Determine if an object is frozen."},preventExtensions:{"!type":"fn(obj: ?)","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/preventExtensions","!doc":"Prevents new properties from ever being added to an object."},isExtensible:{"!type":"fn(obj: ?) -> bool","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/isExtensible","!doc":"The Object.isExtensible() method determines if an object is extensible (whether it can have new properties added to it)."},prototype:{"!stdProto":"Object",toString:{"!type":"fn() -> string","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/toString","!doc":"Returns a string representing the object."},toLocaleString:{"!type":"fn() -> string","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/toLocaleString","!doc":"Returns a string representing the object. This method is meant to be overriden by derived objects for locale-specific purposes."},valueOf:{"!type":"fn() -> number","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/valueOf","!doc":"Returns the primitive value of the specified object"},hasOwnProperty:{"!type":"fn(prop: string) -> bool","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/hasOwnProperty","!doc":"Returns a boolean indicating whether the object has the specified property."},propertyIsEnumerable:{"!type":"fn(prop: string) -> bool","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/propertyIsEnumerable","!doc":"Returns a Boolean indicating whether the specified property is enumerable."},isPrototypeOf:{"!type":"fn(obj: ?) -> bool","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/isPrototypeOf","!doc":"Tests for an object in another object's prototype chain."}},"!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object","!doc":"Creates an object wrapper."},Function:{"!type":"fn(body: string) -> fn()",prototype:{"!stdProto":"Function",apply:{"!type":"fn(this: ?, args: [?])","!effects":["call and return !this this=!0 !1.<i> !1.<i> !1.<i>"],"!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Function/apply","!doc":"Calls a function with a given this value and arguments provided as an array (or an array like object)."},call:{"!type":"fn(this: ?, args?: ?) -> !this.!ret","!effects":["call and return !this this=!0 !1 !2 !3 !4"],"!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Function/call","!doc":"Calls a function with a given this value and arguments provided individually."},bind:{"!type":"fn(this: ?, args?: ?) -> !custom:Function_bind","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Function/bind","!doc":"Creates a new function that, when called, has its this keyword set to the provided value, with a given sequence of arguments preceding any provided when the new function was called."},prototype:"?"},"!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Function","!doc":"Every function in JavaScript is actually a Function object."},Array:{"!type":"fn(size: number) -> !custom:Array_ctor",isArray:{"!type":"fn(value: ?) -> bool","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/isArray","!doc":"Returns true if an object is an array, false if it is not."},prototype:{"!stdProto":"Array",length:{"!type":"number","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/length","!doc":"An unsigned, 32-bit integer that specifies the number of elements in an array."},concat:{"!type":"fn(other: [?]) -> !this","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/concat","!doc":"Returns a new array comprised of this array joined with other array(s) and/or value(s)."},join:{"!type":"fn(separator?: string) -> string","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/join","!doc":"Joins all elements of an array into a string."},splice:{"!type":"fn(pos: number, amount: number, newelt?: ?) -> [?]","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/splice","!doc":"Changes the content of an array, adding new elements while removing old elements."},pop:{"!type":"fn() -> !this.<i>","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/pop","!doc":"Removes the last element from an array and returns that element."},push:{"!type":"fn(newelt: ?) -> number","!effects":["propagate !0 !this.<i>"],"!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/push","!doc":"Mutates an array by appending the given elements and returning the new length of the array."},shift:{"!type":"fn() -> !this.<i>","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/shift","!doc":"Removes the first element from an array and returns that element. This method changes the length of the array."},unshift:{"!type":"fn(newelt: ?) -> number","!effects":["propagate !0 !this.<i>"],"!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/unshift","!doc":"Adds one or more elements to the beginning of an array and returns the new length of the array."},slice:{"!type":"fn(from?: number, to?: number) -> !this","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/slice","!doc":"Returns a shallow copy of a portion of an array."},reverse:{"!type":"fn()","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/reverse","!doc":"Reverses an array in place.  The first array element becomes the last and the last becomes the first."},sort:{"!type":"fn(compare?: fn(a: ?, b: ?) -> number)","!effects":["call !0 !this.<i> !this.<i>"],"!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/sort","!doc":"Sorts the elements of an array in place and returns the array."},indexOf:{"!type":"fn(elt: ?, from?: number) -> number","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/indexOf","!doc":"Returns the first index at which a given element can be found in the array, or -1 if it is not present."},lastIndexOf:{"!type":"fn(elt: ?, from?: number) -> number","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/lastIndexOf","!doc":"Returns the last index at which a given element can be found in the array, or -1 if it is not present. The array is searched backwards, starting at fromIndex."},every:{"!type":"fn(test: fn(elt: ?, i: number, array: +Array) -> bool, context?: ?) -> bool","!effects":["call !0 this=!1 !this.<i> number !this"],"!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/every","!doc":"Tests whether all elements in the array pass the test implemented by the provided function."},some:{"!type":"fn(test: fn(elt: ?, i: number, array: +Array) -> bool, context?: ?) -> bool","!effects":["call !0 this=!1 !this.<i> number !this"],"!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/some","!doc":"Tests whether some element in the array passes the test implemented by the provided function."},filter:{"!type":"fn(test: fn(elt: ?, i: number, array: +Array) -> bool, context?: ?) -> !this","!effects":["call !0 this=!1 !this.<i> number !this"],"!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/filter","!doc":"Creates a new array with all elements that pass the test implemented by the provided function."},forEach:{"!type":"fn(f: fn(elt: ?, i: number, array: +Array), context?: ?)","!effects":["call !0 this=!1 !this.<i> number !this"],"!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/forEach","!doc":"Executes a provided function once per array element."},map:{"!type":"fn(f: fn(elt: ?, i: number, array: +Array) -> ?, context?: ?) -> [!0.!ret]","!effects":["call !0 this=!1 !this.<i> number !this"],"!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/map","!doc":"Creates a new array with the results of calling a provided function on every element in this array."},reduce:{"!type":"fn(combine: fn(sum: ?, elt: ?, i: number, array: +Array) -> ?, init?: ?) -> !0.!ret","!effects":["call !0 !1 !this.<i> number !this"],"!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/Reduce","!doc":"Apply a function against an accumulator and each value of the array (from left-to-right) as to reduce it to a single value."},reduceRight:{"!type":"fn(combine: fn(sum: ?, elt: ?, i: number, array: +Array) -> ?, init?: ?) -> !0.!ret","!effects":["call !0 !1 !this.<i> number !this"],"!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/ReduceRight","!doc":"Apply a function simultaneously against two values of the array (from right-to-left) as to reduce it to a single value."}},"!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array","!doc":"The JavaScript Array global object is a constructor for arrays, which are high-level, list-like objects."},String:{"!type":"fn(value: ?) -> string",fromCharCode:{"!type":"fn(code: number) -> string","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/fromCharCode","!doc":"Returns a string created by using the specified sequence of Unicode values."},prototype:{"!stdProto":"String",length:{"!type":"number","!url":"https://developer.mozilla.org/en/docs/JavaScript/Reference/Global_Objects/String/length","!doc":"Represents the length of a string."},"<i>":"string",charAt:{"!type":"fn(i: number) -> string","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/charAt","!doc":"Returns the specified character from a string."},charCodeAt:{"!type":"fn(i: number) -> number","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/charCodeAt","!doc":"Returns the numeric Unicode value of the character at the given index (except for unicode codepoints > 0x10000)."},indexOf:{"!type":"fn(char: string, from?: number) -> number","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/indexOf","!doc":"Returns the index within the calling String object of the first occurrence of the specified value, starting the search at fromIndex,\nreturns -1 if the value is not found."},lastIndexOf:{"!type":"fn(char: string, from?: number) -> number","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/lastIndexOf","!doc":"Returns the index within the calling String object of the last occurrence of the specified value, or -1 if not found. The calling string is searched backward, starting at fromIndex."},substring:{"!type":"fn(from: number, to?: number) -> string","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/substring","!doc":"Returns a subset of a string between one index and another, or through the end of the string."},substr:{"!type":"fn(from: number, length?: number) -> string","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/substr","!doc":"Returns the characters in a string beginning at the specified location through the specified number of characters."},slice:{"!type":"fn(from: number, to?: number) -> string","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/slice","!doc":"Extracts a section of a string and returns a new string."},trim:{"!type":"fn() -> string","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/Trim","!doc":"Removes whitespace from both ends of the string."},toUpperCase:{"!type":"fn() -> string","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/toUpperCase","!doc":"Returns the calling string value converted to uppercase."},toLowerCase:{"!type":"fn() -> string","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/toLowerCase","!doc":"Returns the calling string value converted to lowercase."},toLocaleUpperCase:{"!type":"fn() -> string","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/toLocaleUpperCase","!doc":"Returns the calling string value converted to upper case, according to any locale-specific case mappings."},toLocaleLowerCase:{"!type":"fn() -> string","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/toLocaleLowerCase","!doc":"Returns the calling string value converted to lower case, according to any locale-specific case mappings."},split:{"!type":"fn(pattern?: string|+RegExp, limit?: number) -> [string]","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/split","!doc":"Splits a String object into an array of strings by separating the string into substrings."},concat:{"!type":"fn(other: string) -> string","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/concat","!doc":"Combines the text of two or more strings and returns a new string."},localeCompare:{"!type":"fn(other: string) -> number","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/localeCompare","!doc":"Returns a number indicating whether a reference string comes before or after or is the same as the given string in sort order."},match:{"!type":"fn(pattern: +RegExp) -> [string]","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/match","!doc":"Used to retrieve the matches when matching a string against a regular expression."},replace:{"!type":"fn(pattern: string|+RegExp, replacement: string) -> string","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/replace","!doc":"Returns a new string with some or all matches of a pattern replaced by a replacement.  The pattern can be a string or a RegExp, and the replacement can be a string or a function to be called for each match."},search:{"!type":"fn(pattern: +RegExp) -> number","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/search","!doc":"Executes the search for a match between a regular expression and this String object."}},"!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String","!doc":"The String global object is a constructor for strings, or a sequence of characters."},Number:{"!type":"fn(value: ?) -> number",MAX_VALUE:{"!type":"number","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number/MAX_VALUE","!doc":"The maximum numeric value representable in JavaScript."},MIN_VALUE:{"!type":"number","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number/MIN_VALUE","!doc":"The smallest positive numeric value representable in JavaScript."},POSITIVE_INFINITY:{"!type":"number","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number/POSITIVE_INFINITY","!doc":"A value representing the positive Infinity value."},NEGATIVE_INFINITY:{"!type":"number","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number/NEGATIVE_INFINITY","!doc":"A value representing the negative Infinity value."},prototype:{"!stdProto":"Number",toString:{"!type":"fn(radix?: number) -> string","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number/toString","!doc":"Returns a string representing the specified Number object"},toFixed:{"!type":"fn(digits: number) -> string","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number/toFixed","!doc":"Formats a number using fixed-point notation"},toExponential:{"!type":"fn(digits: number) -> string","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number/toExponential","!doc":"Returns a string representing the Number object in exponential notation"},toPrecision:{"!type":"fn(digits: number) -> string","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number/toPrecision","!doc":"The toPrecision() method returns a string representing the number to the specified precision."}},"!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number","!doc":"The Number JavaScript object is a wrapper object allowing you to work with numerical values. A Number object is created using the Number() constructor."},Boolean:{"!type":"fn(value: ?) -> bool",prototype:{"!stdProto":"Boolean"},"!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean","!doc":"The Boolean object is an object wrapper for a boolean value."},RegExp:{"!type":"fn(source: string, flags?: string)",prototype:{"!stdProto":"RegExp",exec:{"!type":"fn(input: string) -> [string]","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/RegExp/exec","!doc":"Executes a search for a match in a specified string. Returns a result array, or null."},test:{"!type":"fn(input: string) -> bool","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/RegExp/test","!doc":"Executes the search for a match between a regular expression and a specified string. Returns true or false."},global:{"!type":"bool","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/RegExp","!doc":"Creates a regular expression object for matching text with a pattern."},ignoreCase:{"!type":"bool","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/RegExp","!doc":"Creates a regular expression object for matching text with a pattern."},multiline:{"!type":"bool","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/RegExp/multiline","!doc":"Reflects whether or not to search in strings across multiple lines.\n"},source:{"!type":"string","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/RegExp/source","!doc":"A read-only property that contains the text of the pattern, excluding the forward slashes.\n"},lastIndex:{"!type":"number","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/RegExp/lastIndex","!doc":"A read/write integer property that specifies the index at which to start the next match."}},"!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/RegExp","!doc":"Creates a regular expression object for matching text with a pattern."},Date:{"!type":"fn(ms: number)",parse:{"!type":"fn(source: string) -> +Date","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/parse","!doc":"Parses a string representation of a date, and returns the number of milliseconds since January 1, 1970, 00:00:00 UTC."},UTC:{"!type":"fn(year: number, month: number, date: number, hour?: number, min?: number, sec?: number, ms?: number) -> number","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/UTC","!doc":"Accepts the same parameters as the longest form of the constructor, and returns the number of milliseconds in a Date object since January 1, 1970, 00:00:00, universal time."},now:{"!type":"fn() -> number","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/now","!doc":"Returns the number of milliseconds elapsed since 1 January 1970 00:00:00 UTC."},prototype:{toUTCString:{"!type":"fn() -> string","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/toUTCString","!doc":"Converts a date to a string, using the universal time convention."},toISOString:{"!type":"fn() -> string","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/toISOString","!doc":"JavaScript provides a direct way to convert a date object into a string in ISO format, the ISO 8601 Extended Format."},toDateString:{"!type":"fn() -> string","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/toDateString","!doc":"Returns the date portion of a Date object in human readable form in American English."},toTimeString:{"!type":"fn() -> string","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/toTimeString","!doc":"Returns the time portion of a Date object in human readable form in American English."},toLocaleDateString:{"!type":"fn() -> string","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/toLocaleDateString","!doc":"Converts a date to a string, returning the \"date\" portion using the operating system's locale's conventions.\n"},toLocaleTimeString:{"!type":"fn() -> string","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/toLocaleTimeString","!doc":'Converts a date to a string, returning the "time" portion using the current locale\'s conventions.'},getTime:{"!type":"fn() -> number","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/getTime","!doc":"Returns the numeric value corresponding to the time for the specified date according to universal time."},getFullYear:{"!type":"fn() -> number","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/getFullYear","!doc":"Returns the year of the specified date according to local time."},getYear:{"!type":"fn() -> number","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/getYear","!doc":"Returns the year in the specified date according to local time."},getMonth:{"!type":"fn() -> number","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/getMonth","!doc":"Returns the month in the specified date according to local time."},getUTCMonth:{"!type":"fn() -> number","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/getUTCMonth","!doc":"Returns the month of the specified date according to universal time.\n"},getDate:{"!type":"fn() -> number","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/getDate","!doc":"Returns the day of the month for the specified date according to local time."},getUTCDate:{"!type":"fn() -> number","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/getUTCDate","!doc":"Returns the day (date) of the month in the specified date according to universal time.\n"},getDay:{"!type":"fn() -> number","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/getDay","!doc":"Returns the day of the week for the specified date according to local time."},getUTCDay:{"!type":"fn() -> number","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/getUTCDay","!doc":"Returns the day of the week in the specified date according to universal time.\n"},getHours:{"!type":"fn() -> number","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/getHours","!doc":"Returns the hour for the specified date according to local time."},getUTCHours:{"!type":"fn() -> number","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/getUTCHours","!doc":"Returns the hours in the specified date according to universal time.\n"},getMinutes:{"!type":"fn() -> number","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/getMinutes","!doc":"Returns the minutes in the specified date according to local time."},getUTCMinutes:{"!type":"fn() -> number","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date","!doc":"Creates JavaScript Date instances which let you work with dates and times."},getSeconds:{"!type":"fn() -> number","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/getSeconds","!doc":"Returns the seconds in the specified date according to local time."},getUTCSeconds:{"!type":"fn() -> number","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/getUTCSeconds","!doc":"Returns the seconds in the specified date according to universal time.\n"},getMilliseconds:{"!type":"fn() -> number","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/getMilliseconds","!doc":"Returns the milliseconds in the specified date according to local time."},getUTCMilliseconds:{"!type":"fn() -> number","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/getUTCMilliseconds","!doc":"Returns the milliseconds in the specified date according to universal time.\n"},getTimezoneOffset:{"!type":"fn() -> number","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/getTimezoneOffset","!doc":"Returns the time-zone offset from UTC, in minutes, for the current locale."},setTime:{"!type":"fn(date: +Date) -> number","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/setTime","!doc":"Sets the Date object to the time represented by a number of milliseconds since January 1, 1970, 00:00:00 UTC.\n"},setFullYear:{"!type":"fn(year: number) -> number","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/setFullYear","!doc":"Sets the full year for a specified date according to local time.\n"},setUTCFullYear:{"!type":"fn(year: number) -> number","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/setUTCFullYear","!doc":"Sets the full year for a specified date according to universal time.\n"},setMonth:{"!type":"fn(month: number) -> number","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/setMonth","!doc":"Set the month for a specified date according to local time."},setUTCMonth:{"!type":"fn(month: number) -> number","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/setUTCMonth","!doc":"Sets the month for a specified date according to universal time.\n"},setDate:{"!type":"fn(day: number) -> number","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/setDate","!doc":"Sets the day of the month for a specified date according to local time."},setUTCDate:{"!type":"fn(day: number) -> number","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/setUTCDate","!doc":"Sets the day of the month for a specified date according to universal time.\n"},setHours:{"!type":"fn(hour: number) -> number","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/setHours","!doc":"Sets the hours for a specified date according to local time, and returns the number of milliseconds since 1 January 1970 00:00:00 UTC until the time represented by the updated Date instance."},setUTCHours:{"!type":"fn(hour: number) -> number","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/setUTCHours","!doc":"Sets the hour for a specified date according to universal time.\n"},setMinutes:{"!type":"fn(min: number) -> number","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/setMinutes","!doc":"Sets the minutes for a specified date according to local time."},setUTCMinutes:{"!type":"fn(min: number) -> number","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/setUTCMinutes","!doc":"Sets the minutes for a specified date according to universal time.\n"},setSeconds:{"!type":"fn(sec: number) -> number","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/setSeconds","!doc":"Sets the seconds for a specified date according to local time."},setUTCSeconds:{"!type":"fn(sec: number) -> number","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/setUTCSeconds","!doc":"Sets the seconds for a specified date according to universal time.\n"},setMilliseconds:{"!type":"fn(ms: number) -> number","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/setMilliseconds","!doc":"Sets the milliseconds for a specified date according to local time.\n"},setUTCMilliseconds:{"!type":"fn(ms: number) -> number","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/setUTCMilliseconds","!doc":"Sets the milliseconds for a specified date according to universal time.\n"}},"!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date","!doc":"Creates JavaScript Date instances which let you work with dates and times."},Error:{"!type":"fn(message: string)",prototype:{name:{"!type":"string","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Error/name","!doc":"A name for the type of error."},message:{"!type":"string","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Error/message","!doc":"A human-readable description of the error."}},"!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Error","!doc":"Creates an error object."},SyntaxError:{"!type":"fn(message: string)",prototype:"Error.prototype","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/SyntaxError","!doc":"Represents an error when trying to interpret syntactically invalid code."},ReferenceError:{"!type":"fn(message: string)",prototype:"Error.prototype","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/ReferenceError","!doc":"Represents an error when a non-existent variable is referenced."},URIError:{"!type":"fn(message: string)",prototype:"Error.prototype","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/URIError","!doc":"Represents an error when a malformed URI is encountered."},EvalError:{"!type":"fn(message: string)",prototype:"Error.prototype","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/EvalError","!doc":"Represents an error regarding the eval function."},RangeError:{"!type":"fn(message: string)",prototype:"Error.prototype","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/RangeError","!doc":"Represents an error when a number is not within the correct range allowed."},TypeError:{"!type":"fn(message: string)",prototype:"Error.prototype","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/TypeError","!doc":"Represents an error an error when a value is not of the expected type."},parseInt:{"!type":"fn(string: string, radix?: number) -> number","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/parseInt","!doc":"Parses a string argument and returns an integer of the specified radix or base."},parseFloat:{"!type":"fn(string: string) -> number","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/parseFloat","!doc":"Parses a string argument and returns a floating point number."},isNaN:{"!type":"fn(value: number) -> bool","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/isNaN","!doc":"Determines whether a value is NaN or not. Be careful, this function is broken. You may be interested in ECMAScript 6 Number.isNaN."},isFinite:{"!type":"fn(value: number) -> bool","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/isFinite","!doc":"Determines whether the passed value is a finite number."},eval:{"!type":"fn(code: string) -> ?","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/eval","!doc":"Evaluates JavaScript code represented as a string."},encodeURI:{"!type":"fn(uri: string) -> string","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/encodeURI","!doc":'Encodes a Uniform Resource Identifier (URI) by replacing each instance of certain characters by one, two, three, or four escape sequences representing the UTF-8 encoding of the character (will only be four escape sequences for characters composed of two "surrogate" characters).'},encodeURIComponent:{"!type":"fn(uri: string) -> string","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/encodeURIComponent","!doc":'Encodes a Uniform Resource Identifier (URI) component by replacing each instance of certain characters by one, two, three, or four escape sequences representing the UTF-8 encoding of the character (will only be four escape sequences for characters composed of two "surrogate" characters).'},decodeURI:{"!type":"fn(uri: string) -> string","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/decodeURI","!doc":"Decodes a Uniform Resource Identifier (URI) previously created by encodeURI or by a similar routine."},decodeURIComponent:{"!type":"fn(uri: string) -> string","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/decodeURIComponent","!doc":"Decodes a Uniform Resource Identifier (URI) component previously created by encodeURIComponent or by a similar routine."},Math:{E:{"!type":"number","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Math/E","!doc":"The base of natural logarithms, e, approximately 2.718."},LN2:{"!type":"number","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Math/LN2","!doc":"The natural logarithm of 2, approximately 0.693."},LN10:{"!type":"number","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Math/LN10","!doc":"The natural logarithm of 10, approximately 2.302."},LOG2E:{"!type":"number","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Math/LOG2E","!doc":"The base 2 logarithm of E (approximately 1.442)."},LOG10E:{"!type":"number","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Math/LOG10E","!doc":"The base 10 logarithm of E (approximately 0.434)."},SQRT1_2:{"!type":"number","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Math/SQRT1_2","!doc":"The square root of 1/2; equivalently, 1 over the square root of 2, approximately 0.707."},SQRT2:{"!type":"number","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Math/SQRT2","!doc":"The square root of 2, approximately 1.414."},PI:{"!type":"number","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Math/PI","!doc":"The ratio of the circumference of a circle to its diameter, approximately 3.14159."},abs:{"!type":"fn(number) -> number","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Math/abs","!doc":"Returns the absolute value of a number."},cos:{"!type":"fn(number) -> number","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Math/cos","!doc":"Returns the cosine of a number."},sin:{"!type":"fn(number) -> number","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Math/sin","!doc":"Returns the sine of a number."},tan:{"!type":"fn(number) -> number","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Math/tan","!doc":"Returns the tangent of a number."},acos:{"!type":"fn(number) -> number","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Math/acos","!doc":"Returns the arccosine (in radians) of a number."},asin:{"!type":"fn(number) -> number","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Math/asin","!doc":"Returns the arcsine (in radians) of a number."},atan:{"!type":"fn(number) -> number","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Math/atan","!doc":"Returns the arctangent (in radians) of a number."},atan2:{"!type":"fn(y: number, x: number) -> number","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Math/atan2","!doc":"Returns the arctangent of the quotient of its arguments."},ceil:{"!type":"fn(number) -> number","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Math/ceil","!doc":"Returns the smallest integer greater than or equal to a number."},floor:{"!type":"fn(number) -> number","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Math/floor","!doc":"Returns the largest integer less than or equal to a number."},round:{"!type":"fn(number) -> number","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Math/round","!doc":"Returns the value of a number rounded to the nearest integer."},exp:{"!type":"fn(number) -> number","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Math/exp","!doc":"Returns Ex, where x is the argument, and E is Euler's constant, the base of the natural logarithms."},log:{"!type":"fn(number) -> number","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Math/log","!doc":"Returns the natural logarithm (base E) of a number."},sqrt:{"!type":"fn(number) -> number","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Math/sqrt","!doc":"Returns the square root of a number."},pow:{"!type":"fn(number, number) -> number","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Math/pow","!doc":"Returns base to the exponent power, that is, baseexponent."},max:{"!type":"fn(number, number) -> number","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Math/max","!doc":"Returns the largest of zero or more numbers."},min:{"!type":"fn(number, number) -> number","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Math/min","!doc":"Returns the smallest of zero or more numbers."},random:{"!type":"fn() -> number","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Math/random","!doc":"Returns a floating-point, pseudo-random number in the range [0, 1) that is, from 0 (inclusive) up to but not including 1 (exclusive), which you can then scale to your desired range."},"!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Math","!doc":"A built-in object that has properties and methods for mathematical constants and functions."},JSON:{parse:{"!type":"fn(json: string, reviver?: fn(key: string, value: ?) -> ?) -> ?","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/JSON/parse","!doc":"Parse a string as JSON, optionally transforming the value produced by parsing."},stringify:{"!type":"fn(value: ?, replacer?: fn(key: string, value: ?) -> ?, space?: string|number) -> string","!url":"https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/JSON/stringify","!doc":"Convert a value to JSON, optionally replacing values if a replacer function is specified, or optionally including only the specified properties if a replacer array is specified."},"!url":"https://developer.mozilla.org/en-US/docs/JSON","!doc":"JSON (JavaScript Object Notation) is a data-interchange format.  It closely resembles a subset of JavaScript syntax, although it is not a strict subset. (See JSON in the JavaScript Reference for full details.)  It is useful when writing any kind of JavaScript-based application, including websites and browser extensions.  For example, you might store user information in JSON format in a cookie, or you might store extension preferences in JSON in a string-valued browser preference."}}
}),define("json!tern/defs/ecma6.json",function(){return{"!name":"ecma6","!define":{"Promise.prototype":{"catch":{"!doc":"The catch() method returns a Promise and deals with rejected cases only. It behaves the same as calling Promise.prototype.then(undefined, onRejected).","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/catch","!type":"fn(onRejected: fn(reason: ?)) -> !this"},then:{"!doc":"The then() method returns a Promise. It takes two arguments, both are callback functions for the success and failure cases of the Promise.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/then","!type":"fn(onFulfilled: fn(value: ?), onRejected: fn(reason: ?)) -> !custom:Promise_then","!effects":["call !0 !this.:t"]}},Promise_reject:{"!type":"fn(reason: ?) -> !this","!doc":"The Promise.reject(reason) method returns a Promise object that is rejected with the given reason.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/reject"},iter_prototype:{":Symbol.iterator":"fn() -> !this"},iter:{"!proto":"iter_prototype",next:{"!type":"fn() -> +iter_result[value=!this.:t]","!doc":"Return the next item in the sequence.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Iterators_and_Generators"},"!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Iterators_and_Generators"},iter_result:{done:"bool",value:"?"},generator_prototype:{"!proto":"iter_prototype",next:"fn(value?: ?) -> iter_result","return":"fn(value?: ?) -> iter_result","throw":"fn(exception: +Error)"},Proxy_handler:{"!doc":"The proxy's handler object is a placeholder object which contains traps for proxies.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler",getPrototypeOf:"fn(target: ?)",setPrototypeOf:"fn(target: ?, prototype: ?)",isExtensible:"fn(target: ?)",preventExtensions:"fn(target: ?)",getOwnPropertyDescriptor:"fn(target: ?, property: string)",defineProperty:"fn(target: ?, property: string, descriptor: ?)",has:"fn(target: ?, property: string)",get:"fn(target: ?, property: string)",set:"fn(target: ?, property: string, value: ?)",deleteProperty:"fn(target: ?, property: string)",enumerate:"fn(target: ?)",ownKeys:"fn(target: ?)",apply:"fn(target: ?, self: ?, arguments: [?])",construct:"fn(target: ?, arguments: [?])"},Proxy_revocable:{proxy:"+Proxy",revoke:"fn()"},TypedArray:{"!type":"fn(size: number)","!doc":"A TypedArray object describes an array-like view of an underlying binary data buffer. There is no global property named TypedArray, nor is there a directly visible TypedArray constructor.  Instead, there are a number of different global properties, whose values are typed array constructors for specific element types, listed below. On the following pages you will find common properties and methods that can be used with any typed array containing elements of any type.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray",from:{"!type":"fn(arrayLike: ?, mapFn?: fn(elt: ?, i: number) -> number, thisArg?: ?) -> +TypedArray","!effects":["call !1 this=!2 !0.<i> number"],"!doc":"Creates a new typed array from an array-like or iterable object.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/from"},of:{"!type":"fn(elements: number) -> +TypedArray","!doc":"Creates a new typed array from a variable number of arguments.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/of"},BYTES_PER_ELEMENT:{"!type":"number","!doc":"The TypedArray.BYTES_PER_ELEMENT property represents the size in bytes of each element in an typed array.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/BYTES_PER_ELEMENT"},name:{"!type":"string","!doc":"The TypedArray.name property represents a string value of the typed array constructor name.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/name"},prototype:{"<i>":"number",buffer:{"!type":"+ArrayBuffer","!doc":"The buffer accessor property represents the ArrayBuffer referenced by a TypedArray at construction time.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/buffer"},byteLength:{"!type":"number","!doc":"The byteLength accessor property represents the length (in bytes) of a typed array from the start of its ArrayBuffer.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/byteLength"},byteOffset:{"!type":"number","!doc":"The byteOffset accessor property represents the offset (in bytes) of a typed array from the start of its ArrayBuffer.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/byteOffset"},copyWithin:{"!type":"fn(target: number, start: number, end?: number) -> ?","!doc":"The copyWithin() method copies the sequence of array elements within the array to the position starting at target. The copy is taken from the index positions of the second and third arguments start and end. The end argument is optional and defaults to the length of the array. This method has the same algorithm as Array.prototype.copyWithin. TypedArray is one of the typed array types here.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/copyWithin"},entries:{"!type":"fn() -> +iter[:t=number]","!doc":"The entries() method returns a new Array Iterator object that contains the key/value pairs for each index in the array.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/entries"},every:{"!type":"fn(callback: fn(element: number, index: number, array: TypedArray) -> bool, thisArg?: ?) -> bool","!effects":["call !0 this=!1 number number !this"],"!doc":"The every() method tests whether all elements in the typed array pass the test implemented by the provided function. This method has the same algorithm as Array.prototype.every(). TypedArray is one of the typed array types here.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/every"},fill:{"!type":"fn(value: number, start?: number, end?: number)","!doc":"The fill() method fills all the elements of a typed array from a start index to an end index with a static value. This method has the same algorithm as Array.prototype.fill(). TypedArray is one of the typed array types here.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/fill"},filter:{"!type":"fn(test: fn(element: number, i: number) -> bool, context?: ?) -> !this","!effects":["call !0 this=!1 number number"],"!doc":"Creates a new array with all of the elements of this array for which the provided filtering function returns true. See also Array.prototype.filter().","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/filter"},find:{"!type":"fn(callback: fn(element: number, index: number, array: +TypedArray) -> bool, thisArg?: ?) -> number","!effects":["call !0 this=!1 number number !this"],"!doc":"The find() method returns a value in the typed array, if an element satisfies the provided testing function. Otherwise undefined is returned. TypedArray is one of the typed array types here.\nSee also the findIndex() method, which returns the index of a found element in the typed array instead of its value.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/find"},findIndex:{"!type":"fn(callback: fn(element: number, index: number, array: +TypedArray) -> bool, thisArg?: ?) -> number","!effects":["call !0 this=!1 number number !this"],"!doc":"The findIndex() method returns an index in the typed array, if an element in the typed array satisfies the provided testing function. Otherwise -1 is returned.\nSee also the find() method, which returns the value of a found element in the typed array instead of its index.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/findIndex"},forEach:{"!type":"fn(callback: fn(value: number, key: number, array: +TypedArray), thisArg?: ?)","!effects":["call !0 this=!1 number number !this"],"!doc":"Executes a provided function once per array element.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/forEach"},indexOf:{"!type":"fn(searchElement: number, fromIndex?: number) -> number","!doc":"The indexOf() method returns the first index at which a given element can be found in the typed array, or -1 if it is not present. This method has the same algorithm as Array.prototype.indexOf(). TypedArray is one of the typed array types here.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/indexOf"},join:{"!type":"fn(separator?: string) -> string","!doc":"The join() method joins all elements of an array into a string. This method has the same algorithm as Array.prototype.join(). TypedArray is one of the typed array types here.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/join"},keys:{"!type":"fn() -> +iter[:t=number]","!doc":"The keys() method returns a new Array Iterator object that contains the keys for each index in the array.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/keys"},lastIndexOf:{"!type":"fn(searchElement: number, fromIndex?: number) -> number","!doc":"The lastIndexOf() method returns the last index at which a given element can be found in the typed array, or -1 if it is not present. The typed array is searched backwards, starting at fromIndex. This method has the same algorithm as Array.prototype.lastIndexOf(). TypedArray is one of the typed array types here.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/lastIndexOf"},length:{"!type":"number","!doc":"Returns the number of elements hold in the typed array. Fixed at construction time and thus read only.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/length"},map:{"!type":"fn(f: fn(element: number, i: number) -> number, context?: ?) -> +TypedArray","!effects":["call !0 this=!1 number number"],"!doc":"Creates a new array with the results of calling a provided function on every element in this array. See also Array.prototype.map().","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/map"},reduce:{"!type":"fn(combine: fn(sum: ?, elt: number, i: number) -> ?, init?: ?) -> !0.!ret","!effects":["call !0 !1 number number"],"!doc":"Apply a function against an accumulator and each value of the array (from left-to-right) as to reduce it to a single value. See also Array.prototype.reduce().","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/reduce"},reduceRight:{"!type":"fn(combine: fn(sum: ?, elt: number, i: number) -> ?, init?: ?) -> !0.!ret","!effects":["call !0 !1 number number"],"!doc":"Apply a function against an accumulator and each value of the array (from right-to-left) as to reduce it to a single value. See also Array.prototype.reduceRight().","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/reduceRight"},reverse:{"!type":"fn()","!doc":"The reverse() method reverses a typed array in place. The first typed array element becomes the last and the last becomes the first. This method has the same algorithm as Array.prototype.reverse(). TypedArray is one of the typed array types here.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/reverse"},set:{"!type":"fn(array: [number], offset?: number)","!doc":"The set() method stores multiple values in the typed array, reading input values from a specified array.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/set"},slice:{"!type":"fn(from: number, to?: number) -> +TypedArray","!doc":"Extracts a section of an array and returns a new array. See also Array.prototype.slice().","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/slice"},some:{"!type":"fn(test: fn(elt: number, i: number) -> bool, context?: ?) -> bool","!effects":["call !0 this=!1 number number"],"!doc":"The some() method tests whether some element in the typed array passes the test implemented by the provided function. This method has the same algorithm as Array.prototype.some(). TypedArray is one of the typed array types here.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/some"},sort:{"!type":"fn(compare?: fn(a: number, b: number) -> number)","!effects":["call !0 number number"],"!doc":"Sorts the elements of an array in place and returns the array. See also Array.prototype.sort().","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/sort"},subarray:{"!type":"fn(begin?: number, end?: number) -> +TypedArray","!doc":"The subarray() method returns a new TypedArray on the same ArrayBuffer store and with the same element types as for this TypedArray object. The begin offset is inclusive and the end offset is exclusive. TypedArray is one of the typed array types.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/subarray"},values:{"!type":"fn() -> +iter[:t=number]","!doc":"The values() method returns a new Array Iterator object that contains the values for each index in the array.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/values"},":Symbol.iterator":{"!type":"fn() -> +iter[:t=number]","!doc":"Returns a new Array Iterator object that contains the values for each index in the array.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/@@iterator"}}}},Array:{from:{"!type":"fn(arrayLike: ?, mapFn?: fn(elt: ?, i: number) -> ?, thisArg?: ?) -> [!0.<i>]","!effects":["call !1 this=!2 !0.<i> number"],"!doc":"The Array.from() method creates a new Array instance from an array-like or iterable object.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/from"},of:{"!type":"fn(elementN: ?) -> [!0]","!doc":"The Array.of() method creates a new Array instance with a variable number of arguments, regardless of number or type of the arguments.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/of"},prototype:{copyWithin:{"!type":"fn(target: number, start: number, end?: number) -> !this","!doc":"The copyWithin() method copies the sequence of array elements within the array to the position starting at target. The copy is taken from the index positions of the second and third arguments start and end.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/copyWithin"},entries:{"!type":"fn() -> +iter[:t=[number, !this.<i>]]","!doc":"The entries() method returns a new Array Iterator object that contains the key/value pairs for each index in the array.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/entries"},fill:{"!type":"fn(value: ?, start?: number, end?: number) -> !this","!doc":"The fill() method fills all the elements of an array from a start index to an end index with a static value.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/fill"},find:{"!type":"fn(callback: fn(element: ?, index: number, array: [?]) -> bool, thisArg?: ?) -> !this.<i>","!effects":["call !0 this=!2 !this.<i> number"],"!doc":"The find() method returns a value in the array, if an element in the array satisfies the provided testing function. Otherwise undefined is returned.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find"},findIndex:{"!type":"fn(callback: fn(element: ?, index: number, array: [?]), thisArg?: ?) -> number","!effects":["call !0 this=!2 !this.<i> number"],"!doc":"The findIndex() method returns an index in the array, if an element in the array satisfies the provided testing function. Otherwise -1 is returned.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/findIndex"},keys:{"!type":"fn() -> +iter[:t=number]","!doc":"The keys() method returns a new Array Iterator that contains the keys for each index in the array.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/keys"},values:{"!type":"fn() -> +iter[:t=!this.<i>]","!doc":"The values() method returns a new Array Iterator object that contains the values for each index in the array.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/values"},":Symbol.iterator":{"!type":"fn() -> +iter[:t=!this.<i>]","!doc":"Returns a new Array Iterator object that contains the values for each index in the array.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/@@iterator"}}},ArrayBuffer:{"!type":"fn(length: number)","!doc":"The ArrayBuffer object is used to represent a generic, fixed-length raw binary data buffer.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer",isView:{"!type":"fn(arg: +ArrayBuffer) -> bool","!doc":"The ArrayBuffer.isView() method returns true if arg is one of the ArrayBuffer views, such as typed array objects or a DataView; false otherwise.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer/isView"},prototype:{byteLength:{"!type":"number","!doc":"The byteLength accessor property represents the length of an ArrayBuffer in bytes.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer/byteLength"},slice:{"!type":"fn(begin: number, end?: number) -> +ArrayBuffer","!doc":"The slice() method returns a new ArrayBuffer whose contents are a copy of this ArrayBuffer's bytes from begin, inclusive, up to end, exclusive.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer/slice"}}},DataView:{"!type":"fn(buffer: +ArrayBuffer, byteOffset?: number, byteLength?: number)","!doc":"The DataView view provides a low-level interface for reading data from and writing it to an ArrayBuffer.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView",prototype:{buffer:{"!type":"+ArrayBuffer","!doc":"The buffer accessor property represents the ArrayBuffer referenced by the DataView at construction time.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView/buffer"},byteLength:{"!type":"number","!doc":"The byteLength accessor property represents the length (in bytes) of this view from the start of its ArrayBuffer.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView/byteLength"},byteOffset:{"!type":"number","!doc":"The byteOffset accessor property represents the offset (in bytes) of this view from the start of its ArrayBuffer.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView/byteOffset"},getFloat32:{"!type":"fn(byteOffset: number, littleEndian?: bool) -> number","!doc":"The getFloat32() method gets a signed 32-bit integer (float) at the specified byte offset from the start of the DataView.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView/getFloat32"},getFloat64:{"!type":"fn(byteOffset: number, littleEndian?: bool) -> number","!doc":"The getFloat64() method gets a signed 64-bit float (double) at the specified byte offset from the start of the DataView.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView/getFloat64"},getInt16:{"!type":"fn(byteOffset: number, littleEndian?: bool) -> number","!doc":"The getInt16() method gets a signed 16-bit integer (short) at the specified byte offset from the start of the DataView.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView/getInt16"},getInt32:{"!type":"fn(byteOffset: number, littleEndian?: bool) -> number","!doc":"The getInt32() method gets a signed 32-bit integer (long) at the specified byte offset from the start of the DataView.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView/getInt32"},getInt8:{"!type":"fn(byteOffset: number, littleEndian?: bool) -> number","!doc":"The getInt8() method gets a signed 8-bit integer (byte) at the specified byte offset from the start of the DataView.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView/getInt8"},getUint16:{"!type":"fn(byteOffset: number, littleEndian?: bool) -> number","!doc":"The getUint16() method gets an unsigned 16-bit integer (unsigned short) at the specified byte offset from the start of the DataView.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView/getUint16"},getUint32:{"!type":"fn(byteOffset: number, littleEndian?: bool) -> number","!doc":"The getUint32() method gets an unsigned 32-bit integer (unsigned long) at the specified byte offset from the start of the DataView.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView/getUint32"},getUint8:{"!type":"fn(byteOffset: number) -> number","!doc":"The getUint8() method gets an unsigned 8-bit integer (unsigned byte) at the specified byte offset from the start of the DataView.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView/getUint8"},setFloat32:{"!type":"fn(byteOffset: number, value: number, littleEndian?: bool)","!doc":"The setFloat32() method stores a signed 32-bit integer (float) value at the specified byte offset from the start of the DataView.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView/setFloat32"},setFloat64:{"!type":"fn(byteOffset: number, value: number, littleEndian?: bool)","!doc":"The setFloat64() method stores a signed 64-bit integer (double) value at the specified byte offset from the start of the DataView.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView/setFloat64"},setInt16:{"!type":"fn(byteOffset: number, value: number, littleEndian?: bool)","!doc":"The setInt16() method stores a signed 16-bit integer (short) value at the specified byte offset from the start of the DataView.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView/setInt16"},setInt32:{"!type":"fn(byteOffset: number, value: number, littleEndian?: bool)","!doc":"The setInt32() method stores a signed 32-bit integer (long) value at the specified byte offset from the start of the DataView.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView/setInt32"},setInt8:{"!type":"fn(byteOffset: number, value: number)","!doc":"The setInt8() method stores a signed 8-bit integer (byte) value at the specified byte offset from the start of the DataView.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView/setInt8"},setUint16:{"!type":"fn(byteOffset: number, value: number, littleEndian?: bool)","!doc":"The setUint16() method stores an unsigned 16-bit integer (unsigned short) value at the specified byte offset from the start of the DataView.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView/setUint16"},setUint32:{"!type":"fn(byteOffset: number, value: number, littleEndian?: bool)","!doc":"The setUint32() method stores an unsigned 32-bit integer (unsigned long) value at the specified byte offset from the start of the DataView.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView/setUint32"},setUint8:{"!type":"fn(byteOffset: number, value: number)","!doc":"The setUint8() method stores an unsigned 8-bit integer (byte) value at the specified byte offset from the start of the DataView.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView/setUint8"}}},Date:{prototype:{toJSON:{"!type":"fn() -> string","!doc":"Returns a string (using toISOString()) representing the Date object's value.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toJSON"}}},Float32Array:"TypedArray",Float64Array:"TypedArray",Int16Array:"TypedArray",Int32Array:"TypedArray",Int8Array:"TypedArray",Map:{"!type":"fn(iterable?: [?])","!doc":"The Map object is a simple key/value map. Any value (both objects and primitive values) may be used as either a key or a value.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map",prototype:{clear:{"!type":"fn()","!doc":"The clear() method removes all elements from a Map object.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/clear"},"delete":{"!type":"fn(key: ?)","!doc":"The delete() method removes the specified element from a Map object.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/delete"},entries:{"!type":"fn() -> +iter[:t=[!this.:key, !this.:value]]","!doc":"The entries() method returns a new Iterator object that contains the [key, value] pairs for each element in the Map object in insertion order.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/entries"},forEach:{"!type":"fn(callback: fn(value: ?, key: ?, map: +Map), thisArg?: ?)","!effects":["call !0 this=!1 !this.:value !this.:key !this"],"!doc":"The forEach() method executes a provided function once per each key/value pair in the Map object, in insertion order.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/forEach"},get:{"!type":"fn(key: ?) -> !this.:value","!doc":"The get() method returns a specified element from a Map object.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/get"},has:{"!type":"fn(key: ?) -> bool","!doc":"The has() method returns a boolean indicating whether an element with the specified key exists or not.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/has"},keys:{"!type":"fn() -> +iter[:t=!this.:key]","!doc":"The keys() method returns a new Iterator object that contains the keys for each element in the Map object in insertion order.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/keys"},set:{"!type":"fn(key: ?, value: ?) -> !this","!effects":["propagate !0 !this.:key","propagate !1 !this.:value"],"!doc":"The set() method adds a new element with a specified key and value to a Map object.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/set"},size:{"!type":"number","!doc":"The size accessor property returns the number of elements in a Map object.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/size"},values:{"!type":"fn() -> +iter[:t=!this.:value]","!doc":"The values() method returns a new Iterator object that contains the values for each element in the Map object in insertion order.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/values"},":Symbol.iterator":{"!type":"fn() -> +iter[:t=[!this.:key, !this.:value]]","!doc":"Returns a new Iterator object that contains the [key, value] pairs for each element in the Map object in insertion order.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/@@iterator"}}},Math:{acosh:{"!type":"fn(x: number) -> number","!doc":"The Math.acosh() function returns the hyperbolic arc-cosine of a number.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/acosh"},asinh:{"!type":"fn(x: number) -> number","!doc":"The Math.asinh() function returns the hyperbolic arcsine of a number.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/asinh"},atanh:{"!type":"fn(x: number) -> number","!doc":"The Math.atanh() function returns the hyperbolic arctangent of a number.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/atanh"},cbrt:{"!type":"fn(x: number) -> number","!doc":"The Math.cbrt() function returns the cube root of a number.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/cbrt"},clz32:{"!type":"fn(x: number) -> number","!doc":"The Math.clz32() function returns the number of leading zero bits in the 32-bit binary representation of a number.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/clz32"},cosh:{"!type":"fn(x: number) -> number","!doc":"The Math.cosh() function returns the hyperbolic cosine of a number, that can be expressed using the constant e:","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/cosh"},expm1:{"!type":"fn(x: number) -> number","!doc":"The Math.expm1() function returns ex - 1, where x is the argument, and e the base of the natural logarithms.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/expm1"},fround:{"!type":"fn(x: number) -> number","!doc":"The Math.fround() function returns the nearest single precision float representation of a number.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/fround"},hypot:{"!type":"fn(value: number) -> number","!doc":"The Math.hypot() function returns the square root of the sum of squares of its arguments.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/hypot"},imul:{"!type":"fn(a: number, b: number) -> number","!doc":"The Math.imul() function returns the result of the C-like 32-bit multiplication of the two parameters.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/imul"},log10:{"!type":"fn(x: number) -> number","!doc":"The Math.log10() function returns the base 10 logarithm of a number.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/log10"},log1p:{"!type":"fn(x: number) -> number","!doc":"The Math.log1p() function returns the natural logarithm (base e) of 1 + a number.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/log1p"},log2:{"!type":"fn(x: number) -> number","!doc":"The Math.log2() function returns the base 2 logarithm of a number.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/log2"},sign:{"!type":"fn(x: number) -> number","!doc":"The Math.sign() function returns the sign of a number, indicating whether the number is positive, negative or zero.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/sign"},sinh:{"!type":"fn(x: number) -> number","!doc":"The Math.sinh() function returns the hyperbolic sine of a number, that can be expressed using the constant e:","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/sinh"},tanh:{"!type":"fn(x: number) -> number","!doc":"The Math.tanh() function returns the hyperbolic tangent of a number.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/tanh"},trunc:{"!type":"fn(x: number) -> number","!doc":"The Math.trunc() function returns the integral part of a number by removing any fractional digits. It does not round any numbers. The function can be expressed with the floor() and ceil() function:","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/trunc"}},Number:{EPSILON:{"!type":"number","!doc":"The Number.EPSILON property represents the difference between one and the smallest value greater than one that can be represented as a Number.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/EPSILON"},MAX_SAFE_INTEGER:{"!type":"number","!doc":"The Number.MAX_SAFE_INTEGER constant represents the maximum safe integer in JavaScript (253 - 1).","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MAX_SAFE_INTEGER"},MIN_SAFE_INTEGER:{"!type":"number","!doc":"The Number.MIN_SAFE_INTEGER constant represents the minimum safe integer in JavaScript (-(253 - 1)).","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MIN_SAFE_INTEGER"},isFinite:{"!type":"fn(testValue: ?) -> bool","!doc":"The Number.isFinite() method determines whether the passed value is finite.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isFinite"},isInteger:{"!type":"fn(testValue: ?) -> bool","!doc":"The Number.isInteger() method determines whether the passed value is an integer.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isInteger"},isNaN:{"!type":"fn(testValue: ?) -> bool","!doc":"The Number.isNaN() method determines whether the passed value is NaN. More robust version of the original global isNaN().","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isNaN"},isSafeInteger:{"!type":"fn(testValue: ?) -> bool","!doc":"The Number.isSafeInteger() method determines whether the provided value is a number that is a safe integer. A safe integer is an integer that","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isSafeInteger"},parseFloat:{"!type":"fn(string: string) -> number","!doc":"The Number.parseFloat() method parses a string argument and returns a floating point number.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/parseFloat"},parseInt:{"!type":"fn(string: string, radix?: number) -> number","!doc":"The Number.parseInt() method parses a string argument and returns an integer of the specified radix or base.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/parseInt"}},Object:{assign:{"!type":"fn(target: ?, source: ?, source?: ?) -> !0","!effects":["copy !1 !0"],"!doc":"The Object.assign() method is used to copy the values of all enumerable own properties from one or more source objects to a target object. It will return the target object.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign"},getOwnPropertySymbols:{"!type":"fn(obj: ?) -> !custom:getOwnPropertySymbols","!doc":"The Object.getOwnPropertySymbols() method returns an array of all symbol properties found directly upon a given object.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertySymbols"},is:{"!type":"fn(value1: ?, value2: ?) -> bool","!doc":"The Object.is() method determines whether two values are the same value.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is"},setPrototypeOf:{"!type":"fn(obj: ?, prototype: ?)","!doc":"The Object.setPrototype() method sets the prototype (i.e., the internal [[Prototype]] property) of a specified object to another object or null.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/setPrototypeOf"}},Promise:{"!type":"fn(executor: fn(resolve: fn(value: ?), reject: fn(reason: ?))) -> !custom:Promise_ctor","!doc":"The Promise object is used for deferred and asynchronous computations. A Promise is in one of the three states:","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise",all:{"!type":"fn(iterable: [+Promise]) -> +Promise[:t=[!0.<i>.:t]]","!doc":"The Promise.all(iterable) method returns a promise that resolves when all of the promises in the iterable argument have resolved.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all"},race:{"!type":"fn(iterable: [+Promise]) -> !0.<i>","!doc":"The Promise.race(iterable) method returns a promise that resolves or rejects as soon as one of the promises in the iterable resolves or rejects, with the value or reason from that promise.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/race"},reject:"Promise_reject",resolve:{"!type":"fn(value: ?) -> +Promise[:t=!0]","!doc":"The Promise.resolve(value) method returns a Promise object that is resolved with the given value. If the value is a thenable (i.e. has a then method), the returned promise will 'follow' that thenable, adopting its eventual state; otherwise the returned promise will be fulfilled with the value.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/resolve"},prototype:"Promise.prototype"},Proxy:{"!type":"fn(target: ?, handler: Proxy_handler)","!doc":"The Proxy object is used to define the custom behavior in JavaScript fundamental operation (e.g. property lookup, assignment, enumeration, function invocation, etc).","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy",revocable:{"!type":"fn(target: ?, handler: Proxy_handler) -> Proxy_revocable","!doc":"The Proxy.revocable() method is used to create a revocable Proxy object.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/revocable"}},Reflect:{"!doc":"Reflect is a built-in object that provides methods for interceptable JavaScript operations.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect",apply:{"!type":"fn(target: fn(), thisArg?: ?, argumentList?: [?]) -> !0.!ret","!doc":"Calls a target function with arguments as specified.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/apply"},construct:{"!type":"fn(target: fn(), argumentList?: [?]) -> ?","!doc":"Acts like the new operator as a function. It is equivalent to calling new target(...args).","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/construct"},defineProperty:{"!type":"fn(target: ?, property: string, attributes: ?) -> bool","!doc":"The static Reflect.defineProperty() method is like Object.defineProperty() but returns a Boolean.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/defineProperty"},deleteProperty:{"!type":"fn(target: ?, property: string) -> bool","!doc":"Works like the delete operator as a function.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/deleteProperty"},enumerate:{"!type":"fn(target: ?) -> +iter[:t=string]","!doc":"Returns an iterator with the enumerable own and inherited properties of the target object.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/enumerate"},get:{"!type":"fn(target: ?, property: string) -> ?","!doc":"Gets a property from an object.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/get"},getOwnPropertyDescriptor:{"!type":"fn(target: ?, property: string) -> ?","!doc":"Returns a property descriptor of the given property if it exists on the object, undefined otherwise.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/getOwnPropertyDescriptor"},getPrototypeOf:{"!type":"fn(target: ?) -> ?","!doc":"Returns the prototype of the specified object.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/getPrototypeOf"},has:{"!type":"fn(target: ?, property: string) -> bool","!doc":"The static Reflect.has() method works like the in operator as a function.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/has"},isExtensible:{"!type":"fn(target: ?) -> bool","!doc":"Determines if an object is extensible (whether it can have new properties added to it).","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/isExtensible"},ownKeys:{"!type":"fn(target: ?) -> [string]","!doc":"Returns an array of the target object's own property keys.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/ownKeys"},preventExtensions:{"!type":"fn(target: ?) -> bool","!doc":"Prevents new properties from ever being added to an object.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/preventExtensions"},set:{"!type":"fn(target: ?, property: string, value: ?) -> bool","!doc":"Set a property on an object.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/set"},setPrototypeOf:{"!type":"fn(target: ?, prototype: ?) -> bool","!doc":"Sets the prototype of a specified object to another object or to null.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/setPrototypeOf"}},RegExp:{prototype:{flags:{"!type":"string","!doc":"The flags property returns a string consisting of the flags of the current regular expression object.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/flags"},sticky:{"!type":"bool","!doc":"The sticky property reflects whether or not the search is sticky (searches in strings only from the index indicated by the lastIndex property of this regular expression). sticky is a read-only property of an individual regular expression object.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/sticky"},unicode:{"!type":"bool","!doc":"The 'u' flag enables various Unicode-related features.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/unicode"}}},Set:{"!type":"fn(iterable?: [?])","!doc":"The Set object lets you store unique values of any type, whether primitive values or object references.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set",prototype:{add:{"!type":"fn(value: ?) -> !this","!effects":["propagate !0 !this.:t"],"!doc":"The add() method appends a new element with a specified value to the end of a Set object.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set/add"},clear:{"!type":"fn()","!doc":"The clear() method removes all elements from a Set object.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set/clear"},"delete":{"!type":"fn(value: ?) -> bool","!doc":"The delete() method removes the specified element from a Set object.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set/delete"},entries:{"!type":"fn() -> +iter[:t=[!this.:t]]","!doc":"The entries() method returns a new Iterator object that contains an array of [value, value] for each element in the Set object, in insertion order. For Set objects there is no key like in Map objects. However, to keep the API similar to the Map object, each entry has the same value for its key and value here, so that an array [value, value] is returned.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set/entries"},forEach:{"!type":"fn(callback: fn(value: ?, value2: ?, set: +Set), thisArg?: ?)","!effects":["call !0 this=!1 !this.:t number !this"],"!doc":"The forEach() method executes a provided function once per each value in the Set object, in insertion order.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set/forEach"},has:{"!type":"fn(value: ?) -> bool","!doc":"The has() method returns a boolean indicating whether an element with the specified value exists in a Set object or not.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set/has"},keys:{"!type":"fn() -> +iter[:t=!this.:t]","!doc":"The values() method returns a new Iterator object that contains the values for each element in the Set object in insertion order.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set/keys"},size:{"!type":"number","!doc":"The size accessor property returns the number of elements in a Set object.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set/size"},values:{"!type":"fn() -> +iter[:t=!this.:t]","!doc":"The values() method returns a new Iterator object that contains the values for each element in the Set object in insertion order.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set/values"},":Symbol.iterator":{"!type":"fn() -> +iter[:t=!this.:t]","!doc":"Returns a new Iterator object that contains the values for each element in the Set object in insertion order.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set/@@iterator"}}},String:{fromCodePoint:{"!type":"fn(point: number, point?: number) -> string","!doc":"The static String.fromCodePoint() method returns a string created by using the specified sequence of code points.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/fromCodePoint"},raw:{"!type":"fn(template: [string], substitutions: ?, templateString: ?) -> string","!doc":"The static String.raw() method is a tag function of template strings, used to get the raw string form of template strings.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/raw"},prototype:{codePointAt:{"!type":"fn(pos: number) -> number","!doc":"The codePointAt() method returns a non-negative integer that is the UTF-16 encoded code point value.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/codePointAt"},endsWith:{"!type":"fn(searchString: string, position?: number) -> bool","!doc":"The endsWith() method determines whether a string ends with the characters of another string, returning true or false as appropriate.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith"},includes:{"!type":"fn(searchString: string, position?: number) -> bool","!doc":"The includes() method determines whether one string may be found within another string, returning true or false as appropriate.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/contains"},normalize:{"!type":"fn(form: string) -> string","!doc":"The normalize() method returns the Unicode Normalization Form of a given string (if the value isn't a string, it will be converted to one first).","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize"},repeat:{"!type":"fn(count: number) -> string","!doc":"The repeat() method constructs and returns a new string which contains the specified number of copies of the string on which it was called, concatenated together.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/repeat"},startsWith:{"!type":"fn(searchString: string, position?: number) -> bool","!doc":"The startsWith() method determines whether a string begins with the characters of another string, returning true or false as appropriate.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith"},":Symbol.iterator":{"!type":"fn() -> +iter[:t=string]","!doc":"Returns a new Iterator object that iterates over the code points of a String value, returning each code point as a String value.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/@@iterator"}}},Symbol:{"!type":"fn(description?: string) -> !custom:getSymbol","!doc":"A symbol is a unique and immutable data type and may be used as an identifier for object properties. The symbol object is an implicit object wrapper for the symbol primitive data type.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol","for":{"!type":"fn(key: string) -> !custom:getSymbol","!doc":"The Symbol.for(key) method searches for existing symbols in a runtime-wide symbol registry with the given key and returns it if found. Otherwise a new symbol gets created in the global symbol registry with this key.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/for"},keyFor:{"!type":"fn(sym: +Symbol) -> string","!doc":"The Symbol.keyFor(sym) method retrieves a shared symbol key from the global symbol registry for the given symbol.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/keyFor"},hasInstance:":Symbol.hasInstance",isConcatSpreadable:":Symbol.isConcatSpreadable",iterator:":Symbol.iterator",keyFor:":Symbol.keyFor",match:":Symbol.match",replace:":Symbol.replace",search:":Symbol.search",species:":Symbol.species",split:":Symbol.split",toStringTag:":Symbol.toStringTag",unscopables:":Symbol.unscopables",prototype:{"!stdProto":"Symbol"}},Uint16Array:"TypedArray",Uint32Array:"TypedArray",Uint8Array:"TypedArray",Uint8ClampedArray:"TypedArray",WeakMap:{"!type":"fn(iterable?: [?])","!doc":"The WeakMap object is a collection of key/value pairs in which the keys are objects and the values can be arbitrary values.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakMap",prototype:{"delete":{"!type":"fn(key: ?) -> bool","!doc":"The delete() method removes the specified element from a WeakMap object.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakMap/delete"},get:{"!type":"fn(key: ?) -> !this.:value","!doc":"The get() method returns a specified element from a WeakMap object.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakMap/get"},has:{"!type":"fn(key: ?) -> bool","!doc":"The has() method returns a boolean indicating whether an element with the specified key exists in the WeakMap object or not.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakMap/has"},set:{"!type":"fn(key: ?, value: ?)","!effects":["propagate !0 !this.:key","propagate !1 !this.:value"],"!doc":"The set() method adds a new element with a specified key and value to a WeakMap object.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakMap/set"}}},WeakSet:{"!type":"fn(iterable?: [?])","!doc":"The WeakSet object lets you store weakly held objects in a collection.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakSet",prototype:{add:{"!type":"fn(value: ?)","!doc":"The add() method appends a new object to the end of a WeakSet object.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakSet/add"},"delete":{"!type":"fn(value: ?) -> bool","!doc":"The delete() method removes the specified element from a WeakSet object.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakSet/delete"},has:{"!type":"fn(value: ?) -> bool","!doc":"The has() method returns a boolean indicating whether an object exists in a WeakSet or not.","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakSet/has"}}}}
}),define("json!tern/defs/ecma7.json",function(){return{"!name":"ecma7",Array:{prototype:{includes:{"!type":"fn(value: ?) -> bool","!url":"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/includes","!doc":"Determines whether an array includes a certain element, returning true or false as appropriate."}}}}}),define("json!tern/defs/browser.json",function(){return{"!name":"browser",location:{assign:{"!type":"fn(url: string)","!url":"https://developer.mozilla.org/en/docs/DOM/window.location","!doc":"Load the document at the provided URL."},replace:{"!type":"fn(url: string)","!url":"https://developer.mozilla.org/en/docs/DOM/window.location","!doc":"Replace the current document with the one at the provided URL. The difference from the assign() method is that after using replace() the current page will not be saved in session history, meaning the user won't be able to use the Back button to navigate to it."},reload:{"!type":"fn()","!url":"https://developer.mozilla.org/en/docs/DOM/window.location","!doc":"Reload the document from the current URL. forceget is a boolean, which, when it is true, causes the page to always be reloaded from the server. If it is false or not specified, the browser may reload the page from its cache."},origin:{"!type":"string","!url":"https://developer.mozilla.org/en/docs/DOM/window.location","!doc":"The origin of the URL."},hash:{"!type":"string","!url":"https://developer.mozilla.org/en/docs/DOM/window.location","!doc":"The part of the URL that follows the # symbol, including the # symbol."},search:{"!type":"string","!url":"https://developer.mozilla.org/en/docs/DOM/window.location","!doc":"The part of the URL that follows the ? symbol, including the ? symbol."},pathname:{"!type":"string","!url":"https://developer.mozilla.org/en/docs/DOM/window.location","!doc":"The path (relative to the host)."},port:{"!type":"string","!url":"https://developer.mozilla.org/en/docs/DOM/window.location","!doc":"The port number of the URL."},hostname:{"!type":"string","!url":"https://developer.mozilla.org/en/docs/DOM/window.location","!doc":"The host name (without the port number or square brackets)."},host:{"!type":"string","!url":"https://developer.mozilla.org/en/docs/DOM/window.location","!doc":"The host name and port number."},protocol:{"!type":"string","!url":"https://developer.mozilla.org/en/docs/DOM/window.location","!doc":"The protocol of the URL."},href:{"!type":"string","!url":"https://developer.mozilla.org/en/docs/DOM/window.location","!doc":"The entire URL."},"!url":"https://developer.mozilla.org/en/docs/DOM/window.location","!doc":"Returns a location object with information about the current location of the document. Assigning to the location property changes the current page to the new address."},Node:{"!type":"fn()",prototype:{parentElement:{"!type":"+Element","!url":"https://developer.mozilla.org/en/docs/DOM/Node.parentElement","!doc":"Returns the DOM node's parent Element, or null if the node either has no parent, or its parent isn't a DOM Element."},textContent:{"!type":"string","!url":"https://developer.mozilla.org/en/docs/DOM/Node.textContent","!doc":"Gets or sets the text content of a node and its descendants."},baseURI:{"!type":"string","!url":"https://developer.mozilla.org/en/docs/DOM/Node.baseURI","!doc":"The absolute base URI of a node or null if unable to obtain an absolute URI."},localName:{"!type":"string","!url":"https://developer.mozilla.org/en/docs/DOM/Node.localName","!doc":"Returns the local part of the qualified name of this node."},prefix:{"!type":"string","!url":"https://developer.mozilla.org/en/docs/DOM/Node.prefix","!doc":"Returns the namespace prefix of the specified node, or null if no prefix is specified. This property is read only."},namespaceURI:{"!type":"string","!url":"https://developer.mozilla.org/en/docs/DOM/Node.namespaceURI","!doc":"The namespace URI of the node, or null if the node is not in a namespace (read-only). When the node is a document, it returns the XML namespace for the current document."},ownerDocument:{"!type":"+Document","!url":"https://developer.mozilla.org/en/docs/DOM/Node.ownerDocument","!doc":"The ownerDocument property returns the top-level document object for this node."},attributes:{"!type":"+NamedNodeMap","!url":"https://developer.mozilla.org/en/docs/DOM/Node.attributes","!doc":"A collection of all attribute nodes registered to the specified node. It is a NamedNodeMap,not an Array, so it has no Array methods and the Attr nodes' indexes may differ among browsers."},nextSibling:{"!type":"+Node","!url":"https://developer.mozilla.org/en/docs/DOM/Node.nextSibling","!doc":"Returns the node immediately following the specified one in its parent's childNodes list, or null if the specified node is the last node in that list."},previousSibling:{"!type":"+Node","!url":"https://developer.mozilla.org/en/docs/DOM/Node.previousSibling","!doc":"Returns the node immediately preceding the specified one in its parent's childNodes list, null if the specified node is the first in that list."},lastChild:{"!type":"+Node","!url":"https://developer.mozilla.org/en/docs/DOM/Node.lastChild","!doc":"Returns the last child of a node."},firstChild:{"!type":"+Node","!url":"https://developer.mozilla.org/en/docs/DOM/Node.firstChild","!doc":"Returns the node's first child in the tree, or null if the node is childless. If the node is a Document, it returns the first node in the list of its direct children."},childNodes:{"!type":"+NodeList","!url":"https://developer.mozilla.org/en/docs/DOM/Node.childNodes","!doc":"Returns a collection of child nodes of the given element."},parentNode:{"!type":"+Node","!url":"https://developer.mozilla.org/en/docs/DOM/Node.parentNode","!doc":"Returns the parent of the specified node in the DOM tree."},nodeType:{"!type":"number","!url":"https://developer.mozilla.org/en/docs/DOM/Node.nodeType","!doc":"Returns an integer code representing the type of the node."},nodeValue:{"!type":"string","!url":"https://developer.mozilla.org/en/docs/DOM/Node.nodeValue","!doc":"Returns or sets the value of the current node."},nodeName:{"!type":"string","!url":"https://developer.mozilla.org/en/docs/DOM/Node.nodeName","!doc":"Returns the name of the current node as a string."},tagName:{"!type":"string","!url":"https://developer.mozilla.org/en/docs/DOM/Node.nodeName","!doc":"Returns the name of the current node as a string."},insertBefore:{"!type":"fn(newElt: +Element, before: +Element) -> +Element","!url":"https://developer.mozilla.org/en/docs/DOM/Node.insertBefore","!doc":"Inserts the specified node before a reference element as a child of the current node."},replaceChild:{"!type":"fn(newChild: +Node, oldChild: +Node) -> +Node","!url":"https://developer.mozilla.org/en/docs/DOM/Node.replaceChild","!doc":"Replaces one child node of the specified element with another."},removeChild:{"!type":"fn(oldNode: +Node) -> +Node","!url":"https://developer.mozilla.org/en/docs/DOM/Node.removeChild","!doc":"Removes a child node from the DOM. Returns removed node."},appendChild:{"!type":"fn(newNode: +Node) -> +Node","!url":"https://developer.mozilla.org/en/docs/DOM/Node.appendChild","!doc":"Adds a node to the end of the list of children of a specified parent node. If the node already exists it is removed from current parent node, then added to new parent node."},hasChildNodes:{"!type":"fn() -> bool","!url":"https://developer.mozilla.org/en/docs/DOM/Node.hasChildNodes","!doc":"Returns a Boolean value indicating whether the current Node has child nodes or not."},cloneNode:{"!type":"fn(deep: bool) -> +Element","!url":"https://developer.mozilla.org/en/docs/DOM/Node.cloneNode","!doc":"Returns a duplicate of the node on which this method was called."},normalize:{"!type":"fn()","!url":"https://developer.mozilla.org/en/docs/DOM/Node.normalize","!doc":'Puts the specified node and all of its subtree into a "normalized" form. In a normalized subtree, no text nodes in the subtree are empty and there are no adjacent text nodes.'},isSupported:{"!type":"fn(features: string, version: number) -> bool","!url":"https://developer.mozilla.org/en/docs/DOM/Node.isSupported","!doc":"Tests whether the DOM implementation implements a specific feature and that feature is supported by this node."},hasAttributes:{"!type":"fn() -> bool","!url":"https://developer.mozilla.org/en/docs/DOM/Node.hasAttributes","!doc":"Returns a boolean value of true or false, indicating if the current element has any attributes or not."},lookupPrefix:{"!type":"fn(uri: string) -> string","!url":"https://developer.mozilla.org/en/docs/DOM/Node.lookupPrefix","!doc":"Returns the prefix for a given namespaceURI if present, and null if not. When multiple prefixes are possible, the result is implementation-dependent."},isDefaultNamespace:{"!type":"fn(uri: string) -> bool","!url":"https://developer.mozilla.org/en/docs/DOM/Node.isDefaultNamespace","!doc":"Accepts a namespace URI as an argument and returns true if the namespace is the default namespace on the given node or false if not."},lookupNamespaceURI:{"!type":"fn(uri: string) -> string","!url":"https://developer.mozilla.org/en/docs/DOM/Node.lookupNamespaceURI","!doc":"Takes a prefix and returns the namespaceURI associated with it on the given node if found (and null if not). Supplying null for the prefix will return the default namespace."},addEventListener:{"!type":"fn(type: string, listener: fn(e: +Event), capture: bool)","!url":"https://developer.mozilla.org/en/docs/DOM/EventTarget.addEventListener","!doc":"Registers a single event listener on a single target. The event target may be a single element in a document, the document itself, a window, or an XMLHttpRequest."},removeEventListener:{"!type":"fn(type: string, listener: fn(), capture: bool)","!url":"https://developer.mozilla.org/en/docs/DOM/EventTarget.removeEventListener","!doc":"Allows the removal of event listeners from the event target."},isSameNode:{"!type":"fn(other: +Node) -> bool","!url":"https://developer.mozilla.org/en/docs/DOM/Node.isSameNode","!doc":"Tests whether two nodes are the same, that is they reference the same object."},isEqualNode:{"!type":"fn(other: +Node) -> bool","!url":"https://developer.mozilla.org/en/docs/DOM/Node.isEqualNode","!doc":"Tests whether two nodes are equal."},compareDocumentPosition:{"!type":"fn(other: +Node) -> number","!url":"https://developer.mozilla.org/en/docs/DOM/Node.compareDocumentPosition","!doc":"Compares the position of the current node against another node in any other document."},contains:{"!type":"fn(other: +Node) -> bool","!url":"https://developer.mozilla.org/en/docs/DOM/Node.contains","!doc":"Indicates whether a node is a descendent of a given node."},dispatchEvent:{"!type":"fn(event: +Event) -> bool","!url":"https://developer.mozilla.org/en/docs/DOM/EventTarget.dispatchEvent","!doc":"Dispatches an event into the event system. The event is subject to the same capturing and bubbling behavior as directly dispatched events."},ELEMENT_NODE:"number",ATTRIBUTE_NODE:"number",TEXT_NODE:"number",CDATA_SECTION_NODE:"number",ENTITY_REFERENCE_NODE:"number",ENTITY_NODE:"number",PROCESSING_INSTRUCTION_NODE:"number",COMMENT_NODE:"number",DOCUMENT_NODE:"number",DOCUMENT_TYPE_NODE:"number",DOCUMENT_FRAGMENT_NODE:"number",NOTATION_NODE:"number",DOCUMENT_POSITION_DISCONNECTED:"number",DOCUMENT_POSITION_PRECEDING:"number",DOCUMENT_POSITION_FOLLOWING:"number",DOCUMENT_POSITION_CONTAINS:"number",DOCUMENT_POSITION_CONTAINED_BY:"number",DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC:"number"},"!url":"https://developer.mozilla.org/en/docs/DOM/Node","!doc":"A Node is an interface from which a number of DOM types inherit, and allows these various types to be treated (or tested) similarly."},Element:{"!type":"fn()",prototype:{"!proto":"Node.prototype",getAttribute:{"!type":"fn(name: string) -> string","!url":"https://developer.mozilla.org/en/docs/DOM/element.getAttribute","!doc":'Returns the value of the named attribute on the specified element. If the named attribute does not exist, the value returned will either be null or "" (the empty string).'},setAttribute:{"!type":"fn(name: string, value: string)","!url":"https://developer.mozilla.org/en/docs/DOM/element.setAttribute","!doc":"Adds a new attribute or changes the value of an existing attribute on the specified element."},removeAttribute:{"!type":"fn(name: string)","!url":"https://developer.mozilla.org/en/docs/DOM/element.removeAttribute","!doc":"Removes an attribute from the specified element."},getAttributeNode:{"!type":"fn(name: string) -> +Attr","!url":"https://developer.mozilla.org/en/docs/DOM/element.getAttributeNode","!doc":"Returns the specified attribute of the specified element, as an Attr node."},getElementsByTagName:{"!type":"fn(tagName: string) -> +NodeList","!url":"https://developer.mozilla.org/en/docs/DOM/element.getElementsByTagName","!doc":"Returns a list of elements with the given tag name. The subtree underneath the specified element is searched, excluding the element itself. The returned list is live, meaning that it updates itself with the DOM tree automatically. Consequently, there is no need to call several times element.getElementsByTagName with the same element and arguments."},getElementsByTagNameNS:{"!type":"fn(ns: string, tagName: string) -> +NodeList","!url":"https://developer.mozilla.org/en/docs/DOM/element.getElementsByTagNameNS","!doc":"Returns a list of elements with the given tag name belonging to the given namespace."},getAttributeNS:{"!type":"fn(ns: string, name: string) -> string","!url":"https://developer.mozilla.org/en/docs/DOM/element.getAttributeNS","!doc":'Returns the string value of the attribute with the specified namespace and name. If the named attribute does not exist, the value returned will either be null or "" (the empty string).'},setAttributeNS:{"!type":"fn(ns: string, name: string, value: string)","!url":"https://developer.mozilla.org/en/docs/DOM/element.setAttributeNS","!doc":"Adds a new attribute or changes the value of an attribute with the given namespace and name."},removeAttributeNS:{"!type":"fn(ns: string, name: string)","!url":"https://developer.mozilla.org/en/docs/DOM/element.removeAttributeNS","!doc":"removeAttributeNS removes the specified attribute from an element."},getAttributeNodeNS:{"!type":"fn(ns: string, name: string) -> +Attr","!url":"https://developer.mozilla.org/en/docs/DOM/element.getAttributeNodeNS","!doc":"Returns the Attr node for the attribute with the given namespace and name."},hasAttribute:{"!type":"fn(name: string) -> bool","!url":"https://developer.mozilla.org/en/docs/DOM/element.hasAttribute","!doc":"hasAttribute returns a boolean value indicating whether the specified element has the specified attribute or not."},hasAttributeNS:{"!type":"fn(ns: string, name: string) -> bool","!url":"https://developer.mozilla.org/en/docs/DOM/element.hasAttributeNS","!doc":"hasAttributeNS returns a boolean value indicating whether the current element has the specified attribute."},focus:{"!type":"fn()","!url":"https://developer.mozilla.org/en/docs/DOM/element.focus","!doc":"Sets focus on the specified element, if it can be focused."},blur:{"!type":"fn()","!url":"https://developer.mozilla.org/en/docs/DOM/element.blur","!doc":"The blur method removes keyboard focus from the current element."},scrollIntoView:{"!type":"fn(top: bool)","!url":"https://developer.mozilla.org/en/docs/DOM/element.scrollIntoView","!doc":"The scrollIntoView() method scrolls the element into view."},scrollByLines:{"!type":"fn(lines: number)","!url":"https://developer.mozilla.org/en/docs/DOM/window.scrollByLines","!doc":"Scrolls the document by the given number of lines."},scrollByPages:{"!type":"fn(pages: number)","!url":"https://developer.mozilla.org/en/docs/DOM/window.scrollByPages","!doc":"Scrolls the current document by the specified number of pages."},getElementsByClassName:{"!type":"fn(name: string) -> +NodeList","!url":"https://developer.mozilla.org/en/docs/DOM/document.getElementsByClassName","!doc":"Returns a set of elements which have all the given class names. When called on the document object, the complete document is searched, including the root node. You may also call getElementsByClassName on any element; it will return only elements which are descendants of the specified root element with the given class names."},querySelector:{"!type":"fn(selectors: string) -> +Element","!url":"https://developer.mozilla.org/en/docs/DOM/Element.querySelector","!doc":"Returns the first element that is a descendent of the element on which it is invoked that matches the specified group of selectors."},querySelectorAll:{"!type":"fn(selectors: string) -> +NodeList","!url":"https://developer.mozilla.org/en/docs/DOM/Element.querySelectorAll","!doc":"Returns a non-live NodeList of all elements descended from the element on which it is invoked that match the specified group of CSS selectors."},getClientRects:{"!type":"fn() -> [+ClientRect]","!url":"https://developer.mozilla.org/en/docs/DOM/element.getClientRects","!doc":"Returns a collection of rectangles that indicate the bounding rectangles for each box in a client."},getBoundingClientRect:{"!type":"fn() -> +ClientRect","!url":"https://developer.mozilla.org/en/docs/DOM/element.getBoundingClientRect","!doc":"Returns a text rectangle object that encloses a group of text rectangles."},setAttributeNode:{"!type":"fn(attr: +Attr) -> +Attr","!url":"https://developer.mozilla.org/en/docs/DOM/element.setAttributeNode","!doc":"Adds a new Attr node to the specified element."},removeAttributeNode:{"!type":"fn(attr: +Attr) -> +Attr","!url":"https://developer.mozilla.org/en/docs/DOM/element.removeAttributeNode","!doc":"Removes the specified attribute from the current element."},setAttributeNodeNS:{"!type":"fn(attr: +Attr) -> +Attr","!url":"https://developer.mozilla.org/en/docs/DOM/element.setAttributeNodeNS","!doc":"Adds a new namespaced attribute node to an element."},insertAdjacentHTML:{"!type":"fn(position: string, text: string)","!url":"https://developer.mozilla.org/en/docs/DOM/element.insertAdjacentHTML","!doc":"Parses the specified text as HTML or XML and inserts the resulting nodes into the DOM tree at a specified position. It does not reparse the element it is being used on and thus it does not corrupt the existing elements inside the element. This, and avoiding the extra step of serialization make it much faster than direct innerHTML manipulation."},children:{"!type":"+HTMLCollection","!url":"https://developer.mozilla.org/en/docs/DOM/Element.children","!doc":"Returns a collection of child elements of the given element."},childElementCount:{"!type":"number","!url":"https://developer.mozilla.org/en/docs/DOM/Element.childElementCount","!doc":"Returns the number of child elements of the given element."},className:{"!type":"string","!url":"https://developer.mozilla.org/en/docs/DOM/element.className","!doc":"Gets and sets the value of the class attribute of the specified element."},style:{cssText:"string",alignmentBaseline:"string",background:"string",backgroundAttachment:"string",backgroundClip:"string",backgroundColor:"string",backgroundImage:"string",backgroundOrigin:"string",backgroundPosition:"string",backgroundPositionX:"string",backgroundPositionY:"string",backgroundRepeat:"string",backgroundRepeatX:"string",backgroundRepeatY:"string",backgroundSize:"string",baselineShift:"string",border:"string",borderBottom:"string",borderBottomColor:"string",borderBottomLeftRadius:"string",borderBottomRightRadius:"string",borderBottomStyle:"string",borderBottomWidth:"string",borderCollapse:"string",borderColor:"string",borderImage:"string",borderImageOutset:"string",borderImageRepeat:"string",borderImageSlice:"string",borderImageSource:"string",borderImageWidth:"string",borderLeft:"string",borderLeftColor:"string",borderLeftStyle:"string",borderLeftWidth:"string",borderRadius:"string",borderRight:"string",borderRightColor:"string",borderRightStyle:"string",borderRightWidth:"string",borderSpacing:"string",borderStyle:"string",borderTop:"string",borderTopColor:"string",borderTopLeftRadius:"string",borderTopRightRadius:"string",borderTopStyle:"string",borderTopWidth:"string",borderWidth:"string",bottom:"string",boxShadow:"string",boxSizing:"string",captionSide:"string",clear:"string",clip:"string",clipPath:"string",clipRule:"string",color:"string",colorInterpolation:"string",colorInterpolationFilters:"string",colorProfile:"string",colorRendering:"string",content:"string",counterIncrement:"string",counterReset:"string",cursor:"string",direction:"string",display:"string",dominantBaseline:"string",emptyCells:"string",enableBackground:"string",fill:"string",fillOpacity:"string",fillRule:"string",filter:"string","float":"string",floodColor:"string",floodOpacity:"string",font:"string",fontFamily:"string",fontSize:"string",fontStretch:"string",fontStyle:"string",fontVariant:"string",fontWeight:"string",glyphOrientationHorizontal:"string",glyphOrientationVertical:"string",height:"string",imageRendering:"string",kerning:"string",left:"string",letterSpacing:"string",lightingColor:"string",lineHeight:"string",listStyle:"string",listStyleImage:"string",listStylePosition:"string",listStyleType:"string",margin:"string",marginBottom:"string",marginLeft:"string",marginRight:"string",marginTop:"string",marker:"string",markerEnd:"string",markerMid:"string",markerStart:"string",mask:"string",maxHeight:"string",maxWidth:"string",minHeight:"string",minWidth:"string",opacity:"string",orphans:"string",outline:"string",outlineColor:"string",outlineOffset:"string",outlineStyle:"string",outlineWidth:"string",overflow:"string",overflowWrap:"string",overflowX:"string",overflowY:"string",padding:"string",paddingBottom:"string",paddingLeft:"string",paddingRight:"string",paddingTop:"string",page:"string",pageBreakAfter:"string",pageBreakBefore:"string",pageBreakInside:"string",pointerEvents:"string",position:"string",quotes:"string",resize:"string",right:"string",shapeRendering:"string",size:"string",speak:"string",src:"string",stopColor:"string",stopOpacity:"string",stroke:"string",strokeDasharray:"string",strokeDashoffset:"string",strokeLinecap:"string",strokeLinejoin:"string",strokeMiterlimit:"string",strokeOpacity:"string",strokeWidth:"string",tabSize:"string",tableLayout:"string",textAlign:"string",textAnchor:"string",textDecoration:"string",textIndent:"string",textLineThrough:"string",textLineThroughColor:"string",textLineThroughMode:"string",textLineThroughStyle:"string",textLineThroughWidth:"string",textOverflow:"string",textOverline:"string",textOverlineColor:"string",textOverlineMode:"string",textOverlineStyle:"string",textOverlineWidth:"string",textRendering:"string",textShadow:"string",textTransform:"string",textUnderline:"string",textUnderlineColor:"string",textUnderlineMode:"string",textUnderlineStyle:"string",textUnderlineWidth:"string",top:"string",unicodeBidi:"string",unicodeRange:"string",vectorEffect:"string",verticalAlign:"string",visibility:"string",whiteSpace:"string",width:"string",wordBreak:"string",wordSpacing:"string",wordWrap:"string",writingMode:"string",zIndex:"string",zoom:"string","!url":"https://developer.mozilla.org/en/docs/DOM/element.style","!doc":"Returns an object that represents the element's style attribute."},classList:{"!type":"+DOMTokenList","!url":"https://developer.mozilla.org/en/docs/DOM/element.classList","!doc":"Returns a token list of the class attribute of the element."},contentEditable:{"!type":"bool","!url":"https://developer.mozilla.org/en/docs/DOM/Element.contentEditable","!doc":"Indicates whether or not the element is editable."},firstElementChild:{"!type":"+Element","!url":"https://developer.mozilla.org/en/docs/DOM/Element.firstElementChild","!doc":"Returns the element's first child element or null if there are no child elements."},lastElementChild:{"!type":"+Element","!url":"https://developer.mozilla.org/en/docs/DOM/Element.lastElementChild","!doc":"Returns the element's last child element or null if there are no child elements."},nextElementSibling:{"!type":"+Element","!url":"https://developer.mozilla.org/en/docs/DOM/Element.nextElementSibling","!doc":"Returns the element immediately following the specified one in its parent's children list, or null if the specified element is the last one in the list."},previousElementSibling:{"!type":"+Element","!url":"https://developer.mozilla.org/en/docs/DOM/Element.previousElementSibling","!doc":"Returns the element immediately prior to the specified one in its parent's children list, or null if the specified element is the first one in the list."},tabIndex:{"!type":"number","!url":"https://developer.mozilla.org/en/docs/DOM/element.tabIndex","!doc":"Gets/sets the tab order of the current element."},title:{"!type":"string","!url":"https://developer.mozilla.org/en/docs/DOM/element.title","!doc":"Establishes the text to be displayed in a 'tool tip' popup when the mouse is over the displayed node."},width:{"!type":"number","!url":"https://developer.mozilla.org/en/docs/DOM/element.offsetWidth","!doc":"Returns the layout width of an element."},height:{"!type":"number","!url":"https://developer.mozilla.org/en/docs/DOM/element.offsetHeight","!doc":"Height of an element relative to the element's offsetParent."},getContext:{"!type":"fn(id: string) -> CanvasRenderingContext2D","!url":"https://developer.mozilla.org/en/docs/DOM/HTMLCanvasElement","!doc":"DOM canvas elements expose the HTMLCanvasElement interface, which provides properties and methods for manipulating the layout and presentation of canvas elements. The HTMLCanvasElement interface inherits the properties and methods of the element object interface."},supportsContext:"fn(id: string) -> bool",oncopy:{"!type":"?","!url":"https://developer.mozilla.org/en/docs/DOM/element.oncopy","!doc":"The oncopy property returns the onCopy event handler code on the current element."},oncut:{"!type":"?","!url":"https://developer.mozilla.org/en/docs/DOM/element.oncut","!doc":"The oncut property returns the onCut event handler code on the current element."},onpaste:{"!type":"?","!url":"https://developer.mozilla.org/en/docs/DOM/element.onpaste","!doc":"The onpaste property returns the onPaste event handler code on the current element."},onbeforeunload:{"!type":"?","!url":"https://developer.mozilla.org/en/docs/HTML/Element/body","!doc":"The HTML <body> element represents the main content of an HTML document. There is only one <body> element in a document."},onfocus:{"!type":"?","!url":"https://developer.mozilla.org/en/docs/DOM/element.onfocus","!doc":"The onfocus property returns the onFocus event handler code on the current element."},onblur:{"!type":"?","!url":"https://developer.mozilla.org/en/docs/DOM/element.onblur","!doc":"The onblur property returns the onBlur event handler code, if any, that exists on the current element."},onchange:{"!type":"?","!url":"https://developer.mozilla.org/en/docs/DOM/element.onchange","!doc":"The onchange property sets and returns the onChange event handler code for the current element."},onclick:{"!type":"?","!url":"https://developer.mozilla.org/en/docs/DOM/element.onclick","!doc":"The onclick property returns the onClick event handler code on the current element."},ondblclick:{"!type":"?","!url":"https://developer.mozilla.org/en/docs/DOM/element.ondblclick","!doc":"The ondblclick property returns the onDblClick event handler code on the current element."},onmousedown:{"!type":"?","!url":"https://developer.mozilla.org/en/docs/DOM/element.onmousedown","!doc":"The onmousedown property returns the onMouseDown event handler code on the current element."},onmouseup:{"!type":"?","!url":"https://developer.mozilla.org/en/docs/DOM/element.onmouseup","!doc":"The onmouseup property returns the onMouseUp event handler code on the current element."},onmousewheel:{"!type":"?","!url":"https://developer.mozilla.org/en/docs/DOM/Mozilla_event_reference/wheel","!doc":"The wheel event is fired when a wheel button of a pointing device (usually a mouse) is rotated. This event deprecates the legacy mousewheel event."},onmouseover:{"!type":"?","!url":"https://developer.mozilla.org/en/docs/DOM/element.onmouseover","!doc":"The onmouseover property returns the onMouseOver event handler code on the current element."},onmouseout:{"!type":"?","!url":"https://developer.mozilla.org/en/docs/DOM/element.onmouseout","!doc":"The onmouseout property returns the onMouseOut event handler code on the current element."},onmousemove:{"!type":"?","!url":"https://developer.mozilla.org/en/docs/DOM/element.onmousemove","!doc":"The onmousemove property returns the mousemove event handler code on the current element."},oncontextmenu:{"!type":"?","!url":"https://developer.mozilla.org/en/docs/DOM/window.oncontextmenu","!doc":'An event handler property for right-click events on the window. Unless the default behavior is prevented, the browser context menu will activate. Note that this event will occur with any non-disabled right-click event and does not depend on an element possessing the "contextmenu" attribute.'},onkeydown:{"!type":"?","!url":"https://developer.mozilla.org/en/docs/DOM/element.onkeydown","!doc":"The onkeydown property returns the onKeyDown event handler code on the current element."},onkeyup:{"!type":"?","!url":"https://developer.mozilla.org/en/docs/DOM/element.onkeyup","!doc":"The onkeyup property returns the onKeyUp event handler code for the current element."},onkeypress:{"!type":"?","!url":"https://developer.mozilla.org/en/docs/DOM/element.onkeypress","!doc":"The onkeypress property sets and returns the onKeyPress event handler code for the current element."},onresize:{"!type":"?","!url":"https://developer.mozilla.org/en/docs/DOM/element.onresize","!doc":"onresize returns the element's onresize event handler code. It can also be used to set the code to be executed when the resize event occurs."},onscroll:{"!type":"?","!url":"https://developer.mozilla.org/en/docs/DOM/element.onscroll","!doc":"The onscroll property returns the onScroll event handler code on the current element."},ondragstart:{"!type":"?","!url":"https://developer.mozilla.org/en/docs/DragDrop/Drag_Operations","!doc":"The following describes the steps that occur during a drag and drop operation."},ondragover:{"!type":"?","!url":"https://developer.mozilla.org/en/docs/DOM/Mozilla_event_reference/dragover","!doc":"The dragover event is fired when an element or text selection is being dragged over a valid drop target (every few hundred milliseconds)."},ondragleave:{"!type":"?","!url":"https://developer.mozilla.org/en/docs/DOM/Mozilla_event_reference/dragleave","!doc":"The dragleave event is fired when a dragged element or text selection leaves a valid drop target."},ondragenter:{"!type":"?","!url":"https://developer.mozilla.org/en/docs/DOM/Mozilla_event_reference/dragenter","!doc":"The dragenter event is fired when a dragged element or text selection enters a valid drop target."},ondragend:{"!type":"?","!url":"https://developer.mozilla.org/en/docs/DOM/Mozilla_event_reference/dragend","!doc":"The dragend event is fired when a drag operation is being ended (by releasing a mouse button or hitting the escape key)."},ondrag:{"!type":"?","!url":"https://developer.mozilla.org/en/docs/DOM/Mozilla_event_reference/drag","!doc":"The drag event is fired when an element or text selection is being dragged (every few hundred milliseconds)."},offsetTop:{"!type":"number","!url":"https://developer.mozilla.org/en/docs/DOM/element.offsetTop","!doc":"Returns the distance of the current element relative to the top of the offsetParent node."},offsetLeft:{"!type":"number","!url":"https://developer.mozilla.org/en/docs/DOM/element.offsetLeft","!doc":"Returns the number of pixels that the upper left corner of the current element is offset to the left within the offsetParent node."},offsetHeight:{"!type":"number","!url":"https://developer.mozilla.org/en/docs/DOM/element.offsetHeight","!doc":"Height of an element relative to the element's offsetParent."},offsetWidth:{"!type":"number","!url":"https://developer.mozilla.org/en/docs/DOM/element.offsetWidth","!doc":"Returns the layout width of an element."},scrollTop:{"!type":"number","!url":"https://developer.mozilla.org/en/docs/DOM/element.scrollTop","!doc":"Gets or sets the number of pixels that the content of an element is scrolled upward."},scrollLeft:{"!type":"number","!url":"https://developer.mozilla.org/en/docs/DOM/element.scrollLeft","!doc":"Gets or sets the number of pixels that an element's content is scrolled to the left."},scrollHeight:{"!type":"number","!url":"https://developer.mozilla.org/en/docs/DOM/element.scrollHeight","!doc":"Height of the scroll view of an element; it includes the element padding but not its margin."},scrollWidth:{"!type":"number","!url":"https://developer.mozilla.org/en/docs/DOM/element.scrollWidth","!doc":"Read-only property that returns either the width in pixels of the content of an element or the width of the element itself, whichever is greater."},clientTop:{"!type":"number","!url":"https://developer.mozilla.org/en/docs/DOM/element.clientTop","!doc":"The width of the top border of an element in pixels. It does not include the top margin or padding. clientTop is read-only."},clientLeft:{"!type":"number","!url":"https://developer.mozilla.org/en/docs/DOM/element.clientLeft","!doc":"The width of the left border of an element in pixels. It includes the width of the vertical scrollbar if the text direction of the element is right-to-left and if there is an overflow causing a left vertical scrollbar to be rendered. clientLeft does not include the left margin or the left padding. clientLeft is read-only."},clientHeight:{"!type":"number","!url":"https://developer.mozilla.org/en/docs/DOM/element.clientHeight","!doc":"Returns the inner height of an element in pixels, including padding but not the horizontal scrollbar height, border, or margin."},clientWidth:{"!type":"number","!url":"https://developer.mozilla.org/en/docs/DOM/element.clientWidth","!doc":"The inner width of an element in pixels. It includes padding but not the vertical scrollbar (if present, if rendered), border or margin."},innerHTML:{"!type":"string","!url":"https://developer.mozilla.org/en/docs/DOM/element.innerHTML","!doc":"Sets or gets the HTML syntax describing the element's descendants."},createdCallback:{"!type":"fn()","!url":"http://w3c.github.io/webcomponents/spec/custom/index.html#dfn-created-callback","!doc":"This callback is invoked after custom element instance is created and its definition is registered. The actual timing of this callback is defined further in this specification."},attachedCallback:{"!type":"fn()","!url":"http://w3c.github.io/webcomponents/spec/custom/index.html#dfn-entered-view-callback","!doc":"Unless specified otherwise, this callback must be enqueued whenever custom element is inserted into a document and this document has a browsing context."},detachedCallback:{"!type":"fn()","!url":"http://w3c.github.io/webcomponents/spec/custom/index.html#dfn-left-view-callback","!doc":"Unless specified otherwise, this callback must be enqueued whenever custom element is removed from the document and this document has a browsing context."},attributeChangedCallback:{"!type":"fn()","!url":"http://w3c.github.io/webcomponents/spec/custom/index.html#dfn-attribute-changed-callback","!doc":"Unless specified otherwise, this callback must be enqueued whenever custom element's attribute is added, changed or removed."}},"!url":"https://developer.mozilla.org/en/docs/DOM/Element","!doc":"Represents an element in an HTML or XML document."},Text:{"!type":"fn()",prototype:{"!proto":"Node.prototype",wholeText:{"!type":"string","!url":"https://developer.mozilla.org/en/docs/DOM/Text.wholeText","!doc":"Returns all text of all Text nodes logically adjacent to the node.  The text is concatenated in document order.  This allows you to specify any text node and obtain all adjacent text as a single string."},splitText:{"!type":"fn(offset: number) -> +Text","!url":"https://developer.mozilla.org/en/docs/DOM/Text.splitText","!doc":"Breaks the Text node into two nodes at the specified offset, keeping both nodes in the tree as siblings."}},"!url":"https://developer.mozilla.org/en/docs/DOM/Text","!doc":"In the DOM, the Text interface represents the textual content of an Element or Attr.  If an element has no markup within its content, it has a single child implementing Text that contains the element's text.  However, if the element contains markup, it is parsed into information items and Text nodes that form its children."},Document:{"!type":"fn()",prototype:{"!proto":"Node.prototype",activeElement:{"!type":"+Element","!url":"https://developer.mozilla.org/en/docs/DOM/document.activeElement","!doc":"Returns the currently focused element, that is, the element that will get keystroke events if the user types any. This attribute is read only."},compatMode:{"!type":"string","!url":"https://developer.mozilla.org/en/docs/DOM/document.compatMode","!doc":"Indicates whether the document is rendered in Quirks mode or Strict mode."},designMode:{"!type":"string","!url":"https://developer.mozilla.org/en/docs/DOM/document.designMode","!doc":"Can be used to make any document editable, for example in a <iframe />:"},dir:{"!type":"string","!url":"https://developer.mozilla.org/en/docs/DOM/Document.dir","!doc":"This property should indicate and allow the setting of the directionality of the text of the document, whether left to right (default) or right to left."},height:{"!type":"number","!url":"https://developer.mozilla.org/en/docs/DOM/document.height","!doc":"Returns the height of the <body> element of the current document."},width:{"!type":"number","!url":"https://developer.mozilla.org/en/docs/DOM/document.width","!doc":"Returns the width of the <body> element of the current document in pixels."},characterSet:{"!type":"string","!url":"https://developer.mozilla.org/en/docs/DOM/document.characterSet","!doc":"Returns the character encoding of the current document."},readyState:{"!type":"string","!url":"https://developer.mozilla.org/en/docs/DOM/document.readyState","!doc":'Returns "loading" while the document is loading, "interactive" once it is finished parsing but still loading sub-resources, and "complete" once it has loaded.'},location:{"!type":"location","!url":"https://developer.mozilla.org/en/docs/DOM/document.location","!doc":"Returns a Location object, which contains information about the URL of the document and provides methods for changing that URL."},lastModified:{"!type":"string","!url":"https://developer.mozilla.org/en/docs/DOM/document.lastModified","!doc":"Returns a string containing the date and time on which the current document was last modified."},head:{"!type":"+Element","!url":"https://developer.mozilla.org/en/docs/DOM/document.head","!doc":"Returns the <head> element of the current document. If there are more than one <head> elements, the first one is returned."},body:{"!type":"+Element","!url":"https://developer.mozilla.org/en/docs/DOM/document.body","!doc":"Returns the <body> or <frameset> node of the current document."},cookie:{"!type":"string","!url":"https://developer.mozilla.org/en/docs/DOM/document.cookie","!doc":"Get and set the cookies associated with the current document."},URL:"string",domain:{"!type":"string","!url":"https://developer.mozilla.org/en/docs/DOM/document.domain","!doc":"Gets/sets the domain portion of the origin of the current document, as used by the same origin policy."},referrer:{"!type":"string","!url":"https://developer.mozilla.org/en/docs/DOM/document.referrer","!doc":"Returns the URI of the page that linked to this page."},title:{"!type":"string","!url":"https://developer.mozilla.org/en/docs/DOM/document.title","!doc":"Gets or sets the title of the document."},defaultView:{"!url":"https://developer.mozilla.org/en/docs/DOM/document.defaultView","!doc":"In browsers returns the window object associated with the document or null if none available."},documentURI:{"!type":"string","!url":"https://developer.mozilla.org/en/docs/DOM/document.documentURI","!doc":"Returns the document location as string. It is read-only per DOM4 specification."},xmlStandalone:"bool",xmlVersion:{"!type":"string","!url":"https://developer.mozilla.org/en/docs/DOM/document.xmlVersion","!doc":'Returns the version number as specified in the XML declaration (e.g., <?xml version="1.0"?>) or "1.0" if the declaration is absent.'},xmlEncoding:{"!type":"string","!url":"https://developer.mozilla.org/en/docs/DOM/Document.xmlEncoding","!doc":"Returns the encoding as determined by the XML declaration. Should be null if unspecified or unknown."},inputEncoding:{"!type":"string","!url":"https://developer.mozilla.org/en/docs/DOM/document.inputEncoding","!doc":"Returns a string representing the encoding under which the document was parsed (e.g. ISO-8859-1)."},documentElement:{"!type":"+Element","!url":"https://developer.mozilla.org/en/docs/DOM/document.documentElement","!doc":"Read-only"},implementation:{hasFeature:"fn(feature: string, version: number) -> bool",createDocumentType:{"!type":"fn(qualifiedName: string, publicId: string, systemId: string) -> +Node","!url":"https://developer.mozilla.org/en/docs/DOM/DOMImplementation.createDocumentType","!doc":"Returns a DocumentType object which can either be used with DOMImplementation.createDocument upon document creation or they can be put into the document via Node.insertBefore() or Node.replaceChild(): http://www.w3.org/TR/DOM-Level-3-Cor...l#ID-B63ED1A31 (less ideal due to features not likely being as accessible: http://www.w3.org/TR/DOM-Level-3-Cor...createDocument ). In any case, entity declarations and notations will not be available: http://www.w3.org/TR/DOM-Level-3-Cor...-createDocType   "},createHTMLDocument:{"!type":"fn(title: string) -> +Document","!url":"https://developer.mozilla.org/en/docs/DOM/DOMImplementation.createHTMLDocument","!doc":"This method (available from document.implementation) creates a new HTML document."},createDocument:{"!type":"fn(namespaceURI: string, qualifiedName: string, type: +Node) -> +Document","!url":"https://developer.mozilla.org/en-US/docs/DOM/DOMImplementation.createHTMLDocument","!doc":"This method creates a new HTML document."},"!url":"https://developer.mozilla.org/en/docs/DOM/document.implementation","!doc":"Returns a DOMImplementation object associated with the current document."},doctype:{"!type":"+Node","!url":"https://developer.mozilla.org/en/docs/DOM/document.doctype","!doc":"Returns the Document Type Declaration (DTD) associated with current document. The returned object implements the DocumentType interface. Use DOMImplementation.createDocumentType() to create a DocumentType."},open:{"!type":"fn()","!url":"https://developer.mozilla.org/en/docs/DOM/document.open","!doc":"The document.open() method opens a document for writing."},close:{"!type":"fn()","!url":"https://developer.mozilla.org/en/docs/DOM/document.close","!doc":"The document.close() method finishes writing to a document, opened with document.open()."},write:{"!type":"fn(html: string)","!url":"https://developer.mozilla.org/en/docs/DOM/document.write","!doc":"Writes a string of text to a document stream opened by document.open()."},writeln:{"!type":"fn(html: string)","!url":"https://developer.mozilla.org/en/docs/DOM/document.writeln","!doc":"Writes a string of text followed by a newline character to a document."},clear:{"!type":"fn()","!url":"https://developer.mozilla.org/en/docs/DOM/document.clear","!doc":"In recent versions of Mozilla-based applications as well as in Internet Explorer and Netscape 4 this method does nothing."},hasFocus:{"!type":"fn() -> bool","!url":"https://developer.mozilla.org/en/docs/DOM/document.hasFocus","!doc":"Returns a Boolean value indicating whether the document or any element inside the document has focus. This method can be used to determine whether the active element in a document has focus."},createElement:{"!type":"fn(tagName: string) -> +Element","!url":"https://developer.mozilla.org/en/docs/DOM/document.createElement","!doc":"Creates the specified element."},createElementNS:{"!type":"fn(ns: string, tagName: string) -> +Element","!url":"https://developer.mozilla.org/en/docs/DOM/document.createElementNS","!doc":"Creates an element with the specified namespace URI and qualified name."},createDocumentFragment:{"!type":"fn() -> +DocumentFragment","!url":"https://developer.mozilla.org/en/docs/DOM/document.createDocumentFragment","!doc":"Creates a new empty DocumentFragment."},createTextNode:{"!type":"fn(content: string) -> +Text","!url":"https://developer.mozilla.org/en/docs/DOM/document.createTextNode","!doc":"Creates a new Text node."},createComment:{"!type":"fn(content: string) -> +Node","!url":"https://developer.mozilla.org/en/docs/DOM/document.createComment","!doc":"Creates a new comment node, and returns it."},createCDATASection:{"!type":"fn(content: string) -> +Node","!url":"https://developer.mozilla.org/en/docs/DOM/document.createCDATASection","!doc":"Creates a new CDATA section node, and returns it. "},createProcessingInstruction:{"!type":"fn(content: string) -> +Node","!url":"https://developer.mozilla.org/en/docs/DOM/document.createProcessingInstruction","!doc":"Creates a new processing instruction node, and returns it."},createAttribute:{"!type":"fn(name: string) -> +Attr","!url":"https://developer.mozilla.org/en/docs/DOM/document.createAttribute","!doc":"Creates a new attribute node, and returns it."},createAttributeNS:{"!type":"fn(ns: string, name: string) -> +Attr","!url":"https://developer.mozilla.org/en/docs/DOM/Attr","!doc":"This type represents a DOM element's attribute as an object. In most DOM methods, you will probably directly retrieve the attribute as a string (e.g., Element.getAttribute(), but certain functions (e.g., Element.getAttributeNode()) or means of iterating give Attr types."},importNode:{"!type":"fn(node: +Node, deep: bool) -> +Element","!url":"https://developer.mozilla.org/en/docs/DOM/document.importNode","!doc":"Creates a copy of a node from an external document that can be inserted into the current document."},getElementById:{"!type":"fn(id: string) -> +Element","!url":"https://developer.mozilla.org/en/docs/DOM/document.getElementById","!doc":"Returns a reference to the element by its ID."},getElementsByTagName:{"!type":"fn(tagName: string) -> +NodeList","!url":"https://developer.mozilla.org/en/docs/DOM/document.getElementsByTagName","!doc":"Returns a NodeList of elements with the given tag name. The complete document is searched, including the root node. The returned NodeList is live, meaning that it updates itself automatically to stay in sync with the DOM tree without having to call document.getElementsByTagName again."},getElementsByTagNameNS:{"!type":"fn(ns: string, tagName: string) -> +NodeList","!url":"https://developer.mozilla.org/en/docs/DOM/document.getElementsByTagNameNS","!doc":"Returns a list of elements with the given tag name belonging to the given namespace. The complete document is searched, including the root node."},createEvent:{"!type":"fn(type: string) -> +Event","!url":"https://developer.mozilla.org/en/docs/DOM/document.createEvent","!doc":"Creates an event of the type specified. The returned object should be first initialized and can then be passed to element.dispatchEvent."},createRange:{"!type":"fn() -> +Range","!url":"https://developer.mozilla.org/en/docs/DOM/document.createRange","!doc":"Returns a new Range object."},evaluate:{"!type":"fn(expr: ?) -> +XPathResult","!url":"https://developer.mozilla.org/en/docs/DOM/document.evaluate","!doc":"Returns an XPathResult based on an XPath expression and other given parameters."},execCommand:{"!type":"fn(cmd: string)","!url":"https://developer.mozilla.org/en-US/docs/Rich-Text_Editing_in_Mozilla#Executing_Commands","!doc":"Run command to manipulate the contents of an editable region."},queryCommandEnabled:{"!type":"fn(cmd: string) -> bool","!url":"https://developer.mozilla.org/en/docs/DOM/document","!doc":"Returns true if the Midas command can be executed on the current range."},queryCommandIndeterm:{"!type":"fn(cmd: string) -> bool","!url":"https://developer.mozilla.org/en/docs/DOM/document","!doc":"Returns true if the Midas command is in a indeterminate state on the current range."},queryCommandState:{"!type":"fn(cmd: string) -> bool","!url":"https://developer.mozilla.org/en/docs/DOM/document","!doc":"Returns true if the Midas command has been executed on the current range."},queryCommandSupported:{"!type":"fn(cmd: string) -> bool","!url":"https://developer.mozilla.org/en/docs/DOM/document.queryCommandSupported","!doc":"Reports whether or not the specified editor query command is supported by the browser."},queryCommandValue:{"!type":"fn(cmd: string) -> string","!url":"https://developer.mozilla.org/en/docs/DOM/document","!doc":"Returns the current value of the current range for Midas command."},getElementsByName:{"!type":"fn(name: string) -> +HTMLCollection","!url":"https://developer.mozilla.org/en/docs/DOM/document.getElementsByName","!doc":"Returns a list of elements with a given name in the HTML document."},elementFromPoint:{"!type":"fn(x: number, y: number) -> +Element","!url":"https://developer.mozilla.org/en/docs/DOM/document.elementFromPoint","!doc":"Returns the element from the document whose elementFromPoint method is being called which is the topmost element which lies under the given point.  To get an element, specify the point via coordinates, in CSS pixels, relative to the upper-left-most point in the window or frame containing the document."},getSelection:{"!type":"fn() -> +Selection","!url":"https://developer.mozilla.org/en/docs/DOM/document.getSelection","!doc":"The DOM getSelection() method is available on the Window and Document interfaces."},adoptNode:{"!type":"fn(node: +Node) -> +Element","!url":"https://developer.mozilla.org/en/docs/DOM/document.adoptNode","!doc":"Adopts a node from an external document. The node and its subtree is removed from the document it's in (if any), and its ownerDocument is changed to the current document. The node can then be inserted into the current document."},createTreeWalker:{"!type":"fn(root: +Node, mask: number) -> ?","!url":"https://developer.mozilla.org/en/docs/DOM/document.createTreeWalker","!doc":"Returns a new TreeWalker object."},createExpression:{"!type":"fn(text: string) -> ?","!url":"https://developer.mozilla.org/en/docs/DOM/document.createExpression","!doc":"This method compiles an XPathExpression which can then be used for (repeated) evaluations."},createNSResolver:{"!type":"fn(node: +Node)","!url":"https://developer.mozilla.org/en/docs/DOM/document.createNSResolver","!doc":"Creates an XPathNSResolver which resolves namespaces with respect to the definitions in scope for a specified node."},scripts:{"!type":"+HTMLCollection","!url":"https://developer.mozilla.org/en/docs/DOM/Document.scripts","!doc":"Returns a list of the <script> elements in the document. The returned object is an HTMLCollection."},plugins:{"!type":"+HTMLCollection","!url":"https://developer.mozilla.org/en/docs/DOM/document.plugins","!doc":"Returns an HTMLCollection object containing one or more HTMLEmbedElements or null which represent the <embed> elements in the current document."},embeds:{"!type":"+HTMLCollection","!url":"https://developer.mozilla.org/en/docs/DOM/document.embeds","!doc":"Returns a list of the embedded OBJECTS within the current document."},anchors:{"!type":"+HTMLCollection","!url":"https://developer.mozilla.org/en/docs/DOM/document.anchors","!doc":"Returns a list of all of the anchors in the document."},links:{"!type":"+HTMLCollection","!url":"https://developer.mozilla.org/en/docs/DOM/document.links","!doc":"The links property returns a collection of all AREA elements and anchor elements in a document with a value for the href attribute. "},forms:{"!type":"+HTMLCollection","!url":"https://developer.mozilla.org/en/docs/DOM/document.forms","!doc":"Returns a collection (an HTMLCollection) of the form elements within the current document."},styleSheets:{"!type":"+HTMLCollection","!url":"https://developer.mozilla.org/en/docs/DOM/document.styleSheets","!doc":"Returns a list of stylesheet objects for stylesheets explicitly linked into or embedded in a document."},currentScript:{"!type":"+Node","!url":"https://developer.mozilla.org/en-US/docs/Web/API/document.currentScript","!doc":"Returns the <script> element whose script is currently being processed."},registerElement:{"!type":"fn(type: string, options?: ?)","!url":"http://w3c.github.io/webcomponents/spec/custom/#extensions-to-document-interface-to-register","!doc":"The registerElement method of the Document interface provides a way to register a custom element and returns its custom element constructor."},getElementsByClassName:"Element.prototype.getElementsByClassName",querySelector:"Element.prototype.querySelector",querySelectorAll:"Element.prototype.querySelectorAll"},"!url":"https://developer.mozilla.org/en/docs/DOM/document","!doc":"Each web page loaded in the browser has its own document object. This object serves as an entry point to the web page's content (the DOM tree, including elements such as <body> and <table>) and provides functionality global to the document (such as obtaining the page's URL and creating new elements in the document)."},document:{"!type":"+Document","!url":"https://developer.mozilla.org/en/docs/DOM/document","!doc":"Each web page loaded in the browser has its own document object. This object serves as an entry point to the web page's content (the DOM tree, including elements such as <body> and <table>) and provides functionality global to the document (such as obtaining the page's URL and creating new elements in the document)."},XMLDocument:{"!type":"fn()",prototype:"Document.prototype","!url":"https://developer.mozilla.org/en/docs/Parsing_and_serializing_XML","!doc":"The Web platform provides the following objects for parsing and serializing XML:"},HTMLElement:{"!type":"Element","!url":"https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement"},HTMLAnchorElement:{"!type":"Element","!url":"https://developer.mozilla.org/en-US/docs/Web/API/HTMLAnchorElement"},HTMLAreaElement:{"!type":"Element","!url":"https://developer.mozilla.org/en-US/docs/Web/API/HTMLAreaElement"},HTMLAudioElement:{"!type":"Element","!url":"https://developer.mozilla.org/en-US/docs/Web/API/HTMLAudioElement"},HTMLBaseElement:{"!type":"Element","!url":"https://developer.mozilla.org/en-US/docs/Web/API/HTMLBaseElement"},HTMLBodyElement:{"!type":"Element","!url":"https://developer.mozilla.org/en-US/docs/Web/API/HTMLBodyElement"},HTMLBRElement:{"!type":"Element","!url":"https://developer.mozilla.org/en-US/docs/Web/API/HTMLBRElement"},HTMLButtonElement:{"!type":"Element","!url":"https://developer.mozilla.org/en-US/docs/Web/API/HTMLButtonElement"},HTMLCanvasElement:{"!type":"Element","!url":"https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement"},HTMLDataElement:{"!type":"Element","!url":"https://developer.mozilla.org/en-US/docs/Web/API/HTMLDataElement"},HTMLDataListElement:{"!type":"Element","!url":"https://developer.mozilla.org/en-US/docs/Web/API/HTMLDataListElement"},HTMLDivElement:{"!type":"Element","!url":"https://developer.mozilla.org/en-US/docs/Web/API/HTMLDivElement"},HTMLDListElement:{"!type":"Element","!url":"https://developer.mozilla.org/en-US/docs/Web/API/HTMLDListElement"},HTMLDocument:{"!type":"Document","!url":"https://developer.mozilla.org/en-US/docs/Web/API/HTMLDocument"},HTMLEmbedElement:{"!type":"Element","!url":"https://developer.mozilla.org/en-US/docs/Web/API/HTMLEmbedElement"},HTMLFieldSetElement:{"!type":"Element","!url":"https://developer.mozilla.org/en-US/docs/Web/API/HTMLFieldSetElement"},HTMLFormControlsCollection:{"!type":"Element","!url":"https://developer.mozilla.org/en-US/docs/Web/API/HTMLFormControlsCollection"},HTMLFormElement:{"!type":"Element","!url":"https://developer.mozilla.org/en-US/docs/Web/API/HTMLFormElement"},HTMLHeadElement:{"!type":"Element","!url":"https://developer.mozilla.org/en-US/docs/Web/API/HTMLHeadElement"},HTMLHeadingElement:{"!type":"Element","!url":"https://developer.mozilla.org/en-US/docs/Web/API/HTMLHeadingElement"},HTMLHRElement:{"!type":"Element","!url":"https://developer.mozilla.org/en-US/docs/Web/API/HTMLHRElement"},HTMLHtmlElement:{"!type":"Element","!url":"https://developer.mozilla.org/en-US/docs/Web/API/HTMLHtmlElement"},HTMLIFrameElement:{"!type":"Element","!url":"https://developer.mozilla.org/en-US/docs/Web/API/HTMLIFrameElement"},HTMLImageElement:{"!type":"Element","!url":"https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement"},HTMLInputElement:{"!type":"Element","!url":"https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement"},HTMLKeygenElement:{"!type":"Element","!url":"https://developer.mozilla.org/en-US/docs/Web/API/HTMLKeygenElement"},HTMLLabelElement:{"!type":"Element","!url":"https://developer.mozilla.org/en-US/docs/Web/API/HTMLLabelElement"},HTMLLegendElement:{"!type":"Element","!url":"https://developer.mozilla.org/en-US/docs/Web/API/HTMLLegendElement"},HTMLLIElement:{"!type":"Element","!url":"https://developer.mozilla.org/en-US/docs/Web/API/HTMLLIElement"},HTMLLinkElement:{"!type":"Element","!url":"https://developer.mozilla.org/en-US/docs/Web/API/HTMLLinkElement"},HTMLMapElement:{"!type":"Element","!url":"https://developer.mozilla.org/en-US/docs/Web/API/HTMLMapElement"},HTMLMediaElement:{"!type":"Element","!url":"https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement"},HTMLMetaElement:{"!type":"Element","!url":"https://developer.mozilla.org/en-US/docs/Web/API/HTMLMetaElement"},HTMLMeterElement:{"!type":"Element","!url":"https://developer.mozilla.org/en-US/docs/Web/API/HTMLMeterElement"},HTMLModElement:{"!type":"Element","!url":"https://developer.mozilla.org/en-US/docs/Web/API/HTMLModElement"},HTMLObjectElement:{"!type":"Element","!url":"https://developer.mozilla.org/en-US/docs/Web/API/HTMLObjectElement"},HTMLOListElement:{"!type":"Element","!url":"https://developer.mozilla.org/en-US/docs/Web/API/HTMLOListElement"},HTMLOptGroupElement:{"!type":"Element","!url":"https://developer.mozilla.org/en-US/docs/Web/API/HTMLOptGroupElement"},HTMLOptionElement:{"!type":"Element","!url":"https://developer.mozilla.org/en-US/docs/Web/API/HTMLOptionElement"},HTMLOptionsCollection:{"!type":"Element","!url":"https://developer.mozilla.org/en-US/docs/Web/API/HTMLOptionsCollection"},HTMLOutputElement:{"!type":"Element","!url":"https://developer.mozilla.org/en-US/docs/Web/API/HTMLOutputElement"},HTMLParagraphElement:{"!type":"Element","!url":"https://developer.mozilla.org/en-US/docs/Web/API/HTMLParagraphElement"},HTMLParamElement:{"!type":"Element","!url":"https://developer.mozilla.org/en-US/docs/Web/API/HTMLParamElement"},HTMLPreElement:{"!type":"Element","!url":"https://developer.mozilla.org/en-US/docs/Web/API/HTMLPreElement"},HTMLProgressElement:{"!type":"Element","!url":"https://developer.mozilla.org/en-US/docs/Web/API/HTMLProgressElement"},HTMLQuoteElement:{"!type":"Element","!url":"https://developer.mozilla.org/en-US/docs/Web/API/HTMLQuoteElement"},HTMLScriptElement:{"!type":"Element","!url":"https://developer.mozilla.org/en-US/docs/Web/API/HTMLScriptElement"},HTMLSelectElement:{"!type":"Element","!url":"https://developer.mozilla.org/en-US/docs/Web/API/HTMLSelectElement"},HTMLSourceElement:{"!type":"Element","!url":"https://developer.mozilla.org/en-US/docs/Web/API/HTMLSourceElement"},HTMLSpanElement:{"!type":"Element","!url":"https://developer.mozilla.org/en-US/docs/Web/API/HTMLSpanElement"},HTMLStyleElement:{"!type":"Element","!url":"https://developer.mozilla.org/en-US/docs/Web/API/HTMLStyleElement"},HTMLTableCaptionElement:{"!type":"Element","!url":"https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableCaptionElement"},HTMLTableCellElement:{"!type":"Element","!url":"https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableCellElement"},HTMLTableColElement:{"!type":"Element","!url":"https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableColElement"},HTMLTableDataCellElement:{"!type":"Element","!url":"https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableDataCellElement"},HTMLTableElement:{"!type":"Element","!url":"https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableElement"},HTMLTableHeaderCellElement:{"!type":"Element","!url":"https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableHeaderCellElement"},HTMLTableRowElement:{"!type":"Element","!url":"https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableRowElement"},HTMLTableSectionElement:{"!type":"Element","!url":"https://developer.mozilla.org/en-US/docs/Web/API/HTMLTableSectionElement"},HTMLTextAreaElement:{"!type":"Element","!url":"https://developer.mozilla.org/en-US/docs/Web/API/HTMLTextAreaElement"},HTMLTimeElement:{"!type":"Element","!url":"https://developer.mozilla.org/en-US/docs/Web/API/HTMLTimeElement"},HTMLTitleElement:{"!type":"Element","!url":"https://developer.mozilla.org/en-US/docs/Web/API/HTMLTitleElement"},HTMLTrackElement:{"!type":"Element","!url":"https://developer.mozilla.org/en-US/docs/Web/API/HTMLTrackElement"},HTMLUListElement:{"!type":"Element","!url":"https://developer.mozilla.org/en-US/docs/Web/API/HTMLUListElement"},HTMLUnknownElement:{"!type":"Element","!url":"https://developer.mozilla.org/en-US/docs/Web/API/HTMLUnknownElement"},HTMLVideoElement:{"!type":"Element","!url":"https://developer.mozilla.org/en-US/docs/Web/API/HTMLVideoElement"},Attr:{"!type":"fn()",prototype:{isId:{"!type":"bool","!url":"https://developer.mozilla.org/en/docs/DOM/Attr","!doc":"This type represents a DOM element's attribute as an object. In most DOM methods, you will probably directly retrieve the attribute as a string (e.g., Element.getAttribute(), but certain functions (e.g., Element.getAttributeNode()) or means of iterating give Attr types."},name:{"!type":"string","!url":"https://developer.mozilla.org/en/docs/DOM/Attr","!doc":"This type represents a DOM element's attribute as an object. In most DOM methods, you will probably directly retrieve the attribute as a string (e.g., Element.getAttribute(), but certain functions (e.g., Element.getAttributeNode()) or means of iterating give Attr types."},value:{"!type":"string","!url":"https://developer.mozilla.org/en/docs/DOM/Attr","!doc":"This type represents a DOM element's attribute as an object. In most DOM methods, you will probably directly retrieve the attribute as a string (e.g., Element.getAttribute(), but certain functions (e.g., Element.getAttributeNode()) or means of iterating give Attr types."}},"!url":"https://developer.mozilla.org/en/docs/DOM/Attr","!doc":"This type represents a DOM element's attribute as an object. In most DOM methods, you will probably directly retrieve the attribute as a string (e.g., Element.getAttribute(), but certain functions (e.g., Element.getAttributeNode()) or means of iterating give Attr types."},NodeList:{"!type":"fn()",prototype:{length:{"!type":"number","!url":"https://developer.mozilla.org/en/docs/DOM/element.length","!doc":"Returns the number of items in a NodeList."},item:{"!type":"fn(i: number) -> +Element","!url":"https://developer.mozilla.org/en/docs/DOM/NodeList.item","!doc":"Returns a node from a NodeList by index."},"<i>":"+Element"},"!url":"https://developer.mozilla.org/en/docs/DOM/NodeList","!doc":"NodeList objects are collections of nodes returned by getElementsByTagName, getElementsByTagNameNS, Node.childNodes, querySelectorAll, getElementsByClassName, etc."},HTMLCollection:{"!type":"fn()",prototype:{length:{"!type":"number","!url":"https://developer.mozilla.org/en/docs/DOM/HTMLCollection","!doc":"The number of items in the collection."},item:{"!type":"fn(i: number) -> +Element","!url":"https://developer.mozilla.org/en/docs/DOM/HTMLCollection","!doc":"Returns the specific node at the given zero-based index into the list. Returns null if the index is out of range."},namedItem:{"!type":"fn(name: string) -> +Element","!url":"https://developer.mozilla.org/en/docs/DOM/HTMLCollection","!doc":"Returns the specific node whose ID or, as a fallback, name matches the string specified by name. Matching by name is only done as a last resort, only in HTML, and only if the referenced element supports the name attribute. Returns null if no node exists by the given name."},"<i>":"+Element"},"!url":"https://developer.mozilla.org/en/docs/DOM/HTMLCollection","!doc":"HTMLCollection is an interface representing a generic collection of elements (in document order) and offers methods and properties for traversing the list."},NamedNodeMap:{"!type":"fn()",prototype:{length:{"!type":"number","!url":"https://developer.mozilla.org/en/docs/DOM/NamedNodeMap","!doc":"The number of items in the map."},getNamedItem:{"!type":"fn(name: string) -> +Node","!url":"https://developer.mozilla.org/en/docs/DOM/NamedNodeMap","!doc":"Gets a node by name."},setNamedItem:{"!type":"fn(node: +Node) -> +Node","!url":"https://developer.mozilla.org/en/docs/DOM/NamedNodeMap","!doc":"Adds (or replaces) a node by its nodeName."},removeNamedItem:{"!type":"fn(name: string) -> +Node","!url":"https://developer.mozilla.org/en/docs/DOM/NamedNodeMap","!doc":"Removes a node (or if an attribute, may reveal a default if present)."},item:{"!type":"fn(i: number) -> +Node","!url":"https://developer.mozilla.org/en/docs/DOM/NamedNodeMap","!doc":"Returns the item at the given index (or null if the index is higher or equal to the number of nodes)."},getNamedItemNS:{"!type":"fn(ns: string, name: string) -> +Node","!url":"https://developer.mozilla.org/en/docs/DOM/NamedNodeMap","!doc":"Gets a node by namespace and localName."},setNamedItemNS:{"!type":"fn(node: +Node) -> +Node","!url":"https://developer.mozilla.org/en/docs/DOM/NamedNodeMap","!doc":"Adds (or replaces) a node by its localName and namespaceURI."},removeNamedItemNS:{"!type":"fn(ns: string, name: string) -> +Node","!url":"https://developer.mozilla.org/en/docs/DOM/NamedNodeMap","!doc":"Removes a node (or if an attribute, may reveal a default if present)."},"<i>":"+Node"},"!url":"https://developer.mozilla.org/en/docs/DOM/NamedNodeMap","!doc":"A collection of nodes returned by Element.attributes (also potentially for DocumentType.entities, DocumentType.notations). NamedNodeMaps are not in any particular order (unlike NodeList), although they may be accessed by an index as in an array (they may also be accessed with the item() method). A NamedNodeMap object are live and will thus be auto-updated if changes are made to their contents internally or elsewhere."},DocumentFragment:{"!type":"fn()",prototype:{"!proto":"Node.prototype"},"!url":"https://developer.mozilla.org/en/docs/DOM/document.createDocumentFragment","!doc":"Creates a new empty DocumentFragment."},DOMTokenList:{"!type":"fn()",prototype:{length:{"!type":"number","!url":"https://developer.mozilla.org/en/docs/DOM/DOMTokenList","!doc":"The amount of items in the list."},item:{"!type":"fn(i: number) -> string","!url":"https://developer.mozilla.org/en/docs/DOM/DOMTokenList","!doc":"Returns an item in the list by its index."},contains:{"!type":"fn(token: string) -> bool","!url":"https://developer.mozilla.org/en/docs/DOM/DOMTokenList","!doc":"Return true if the underlying string contains token, otherwise false."},add:{"!type":"fn(token: string)","!url":"https://developer.mozilla.org/en/docs/DOM/DOMTokenList","!doc":"Adds token to the underlying string."},remove:{"!type":"fn(token: string)","!url":"https://developer.mozilla.org/en/docs/DOM/DOMTokenList","!doc":"Remove token from the underlying string."},toggle:{"!type":"fn(token: string) -> bool","!url":"https://developer.mozilla.org/en/docs/DOM/DOMTokenList","!doc":"Removes token from string and returns false. If token doesn't exist it's added and the function returns true."},"<i>":"string"},"!url":"https://developer.mozilla.org/en/docs/DOM/DOMTokenList","!doc":"This type represents a set of space-separated tokens. Commonly returned by HTMLElement.classList, HTMLLinkElement.relList, HTMLAnchorElement.relList or HTMLAreaElement.relList. It is indexed beginning with 0 as with JavaScript arrays. DOMTokenList is always case-sensitive."},XPathResult:{"!type":"fn()",prototype:{boolValue:"bool",invalidIteratorState:{"!type":"bool","!url":"https://developer.mozilla.org/en/docs/Introduction_to_using_XPath_in_JavaScript","!doc":"This document describes the interface for using XPath in JavaScript internally, in extensions, and from websites. Mozilla implements a fair amount of the DOM 3 XPath. Which means that XPath expressions can be run against both HTML and XML documents."},numberValue:{"!type":"number","!url":"https://developer.mozilla.org/en/docs/XPathResult","!doc":"Refer to nsIDOMXPathResult for more detail."},resultType:{"!type":"number","!url":"https://developer.mozilla.org/en/docs/DOM/document.evaluate","!doc":"Returns an XPathResult based on an XPath expression and other given parameters."},singleNodeValue:{"!type":"+Element","!url":"https://developer.mozilla.org/en/docs/Introduction_to_using_XPath_in_JavaScript","!doc":"This document describes the interface for using XPath in JavaScript internally, in extensions, and from websites. Mozilla implements a fair amount of the DOM 3 XPath. Which means that XPath expressions can be run against both HTML and XML documents."},snapshotLength:{"!type":"number","!url":"https://developer.mozilla.org/en/docs/XPathResult","!doc":"Refer to nsIDOMXPathResult for more detail."},stringValue:{"!type":"string","!url":"https://developer.mozilla.org/en/docs/Introduction_to_using_XPath_in_JavaScript","!doc":"This document describes the interface for using XPath in JavaScript internally, in extensions, and from websites. Mozilla implements a fair amount of the DOM 3 XPath. Which means that XPath expressions can be run against both HTML and XML documents."},iterateNext:{"!type":"fn()","!url":"https://developer.mozilla.org/en/docs/Introduction_to_using_XPath_in_JavaScript","!doc":"This document describes the interface for using XPath in JavaScript internally, in extensions, and from websites. Mozilla implements a fair amount of the DOM 3 XPath. Which means that XPath expressions can be run against both HTML and XML documents."},snapshotItem:{"!type":"fn()","!url":"https://developer.mozilla.org/en-US/docs/XPathResult#snapshotItem()"},ANY_TYPE:"number",NUMBER_TYPE:"number",STRING_TYPE:"number",BOOL_TYPE:"number",UNORDERED_NODE_ITERATOR_TYPE:"number",ORDERED_NODE_ITERATOR_TYPE:"number",UNORDERED_NODE_SNAPSHOT_TYPE:"number",ORDERED_NODE_SNAPSHOT_TYPE:"number",ANY_UNORDERED_NODE_TYPE:"number",FIRST_ORDERED_NODE_TYPE:"number"},"!url":"https://developer.mozilla.org/en/docs/XPathResult","!doc":"Refer to nsIDOMXPathResult for more detail."},ClientRect:{"!type":"fn()",prototype:{top:{"!type":"number","!url":"https://developer.mozilla.org/en/docs/DOM/element.getClientRects","!doc":"Top of the box, in pixels, relative to the viewport."},left:{"!type":"number","!url":"https://developer.mozilla.org/en/docs/DOM/element.getClientRects","!doc":"Left of the box, in pixels, relative to the viewport."},bottom:{"!type":"number","!url":"https://developer.mozilla.org/en/docs/DOM/element.getClientRects","!doc":"Bottom of the box, in pixels, relative to the viewport."},right:{"!type":"number","!url":"https://developer.mozilla.org/en/docs/DOM/element.getClientRects","!doc":"Right of the box, in pixels, relative to the viewport."}},"!url":"https://developer.mozilla.org/en/docs/DOM/element.getClientRects","!doc":"Returns a collection of rectangles that indicate the bounding rectangles for each box in a client."},Event:{"!type":"fn()",prototype:{stopPropagation:{"!type":"fn()","!url":"https://developer.mozilla.org/en/docs/DOM/event.stopPropagation","!doc":"Prevents further propagation of the current event."},preventDefault:{"!type":"fn()","!url":"https://developer.mozilla.org/en/docs/DOM/event.preventDefault","!doc":"Cancels the event if it is cancelable, without stopping further propagation of the event."},initEvent:{"!type":"fn(type: string, bubbles: bool, cancelable: bool)","!url":"https://developer.mozilla.org/en/docs/DOM/event.initEvent","!doc":"The initEvent method is used to initialize the value of an event created using document.createEvent."},stopImmediatePropagation:{"!type":"fn()","!url":"https://developer.mozilla.org/en/docs/DOM/event.stopImmediatePropagation","!doc":"Prevents other listeners of the same event to be called."},type:{"!type":"string","!url":"https://developer.mozilla.org/en-US/docs/Web/API/event.type","!doc":"Returns a string containing the type of event."},NONE:"number",CAPTURING_PHASE:"number",AT_TARGET:"number",BUBBLING_PHASE:"number",MOUSEDOWN:"number",MOUSEUP:"number",MOUSEOVER:"number",MOUSEOUT:"number",MOUSEMOVE:"number",MOUSEDRAG:"number",CLICK:"number",DBLCLICK:"number",KEYDOWN:"number",KEYUP:"number",KEYPRESS:"number",DRAGDROP:"number",FOCUS:"number",BLUR:"number",SELECT:"number",CHANGE:"number",target:{"!type":"+Element","!url":"https://developer.mozilla.org/en/docs/DOM/EventTarget","!doc":"An EventTarget is a DOM interface implemented by objects that can receive DOM events and have listeners for them. The most common EventTargets are DOM elements, although other objects can be EventTargets too, for example document, window, XMLHttpRequest, and others."},relatedTarget:{"!type":"+Element","!url":"https://developer.mozilla.org/en/docs/DOM/event.relatedTarget","!doc":"Identifies a secondary target for the event."},pageX:{"!type":"number","!url":"https://developer.mozilla.org/en/docs/DOM/event.pageX","!doc":"Returns the horizontal coordinate of the event relative to whole document."},pageY:{"!type":"number","!url":"https://developer.mozilla.org/en/docs/DOM/event.pageY","!doc":"Returns the vertical coordinate of the event relative to the whole document."},clientX:{"!type":"number","!url":"https://developer.mozilla.org/en/docs/DOM/event.clientX","!doc":"Returns the horizontal coordinate within the application's client area at which the event occurred (as opposed to the coordinates within the page). For example, clicking in the top-left corner of the client area will always result in a mouse event with a clientX value of 0, regardless of whether the page is scrolled horizontally."},clientY:{"!type":"number","!url":"https://developer.mozilla.org/en/docs/DOM/event.clientY","!doc":"Returns the vertical coordinate within the application's client area at which the event occurred (as opposed to the coordinates within the page). For example, clicking in the top-left corner of the client area will always result in a mouse event with a clientY value of 0, regardless of whether the page is scrolled vertically."},keyCode:{"!type":"number","!url":"https://developer.mozilla.org/en/docs/DOM/event.keyCode","!doc":"Returns the Unicode value of a non-character key in a keypress event or any key in any other type of keyboard event."},charCode:{"!type":"number","!url":"https://developer.mozilla.org/en/docs/DOM/event.charCode","!doc":"Returns the Unicode value of a character key pressed during a keypress event."},which:{"!type":"number","!url":"https://developer.mozilla.org/en/docs/DOM/event.which","!doc":"Returns the numeric keyCode of the key pressed, or the character code (charCode) for an alphanumeric key pressed."},button:{"!type":"number","!url":"https://developer.mozilla.org/en/docs/DOM/event.button","!doc":"Indicates which mouse button caused the event."},shiftKey:{"!type":"bool","!url":"https://developer.mozilla.org/en/docs/DOM/event.shiftKey","!doc":"Indicates whether the SHIFT key was pressed when the event fired."},ctrlKey:{"!type":"bool","!url":"https://developer.mozilla.org/en/docs/DOM/event.ctrlKey","!doc":"Indicates whether the CTRL key was pressed when the event fired."},altKey:{"!type":"bool","!url":"https://developer.mozilla.org/en/docs/DOM/event.altKey","!doc":"Indicates whether the ALT key was pressed when the event fired."},metaKey:{"!type":"bool","!url":"https://developer.mozilla.org/en/docs/DOM/event.metaKey","!doc":"Indicates whether the META key was pressed when the event fired."},returnValue:{"!type":"bool","!url":"https://developer.mozilla.org/en/docs/DOM/window.onbeforeunload","!doc":"An event that fires when a window is about to unload its resources. The document is still visible and the event is still cancelable."},cancelBubble:{"!type":"bool","!url":"https://developer.mozilla.org/en/docs/DOM/event.cancelBubble","!doc":"bool is the boolean value of true or false."},dataTransfer:{dropEffect:{"!type":"string","!url":"https://developer.mozilla.org/en/docs/DragDrop/DataTransfer","!doc":"The actual effect that will be used, and should always be one of the possible values of effectAllowed."},effectAllowed:{"!type":"string","!url":"https://developer.mozilla.org/en/docs/DragDrop/Drag_Operations","!doc":"Specifies the effects that are allowed for this drag."},files:{"!type":"+FileList","!url":"https://developer.mozilla.org/en/docs/DragDrop/DataTransfer","!doc":"Contains a list of all the local files available on the data transfer."},types:{"!type":"[string]","!url":"https://developer.mozilla.org/en-US/docs/DragDrop/DataTransfer","!doc":"Holds a list of the format types of the data that is stored for the first item, in the same order the data was added. An empty list will be returned if no data was added."},addElement:{"!type":"fn(element: +Element)","!url":"https://developer.mozilla.org/en/docs/DragDrop/DataTransfer","!doc":"Set the drag source."},clearData:{"!type":"fn(type?: string)","!url":"https://developer.mozilla.org/en/docs/DragDrop/Drag_Operations","!doc":"Remove the data associated with a given type."},getData:{"!type":"fn(type: string) -> string","!url":"https://developer.mozilla.org/en/docs/DragDrop/Drag_Operations","!doc":"Retrieves the data for a given type, or an empty string if data for that type does not exist or the data transfer contains no data."},setData:{"!type":"fn(type: string, data: string)","!url":"https://developer.mozilla.org/en/docs/DragDrop/Drag_Operations","!doc":"Set the data for a given type."},setDragImage:{"!type":"fn(image: +Element)","!url":"https://developer.mozilla.org/en/docs/DragDrop/Drag_Operations","!doc":"Set the image to be used for dragging if a custom one is desired."},"!url":"https://developer.mozilla.org/en/docs/DragDrop/DataTransfer","!doc":"This object is available from the dataTransfer property of all drag events. It cannot be created separately."}},"!url":"https://developer.mozilla.org/en-US/docs/DOM/event","!doc":"The DOM Event interface is accessible from within the handler function, via the event object passed as the first argument."},TouchEvent:{"!type":"fn()",prototype:"Event.prototype","!url":"https://developer.mozilla.org/en/docs/DOM/Touch_events","!doc":"In order to provide quality support for touch-based user interfaces, touch events offer the ability to interpret finger activity on touch screens or trackpads."},WheelEvent:{"!type":"fn()",prototype:"Event.prototype","!url":"https://developer.mozilla.org/en/docs/DOM/WheelEvent","!doc":"The DOM WheelEvent represents events that occur due to the user moving a mouse wheel or similar input device."},MouseEvent:{"!type":"fn()",prototype:"Event.prototype","!url":"https://developer.mozilla.org/en/docs/DOM/MouseEvent","!doc":"The DOM MouseEvent represents events that occur due to the user interacting with a pointing device (such as a mouse). It's represented by the nsINSDOMMouseEvent interface, which extends the nsIDOMMouseEvent interface."},KeyboardEvent:{"!type":"fn()",prototype:"Event.prototype","!url":"https://developer.mozilla.org/en/docs/DOM/KeyboardEvent","!doc":"KeyboardEvent objects describe a user interaction with the keyboard. Each event describes a key; the event type (keydown, keypress, or keyup) identifies what kind of activity was performed."},HashChangeEvent:{"!type":"fn()",prototype:"Event.prototype","!url":"https://developer.mozilla.org/en/docs/DOM/window.onhashchange","!doc":"The hashchange event fires when a window's hash changes."},ErrorEvent:{"!type":"fn()",prototype:"Event.prototype","!url":"https://developer.mozilla.org/en/docs/DOM/DOM_event_reference/error","!doc":"The error event is fired whenever a resource fails to load."},CustomEvent:{"!type":"fn()",prototype:"Event.prototype","!url":"https://developer.mozilla.org/en/docs/DOM/Event/CustomEvent","!doc":"The DOM CustomEvent are events initialized by an application for any purpose."},BeforeLoadEvent:{"!type":"fn()",prototype:"Event.prototype","!url":"https://developer.mozilla.org/en/docs/DOM/window","!doc":"This section provides a brief reference for all of the methods, properties, and events available through the DOM window object. The window object implements the Window interface, which in turn inherits from the AbstractView interface. Some additional global functions, namespaces objects, and constructors, not typically associated with the window, but available on it, are listed in the JavaScript Reference."},WebSocket:{"!type":"fn(url: string)",prototype:{close:{"!type":"fn()","!url":"https://developer.mozilla.org/en/docs/WebSockets/WebSockets_reference/CloseEvent","!doc":"A CloseEvent is sent to clients using WebSockets when the connection is closed. This is delivered to the listener indicated by the WebSocket object's onclose attribute."},send:{"!type":"fn(data: string)","!url":"https://developer.mozilla.org/en/docs/WebSockets/WebSockets_reference/WebSocket","!doc":"The WebSocket object provides the API for creating and managing a WebSocket connection to a server, as well as for sending and receiving data on the connection."},binaryType:{"!type":"string","!url":"https://developer.mozilla.org/en/docs/WebSockets/WebSockets_reference/WebSocket","!doc":"The WebSocket object provides the API for creating and managing a WebSocket connection to a server, as well as for sending and receiving data on the connection."},bufferedAmount:{"!type":"number","!url":"https://developer.mozilla.org/en/docs/WebSockets/Writing_WebSocket_client_applications","!doc":"WebSockets is a technology that makes it possible to open an interactive communication session between the user's browser and a server. Using a WebSocket connection, Web applications can perform real-time communication instead of having to poll for changes back and forth."},extensions:{"!type":"string","!url":"https://developer.mozilla.org/en/docs/WebSockets/WebSockets_reference/WebSocket","!doc":"The WebSocket object provides the API for creating and managing a WebSocket connection to a server, as well as for sending and receiving data on the connection."},onclose:{"!type":"?","!url":"https://developer.mozilla.org/en/docs/WebSockets/WebSockets_reference/CloseEvent","!doc":"A CloseEvent is sent to clients using WebSockets when the connection is closed. This is delivered to the listener indicated by the WebSocket object's onclose attribute."},onerror:{"!type":"?","!url":"https://developer.mozilla.org/en/docs/WebSockets/Writing_WebSocket_client_applications","!doc":"WebSockets is a technology that makes it possible to open an interactive communication session between the user's browser and a server. Using a WebSocket connection, Web applications can perform real-time communication instead of having to poll for changes back and forth."},onmessage:{"!type":"?","!url":"https://developer.mozilla.org/en/docs/WebSockets/WebSockets_reference/WebSocket","!doc":"The WebSocket object provides the API for creating and managing a WebSocket connection to a server, as well as for sending and receiving data on the connection."},onopen:{"!type":"?","!url":"https://developer.mozilla.org/en/docs/WebSockets/WebSockets_reference/WebSocket","!doc":"The WebSocket object provides the API for creating and managing a WebSocket connection to a server, as well as for sending and receiving data on the connection."},protocol:{"!type":"string","!url":"https://developer.mozilla.org/en/docs/WebSockets","!doc":"WebSockets is an advanced technology that makes it possible to open an interactive communication session between the user's browser and a server. With this API, you can send messages to a server and receive event-driven responses without having to poll the server for a reply."},url:{"!type":"string","!url":"https://developer.mozilla.org/en/docs/WebSockets/Writing_WebSocket_client_applications","!doc":"WebSockets is a technology that makes it possible to open an interactive communication session between the user's browser and a server. Using a WebSocket connection, Web applications can perform real-time communication instead of having to poll for changes back and forth."},CONNECTING:"number",OPEN:"number",CLOSING:"number",CLOSED:"number"},"!url":"https://developer.mozilla.org/en/docs/WebSockets","!doc":"WebSockets is an advanced technology that makes it possible to open an interactive communication session between the user's browser and a server. With this API, you can send messages to a server and receive event-driven responses without having to poll the server for a reply."},Worker:{"!type":"fn(scriptURL: string)",prototype:{postMessage:{"!type":"fn(message: ?)","!url":"https://developer.mozilla.org/en/docs/DOM/Worker","!doc":"Sends a message to the worker's inner scope. This accepts a single parameter, which is the data to send to the worker. The data may be any value or JavaScript object handled by the structured clone algorithm, which includes cyclical references."},terminate:{"!type":"fn()","!url":"https://developer.mozilla.org/en/docs/DOM/Worker","!doc":"Immediately terminates the worker. This does not offer the worker an opportunity to finish its operations; it is simply stopped at once."},onmessage:{"!type":"?","!url":"https://developer.mozilla.org/en/docs/DOM/Worker","!doc":"An event listener that is called whenever a MessageEvent with type message bubbles through the worker. The message is stored in the event's data member."},onerror:{"!type":"?","!url":"https://developer.mozilla.org/en/docs/DOM/Worker","!doc":"An event listener that is called whenever an ErrorEvent with type error bubbles through the worker."}},"!url":"https://developer.mozilla.org/en/docs/DOM/Worker","!doc":"Workers are background tasks that can be easily created and can send messages back to their creators. Creating a worker is as simple as calling the Worker() constructor, specifying a script to be run in the worker thread."},Storage:{length:{"!type":"number","!url":"https://developer.mozilla.org/en-US/docs/Web/API/Storage/length","!doc":"The length read-only property of the Storage interface returns an integer representing the number of data items stored in the Storage object."},setItem:{"!type":"fn(name: string, value: string)","!url":"https://developer.mozilla.org/en-US/docs/Web/API/Storage/setItem","!doc":"The setItem() method of the Storage interface, when passed a key name and value, will add that key to the storage, or update that key's value if it already exists."},getItem:{"!type":"fn(name: string) -> string","!url":"https://developer.mozilla.org/en-US/docs/Web/API/Storage/getItem","!doc":"The getItem() method of the Storage interface, when passed a key name, will return that key's value."},key:{"!type":"fn(index: number) -> string","!url":"https://developer.mozilla.org/en-US/docs/Web/API/Storage/key","!doc":"The key() method of the Storage interface, when passed a number n, returns the name of the nth key in the storage. The order of keys is user-agent defined, so you should not rely on it."},removeItem:{"!type":"fn(key: string)","!url":"https://developer.mozilla.org/en-US/docs/Web/API/Storage/removeItem","!doc":"The removeItem() method of the Storage interface, when passed a key name, will remove that key from the storage."},clear:{"!type":"fn()","!url":"https://developer.mozilla.org/en-US/docs/Web/API/Storage/clear","!doc":"The clear() method of the Storage interface, when invoked, will empty all keys out of the storage"}},localStorage:{"!type":"Storage","!url":"https://developer.mozilla.org/en/docs/Web/API/Window/localStorage","!doc":"The localStorage property allows you to access a local Storage object. localStorage is similar to sessionStorage. The only difference is that, while data stored in localStorage has no expiration time, data stored in sessionStorage gets cleared when the browsing session ends—that is, when the browser is closed.\n\nIt should be noted that data stored in either localStorage or sessionStorage is specific to the protocol of the page."},sessionStorage:{"!type":"Storage","!url":"https://developer.mozilla.org/en-US/docs/Web/API/Window/sessionStorage","!doc":"The sessionStorage property allows you to access a session Storage object for the current origin. sessionStorage is similar to Window.localStorage, the only difference is while data stored in localStorage has no expiration set, data stored in sessionStorage gets cleared when the page session ends. A page session lasts for as long as the browser is open and survives over page reloads and restores. Opening a page in a new tab or window will cause a new session to be initiated, which differs from how session cookies work.\n\nIt should be noted that data stored in either sessionStorage or localStorage is specific to the protocol of the page."},FileList:{"!type":"fn()",prototype:{length:{"!type":"number","!url":"https://developer.mozilla.org/en/docs/DOM/FileList","!doc":"A read-only value indicating the number of files in the list."},item:{"!type":"fn(i: number) -> +File","!url":"https://developer.mozilla.org/en/docs/DOM/FileList","!doc":"Returns a File object representing the file at the specified index in the file list."},"<i>":"+File"},"!url":"https://developer.mozilla.org/en/docs/DOM/FileList","!doc":'An object of this type is returned by the files property of the HTML input element; this lets you access the list of files selected with the <input type="file"> element. It\'s also used for a list of files dropped into web content when using the drag and drop API.'},File:{"!type":"fn()",prototype:{"!proto":"Blob.prototype",fileName:{"!type":"string","!url":"https://developer.mozilla.org/en/docs/DOM/File.fileName","!doc":"Returns the name of the file. For security reasons the path is excluded from this property."},fileSize:{"!type":"number","!url":"https://developer.mozilla.org/en/docs/DOM/File.fileSize","!doc":"Returns the size of a file in bytes."},lastModifiedDate:{"!type":"?","!url":"https://developer.mozilla.org/en/docs/DOM/File.lastModifiedDate","!doc":"Returns the last modified date of the file. Files without a known last modified date use the current date instead."},name:{"!type":"string","!url":"https://developer.mozilla.org/en/docs/DOM/File.name","!doc":"Returns the name of the file. For security reasons, the path is excluded from this property."}},"!url":"https://developer.mozilla.org/en/docs/DOM/File","!doc":"The File object provides information about -- and access to the contents of -- files. These are generally retrieved from a FileList object returned as a result of a user selecting files using the input element, or from a drag and drop operation's DataTransfer object."},Blob:{"!type":"fn(parts: [?], properties?: ?)",prototype:{size:{"!type":"number","!url":"https://developer.mozilla.org/en/docs/DOM/Blob","!doc":"The size, in bytes, of the data contained in the Blob object. Read only."},type:{"!type":"string","!url":"https://developer.mozilla.org/en/docs/DOM/Blob","!doc":"An ASCII-encoded string, in all lower case, indicating the MIME type of the data contained in the Blob. If the type is unknown, this string is empty. Read only."},slice:{"!type":"fn(start: number, end?: number, type?: string) -> +Blob","!url":"https://developer.mozilla.org/en/docs/DOM/Blob","!doc":"Returns a new Blob object containing the data in the specified range of bytes of the source Blob."}},"!url":"https://developer.mozilla.org/en/docs/DOM/Blob","!doc":"A Blob object represents a file-like object of immutable, raw data. Blobs represent data that isn't necessarily in a JavaScript-native format. The File interface is based on Blob, inheriting blob functionality and expanding it to support files on the user's system."},FileReader:{"!type":"fn()",prototype:{abort:{"!type":"fn()","!url":"https://developer.mozilla.org/en/docs/DOM/FileReader","!doc":"Aborts the read operation. Upon return, the readyState will be DONE."},readAsArrayBuffer:{"!type":"fn(blob: +Blob)","!url":"https://developer.mozilla.org/en/docs/DOM/FileReader","!doc":"Starts reading the contents of the specified Blob, producing an ArrayBuffer."},readAsBinaryString:{"!type":"fn(blob: +Blob)","!url":"https://developer.mozilla.org/en/docs/DOM/FileReader","!doc":"Starts reading the contents of the specified Blob, producing raw binary data."},readAsDataURL:{"!type":"fn(blob: +Blob)","!url":"https://developer.mozilla.org/en/docs/DOM/FileReader","!doc":"Starts reading the contents of the specified Blob, producing a data: url."},readAsText:{"!type":"fn(blob: +Blob, encoding?: string)","!url":"https://developer.mozilla.org/en/docs/DOM/FileReader","!doc":"Starts reading the contents of the specified Blob, producing a string."},EMPTY:"number",LOADING:"number",DONE:"number",error:{"!type":"?","!url":"https://developer.mozilla.org/en/docs/DOM/FileReader","!doc":"The error that occurred while reading the file. Read only."},readyState:{"!type":"number","!url":"https://developer.mozilla.org/en/docs/DOM/FileReader","!doc":"Indicates the state of the FileReader. This will be one of the State constants. Read only."},result:{"!type":"?","!url":"https://developer.mozilla.org/en/docs/DOM/FileReader","!doc":"The file's contents. This property is only valid after the read operation is complete, and the format of the data depends on which of the methods was used to initiate the read operation. Read only."},onabort:{"!type":"?","!url":"https://developer.mozilla.org/en/docs/DOM/FileReader","!doc":"Called when the read operation is aborted."},onerror:{"!type":"?","!url":"https://developer.mozilla.org/en/docs/DOM/FileReader","!doc":"Called when an error occurs."},onload:{"!type":"?","!url":"https://developer.mozilla.org/en/docs/DOM/FileReader","!doc":"Called when the read operation is successfully completed."},onloadend:{"!type":"?","!url":"https://developer.mozilla.org/en/docs/DOM/FileReader","!doc":"Called when the read is completed, whether successful or not. This is called after either onload or onerror."},onloadstart:{"!type":"?","!url":"https://developer.mozilla.org/en/docs/DOM/FileReader","!doc":"Called when reading the data is about to begin."},onprogress:{"!type":"?","!url":"https://developer.mozilla.org/en/docs/DOM/FileReader","!doc":"Called periodically while the data is being read."}},"!url":"https://developer.mozilla.org/en/docs/DOM/FileReader","!doc":"The FileReader object lets web applications asynchronously read the contents of files (or raw data buffers) stored on the user's computer, using File or Blob objects to specify the file or data to read. File objects may be obtained from a FileList object returned as a result of a user selecting files using the <input> element, from a drag and drop operation's DataTransfer object, or from the mozGetAsFile() API on an HTMLCanvasElement."},URL:{createObjectURL:{"!type":"fn(blob: +Blob) -> string","!url":"https://developer.mozilla.org/en-US/docs/Web/API/URL.createObjectURL","!doc":"The URL.createObjectURL() static method creates a DOMString containing an URL representing the object given in parameter."},revokeObjectURL:{"!type":"fn(string)","!url":"https://developer.mozilla.org/en-US/docs/Web/API/URL.revokeObjectURL","!doc":"The URL.revokeObjectURL() static method releases an existing object URL which was previously created by calling window.URL.createObjectURL()."}},Range:{"!type":"fn()",prototype:{collapsed:{"!type":"bool","!url":"https://developer.mozilla.org/en/docs/DOM/range.collapsed","!doc":"Returns a boolean indicating whether the range's start and end points are at the same position."},commonAncestorContainer:{"!type":"+Element","!url":"https://developer.mozilla.org/en/docs/DOM/range.commonAncestorContainer","!doc":"Returns the deepest Node that contains the  startContainer and  endContainer Nodes."},endContainer:{"!type":"+Element","!url":"https://developer.mozilla.org/en/docs/DOM/range.endContainer","!doc":"Returns the Node within which the Range ends."},endOffset:{"!type":"number","!url":"https://developer.mozilla.org/en/docs/DOM/range.endOffset","!doc":"Returns a number representing where in the  endContainer the Range ends."},startContainer:{"!type":"+Element","!url":"https://developer.mozilla.org/en/docs/DOM/range.startContainer","!doc":"Returns the Node within which the Range starts."},startOffset:{"!type":"number","!url":"https://developer.mozilla.org/en/docs/DOM/range.startOffset","!doc":"Returns a number representing where in the startContainer the Range starts."},setStart:{"!type":"fn(node: +Element, offset: number)","!url":"https://developer.mozilla.org/en/docs/DOM/range.setStart","!doc":"Sets the start position of a Range."},setEnd:{"!type":"fn(node: +Element, offset: number)","!url":"https://developer.mozilla.org/en/docs/DOM/range.setEnd","!doc":"Sets the end position of a Range."},setStartBefore:{"!type":"fn(node: +Element)","!url":"https://developer.mozilla.org/en/docs/DOM/range.setStartBefore","!doc":"Sets the start position of a Range relative to another Node."},setStartAfter:{"!type":"fn(node: +Element)","!url":"https://developer.mozilla.org/en/docs/DOM/range.setStartAfter","!doc":"Sets the start position of a Range relative to a Node."},setEndBefore:{"!type":"fn(node: +Element)","!url":"https://developer.mozilla.org/en/docs/DOM/range.setEndBefore","!doc":"Sets the end position of a Range relative to another Node."},setEndAfter:{"!type":"fn(node: +Element)","!url":"https://developer.mozilla.org/en/docs/DOM/range.setEndAfter","!doc":"Sets the end position of a Range relative to another Node."},selectNode:{"!type":"fn(node: +Element)","!url":"https://developer.mozilla.org/en/docs/DOM/range.selectNode","!doc":"Sets the Range to contain the Node and its contents."},selectNodeContents:{"!type":"fn(node: +Element)","!url":"https://developer.mozilla.org/en/docs/DOM/range.selectNodeContents","!doc":"Sets the Range to contain the contents of a Node."},collapse:{"!type":"fn(toStart: bool)","!url":"https://developer.mozilla.org/en/docs/DOM/range.collapse","!doc":"Collapses the Range to one of its boundary points."},cloneContents:{"!type":"fn() -> +DocumentFragment","!url":"https://developer.mozilla.org/en/docs/DOM/range.cloneContents","!doc":"Returns a DocumentFragment copying the Nodes of a Range."},deleteContents:{"!type":"fn()","!url":"https://developer.mozilla.org/en/docs/DOM/range.deleteContents","!doc":"Removes the contents of a Range from the Document."},extractContents:{"!type":"fn() -> +DocumentFragment","!url":"https://developer.mozilla.org/en/docs/DOM/range.extractContents","!doc":"Moves contents of a Range from the document tree into a DocumentFragment."},insertNode:{"!type":"fn(node: +Element)","!url":"https://developer.mozilla.org/en/docs/DOM/range.insertNode","!doc":"Insert a node at the start of a Range."},surroundContents:{"!type":"fn(node: +Element)","!url":"https://developer.mozilla.org/en/docs/DOM/range.surroundContents","!doc":"Moves content of a Range into a new node, placing the new node at the start of the specified range."},compareBoundaryPoints:{"!type":"fn(how: number, other: +Range) -> number","!url":"https://developer.mozilla.org/en/docs/DOM/range.compareBoundaryPoints","!doc":"Compares the boundary points of two Ranges."},cloneRange:{"!type":"fn() -> +Range","!url":"https://developer.mozilla.org/en/docs/DOM/range.cloneRange","!doc":"Returns a Range object with boundary points identical to the cloned Range."},detach:{"!type":"fn()","!url":"https://developer.mozilla.org/en/docs/DOM/range.detach","!doc":"Releases a Range from use to improve performance. This lets the browser choose to release resources associated with this Range. Subsequent attempts to use the detached range will result in a DOMException being thrown with an error code of INVALID_STATE_ERR."},END_TO_END:"number",END_TO_START:"number",START_TO_END:"number",START_TO_START:"number"},"!url":"https://developer.mozilla.org/en/docs/DOM/range.detach","!doc":"Releases a Range from use to improve performance. This lets the browser choose to release resources associated with this Range. Subsequent attempts to use the detached range will result in a DOMException being thrown with an error code of INVALID_STATE_ERR."},XMLHttpRequest:{"!type":"fn()",prototype:{abort:{"!type":"fn()","!url":"https://developer.mozilla.org/en/docs/DOM/XMLHttpRequest","!doc":"Aborts the request if it has already been sent."},getAllResponseHeaders:{"!type":"fn() -> string","!url":"https://developer.mozilla.org/en/docs/DOM/XMLHttpRequest","!doc":"Returns all the response headers as a string, or null if no response has been received. Note: For multipart requests, this returns the headers from the current part of the request, not from the original channel."},getResponseHeader:{"!type":"fn(header: string) -> string","!url":"https://developer.mozilla.org/en/docs/DOM/XMLHttpRequest","!doc":"Returns the string containing the text of the specified header, or null if either the response has not yet been received or the header doesn't exist in the response."},open:{"!type":"fn(method: string, url: string, async?: bool, user?: string, password?: string)","!url":"https://developer.mozilla.org/en/docs/DOM/XMLHttpRequest","!doc":"Initializes a request."},overrideMimeType:{"!type":"fn(type: string)","!url":"https://developer.mozilla.org/en/docs/DOM/XMLHttpRequest","!doc":"Overrides the MIME type returned by the server."},send:{"!type":"fn(data?: string)","!url":"https://developer.mozilla.org/en/docs/DOM/XMLHttpRequest","!doc":"Sends the request. If the request is asynchronous (which is the default), this method returns as soon as the request is sent. If the request is synchronous, this method doesn't return until the response has arrived."},setRequestHeader:{"!type":"fn(header: string, value: string)","!url":"https://developer.mozilla.org/en/docs/DOM/XMLHttpRequest","!doc":"Sets the value of an HTTP request header.You must call setRequestHeader() after open(), but before send()."},onabort:{"!type":"fn()","!url":"https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequestEventTarget/onabort","!doc":"The XMLHttpRequestEventTarget.onabort is the function called when an XMLHttpRequest transaction is aborted, such as when the XMLHttpRequest.abort() function is called."},onerror:{"!type":"fn()","!url":"https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequestEventTarget/onerror","!doc":"The XMLHttpRequestEventTarget.onerror is the function called when an XMLHttpRequest transaction fails due to an error."},onload:{"!type":"fn()","!url":"https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequestEventTarget/onload","!doc":"The XMLHttpRequestEventTarget.onload is the function called when an XMLHttpRequest transaction completes successfully."},onloadstart:{"!type":"fn()","!url":"https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequestEventTarget/onloadstart","!doc":"The XMLHttpRequestEventTarget.onloadstart is the function called when an XMLHttpRequest transaction starts transferring data."},onloadend:{"!type":"fn()","!url":"https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequestEventTarget/onloadend","!doc":"The XMLHttpRequestEventTarget.onloadend is the function called when an XMLHttpRequest transaction completes transferring data."},onprogress:{"!type":"fn()","!url":"https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequestEventTarget/onprogress","!doc":"The XMLHttpRequestEventTarget.onprogress is the function called periodically with information when an XMLHttpRequest before success completely."},ontimeout:{"!type":"fn()","!url":"https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequestEventTarget/ontimeout","!doc":"The XMLHttpRequestEventTarget.ontimeout is the function called when the XMLHttpRequest times out."},addEventListener:{"!type":"fn(type: string, listener: fn(), options?: ?, useCapture?: bool)","!url":"https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener","!doc":"The EventTarget.addEventListener() method registers the specified listener on the EventTarget it's called on. The event target may be an Element in a document, the Document itself, a Window, or any other object that supports events (such as XMLHttpRequest)."},removeEventListener:{"!type":"fn(type: string, listener: fn(), options?: ?, useCapture?: bool)","!url":"https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/removeEventListener","!doc":"Removes the event listener previously registered with EventTarget.addEventListener()."},dispatchEvent:{"!type":"fn(event: ?)","!url":"https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/dispatchEvent","!doc":"Dispatches an Event at the specified EventTarget, invoking the affected EventListeners in the appropriate order. The normal event processing rules (including the capturing and optional bubbling phase) apply to events dispatched manually with dispatchEvent()."},onreadystatechange:{"!type":"fn()","!url":"https://developer.mozilla.org/en/docs/DOM/XMLHttpRequest","!doc":"A JavaScript function object that is called whenever the readyState attribute changes."},readyState:{"!type":"number","!url":"https://developer.mozilla.org/en/docs/DOM/XMLHttpRequest","!doc":"The state of the request. (0=unsent, 1=opened, 2=headers_received, 3=loading, 4=done)"},response:{"!type":"+Document","!url":"https://developer.mozilla.org/en/docs/DOM/XMLHttpRequest","!doc":'The response entity body according to responseType, as an ArrayBuffer, Blob, Document, JavaScript object (for "json"), or string. This is null if the request is not complete or was not successful.'},responseText:{"!type":"string","!url":"https://developer.mozilla.org/en/docs/DOM/XMLHttpRequest","!doc":"The response to the request as text, or null if the request was unsuccessful or has not yet been sent."},responseType:{"!type":"string","!url":"https://developer.mozilla.org/en/docs/DOM/XMLHttpRequest","!doc":"Can be set to change the response type."},responseXML:{"!type":"+Document","!url":"https://developer.mozilla.org/en/docs/DOM/XMLHttpRequest","!doc":"The response to the request as a DOM Document object, or null if the request was unsuccessful, has not yet been sent, or cannot be parsed as XML or HTML."},status:{"!type":"number","!url":"https://developer.mozilla.org/en/docs/DOM/XMLHttpRequest","!doc":"The status of the response to the request. This is the HTTP result code"},statusText:{"!type":"string","!url":"https://developer.mozilla.org/en/docs/DOM/XMLHttpRequest","!doc":'The response string returned by the HTTP server. Unlike status, this includes the entire text of the response message ("200 OK", for example).'},timeout:{"!type":"number","!url":"https://developer.mozilla.org/en/docs/DOM/XMLHttpRequest/Synchronous_and_Asynchronous_Requests","!doc":"The number of milliseconds a request can take before automatically being terminated. A value of 0 (which is the default) means there is no timeout."},UNSENT:"number",OPENED:"number",HEADERS_RECEIVED:"number",LOADING:"number",DONE:"number"},"!url":"https://developer.mozilla.org/en/docs/DOM/XMLHttpRequest","!doc":"XMLHttpRequest is a JavaScript object that was designed by Microsoft and adopted by Mozilla, Apple, and Google. It's now being standardized in the W3C. It provides an easy way to retrieve data at a URL. Despite its name, XMLHttpRequest can be used to retrieve any type of data, not just XML, and it supports protocols other than HTTP (including file and ftp)."},DOMParser:{"!type":"fn()",prototype:{parseFromString:{"!type":"fn(data: string, mime: string) -> +Document","!url":"https://developer.mozilla.org/en/docs/DOM/DOMParser","!doc":"DOMParser can parse XML or HTML source stored in a string into a DOM Document. DOMParser is specified in DOM Parsing and Serialization."}},"!url":"https://developer.mozilla.org/en/docs/DOM/DOMParser","!doc":"DOMParser can parse XML or HTML source stored in a string into a DOM Document. DOMParser is specified in DOM Parsing and Serialization."},FormData:{"!type":"fn()","!url":"https://developer.mozilla.org/en-US/docs/Web/API/FormData",prototype:{append:{"!type":"fn(name: string, value: ?, filename: string)","!url":"https://developer.mozilla.org/en-US/docs/Web/API/FormData/append","!doc":"Appends a new value onto an existing key inside a FormData object, or adds the key if it does not already exist."},"delete":{"!type":"fn(name: string)","!url":"https://developer.mozilla.org/en-US/docs/Web/API/FormData/delete","!doc":"Deletes a key/value pair from a FormData object."},get:{"!type":"fn(name: string)","!url":"https://developer.mozilla.org/en-US/docs/Web/API/FormData/get","!doc":"Returns the first value associated with a given key from within a FormData object."},getAll:{"!type":"fn(name: string)","!url":"https://developer.mozilla.org/en-US/docs/Web/API/FormData/getAll","!doc":"Returns an array of all the values associated with a given key from within a FormData."},has:{"!type":"fn(name: string)","!url":"https://developer.mozilla.org/en-US/docs/Web/API/FormData/has","!doc":"Returns a boolean stating whether a FormData object contains a certain key/value pair."},set:{"!type":"fn(name: string, value: ?, filename: string)","!url":"https://developer.mozilla.org/en-US/docs/Web/API/FormData/set","!doc":"Sets a new value for an existing key inside a FormData object, or adds the key/value if it does not already exist."}}},Selection:{"!type":"fn()",prototype:{anchorNode:{"!type":"+Element","!url":"https://developer.mozilla.org/en/docs/DOM/Selection/anchorNode","!doc":"Returns the node in which the selection begins."},anchorOffset:{"!type":"number","!url":"https://developer.mozilla.org/en/docs/DOM/Selection/anchorOffset","!doc":"Returns the number of characters that the selection's anchor is offset within the anchorNode."},focusNode:{"!type":"+Element","!url":"https://developer.mozilla.org/en/docs/DOM/Selection/focusNode","!doc":"Returns the node in which the selection ends."},focusOffset:{"!type":"number","!url":"https://developer.mozilla.org/en/docs/DOM/Selection/focusOffset","!doc":"Returns the number of characters that the selection's focus is offset within the focusNode. "},isCollapsed:{"!type":"bool","!url":"https://developer.mozilla.org/en/docs/DOM/Selection/isCollapsed","!doc":"Returns a boolean indicating whether the selection's start and end points are at the same position."},rangeCount:{"!type":"number","!url":"https://developer.mozilla.org/en/docs/DOM/Selection/rangeCount","!doc":"Returns the number of ranges in the selection."},getRangeAt:{"!type":"fn(i: number) -> +Range","!url":"https://developer.mozilla.org/en/docs/DOM/Selection/getRangeAt","!doc":"Returns a range object representing one of the ranges currently selected."},collapse:{"!type":"fn()","!url":"https://developer.mozilla.org/en/docs/DOM/Selection/collapse","!doc":"Collapses the current selection to a single point. The document is not modified. If the content is focused and editable, the caret will blink there."},extend:{"!type":"fn(node: +Element, offset: number)","!url":"https://developer.mozilla.org/en/docs/DOM/Selection/extend","!doc":"Moves the focus of the selection to a specified point. The anchor of the selection does not move. The selection will be from the anchor to the new focus regardless of direction."},collapseToStart:{"!type":"fn()","!url":"https://developer.mozilla.org/en/docs/DOM/Selection/collapseToStart","!doc":"Collapses the selection to the start of the first range in the selection.  If the content of the selection is focused and editable, the caret will blink there."},collapseToEnd:{"!type":"fn()","!url":"https://developer.mozilla.org/en/docs/DOM/Selection/collapseToEnd","!doc":"Collapses the selection to the end of the last range in the selection.  If the content the selection is in is focused and editable, the caret will blink there."},selectAllChildren:{"!type":"fn(node: +Element)","!url":"https://developer.mozilla.org/en/docs/DOM/Selection/selectAllChildren","!doc":"Adds all the children of the specified node to the selection. Previous selection is lost."},addRange:{"!type":"fn(range: +Range)","!url":"https://developer.mozilla.org/en/docs/DOM/Selection/addRange","!doc":"Adds a Range to a Selection."},removeRange:{"!type":"fn(range: +Range)","!url":"https://developer.mozilla.org/en/docs/DOM/Selection/removeRange","!doc":"Removes a range from the selection."},removeAllRanges:{"!type":"fn()","!url":"https://developer.mozilla.org/en/docs/DOM/Selection/removeAllRanges","!doc":"Removes all ranges from the selection, leaving the anchorNode and focusNode properties equal to null and leaving nothing selected. "},deleteFromDocument:{"!type":"fn()","!url":"https://developer.mozilla.org/en/docs/DOM/Selection/deleteFromDocument","!doc":"Deletes the actual text being represented by a selection object from the document's DOM."},containsNode:{"!type":"fn(node: +Element) -> bool","!url":"https://developer.mozilla.org/en/docs/DOM/Selection/containsNode","!doc":"Indicates if the node is part of the selection."}},"!url":"https://developer.mozilla.org/en/docs/DOM/Selection","!doc":"Selection is the class of the object returned by window.getSelection() and other methods. It represents the text selection in the greater page, possibly spanning multiple elements, when the user drags over static text and other parts of the page. For information about text selection in an individual text editing element."},console:{assert:{"!type":"fn(assertion: bool, text: string)","!url":"https://developer.mozilla.org/en/docs/Web/API/Console.assert","!doc":"Writes an error message to the console if the assertion is false."},count:{"!type":"fn(label?: string)","!url":"https://developer.mozilla.org/en/docs/Web/API/Console.count","!doc":"Logs the number of times that this particular call to count() has been called."},dir:{"!type":"fn(object: ?)","!url":"https://developer.mozilla.org/en/docs/Web/API/Console.dir","!doc":"Displays an interactive list of the properties of the specified JavaScript object."},error:{"!type":"fn(text: ?)","!url":"https://developer.mozilla.org/en/docs/DOM/console.error","!doc":"Outputs an error message to the Web Console."},group:{"!type":"fn()","!url":"https://developer.mozilla.org/en/docs/Web/API/Console.group","!doc":"Creates a new inline group in the Web Console log."},groupCollapsed:{"!type":"fn()","!url":"https://developer.mozilla.org/en/docs/Web/API/Console.groupCollapsed","!doc":"Creates a new inline group in the Web Console log."},groupEnd:{"!type":"fn()","!url":"https://developer.mozilla.org/en/docs/Web/API/Console.groupEnd","!doc":"Exits the current inline group in the Web Console."},info:{"!type":"fn(text: ?)","!url":"https://developer.mozilla.org/en/docs/DOM/console.info","!doc":"Outputs an informational message to the Web Console."},log:{"!type":"fn(text: ?)","!url":"https://developer.mozilla.org/en/docs/DOM/console.log","!doc":"Outputs a message to the Web Console."},time:{"!type":"fn(timerName: string)","!url":"https://developer.mozilla.org/en/docs/Web/API/Console.time","!doc":"Starts a timer you can use to track how long an operation takes."},timeEnd:{"!type":"fn(timerName: string)","!url":"https://developer.mozilla.org/en/docs/Web/API/Console.timeEnd","!doc":"Stops a timer that was previously started by calling console.time()."},trace:{"!type":"fn()","!url":"https://developer.mozilla.org/en/docs/Web/API/Console.trace","!doc":"Outputs a stack trace to the Web Console."},warn:{"!type":"fn(text: ?)","!url":"https://developer.mozilla.org/en/docs/DOM/console.warn","!doc":"Outputs a warning message to the Web Console."},"!url":"https://developer.mozilla.org/en/docs/Web/API/Console","!doc":"The console object provides access to the browser's debugging console. The specifics of how it works vary from browser to browser, but there is a de facto set of features that are typically provided."},top:{"!type":"<top>","!url":"https://developer.mozilla.org/en/docs/DOM/window.top","!doc":"Returns a reference to the topmost window in the window hierarchy."},parent:{"!type":"<top>","!url":"https://developer.mozilla.org/en/docs/DOM/window.parent","!doc":"A reference to the parent of the current window or subframe."},window:{"!type":"<top>","!url":"https://developer.mozilla.org/en/docs/DOM/window","!doc":"The window object represents a window containing a DOM document."},opener:{"!type":"<top>","!url":"https://developer.mozilla.org/en/docs/DOM/window.opener","!doc":"Returns a reference to the window that opened this current window."},self:{"!type":"<top>","!url":"https://developer.mozilla.org/en/docs/DOM/window.self","!doc":"Returns an object reference to the window object. "},devicePixelRatio:"number",name:{"!type":"string","!url":"https://developer.mozilla.org/en/docs/JavaScript/Reference/Global_Objects/Function/name","!doc":"The name of the function."},closed:{"!type":"bool","!url":"https://developer.mozilla.org/en/docs/DOM/window.closed","!doc":"This property indicates whether the referenced window is closed or not."},pageYOffset:{"!type":"number","!url":"https://developer.mozilla.org/en/docs/DOM/window.scrollY","!doc":"Returns the number of pixels that the document has already been scrolled vertically."},pageXOffset:{"!type":"number","!url":"https://developer.mozilla.org/en/docs/DOM/window.scrollX","!doc":"Returns the number of pixels that the document has already been scrolled vertically."},scrollY:{"!type":"number","!url":"https://developer.mozilla.org/en/docs/DOM/window.scrollY","!doc":"Returns the number of pixels that the document has already been scrolled vertically."},scrollX:{"!type":"number","!url":"https://developer.mozilla.org/en/docs/DOM/window.scrollX","!doc":"Returns the number of pixels that the document has already been scrolled vertically."},screenTop:{"!type":"number","!url":"https://developer.mozilla.org/en/docs/DOM/window.screen.top","!doc":"Returns the distance in pixels from the top side of the current screen."},screenLeft:{"!type":"number","!url":"https://developer.mozilla.org/en/docs/DOM/window.screen.left","!doc":"Returns the distance in pixels from the left side of the main screen to the left side of the current screen."},screenY:{"!type":"number","!url":"https://developer.mozilla.org/en/docs/DOM/event.screenY","!doc":"Returns the vertical coordinate of the event within the screen as a whole."},screenX:{"!type":"number","!url":"https://developer.mozilla.org/en/docs/DOM/event.screenX","!doc":"Returns the horizontal coordinate of the event within the screen as a whole."},innerWidth:{"!type":"number","!url":"https://developer.mozilla.org/en/docs/DOM/window.innerWidth","!doc":"Width (in pixels) of the browser window viewport including, if rendered, the vertical scrollbar."},innerHeight:{"!type":"number","!url":"https://developer.mozilla.org/en/docs/DOM/window.innerHeight","!doc":"Height (in pixels) of the browser window viewport including, if rendered, the horizontal scrollbar."},outerWidth:{"!type":"number","!url":"https://developer.mozilla.org/en/docs/DOM/window.outerWidth","!doc":"window.outerWidth gets the width of the outside of the browser window. It represents the width of the whole browser window including sidebar (if expanded), window chrome and window resizing borders/handles."},outerHeight:{"!type":"number","!url":"https://developer.mozilla.org/en/docs/DOM/window.outerHeight","!doc":"window.outerHeight gets the height in pixels of the whole browser window."},frameElement:{"!type":"+Element","!url":"https://developer.mozilla.org/en/docs/DOM/window.frameElement","!doc":"Returns the element (such as <iframe> or <object>) in which the window is embedded, or null if the window is top-level."},crypto:{getRandomValues:{"!type":"fn([number])","!url":"https://developer.mozilla.org/en/docs/DOM/window.crypto.getRandomValues","!doc":"This methods lets you get cryptographically random values."},"!url":"https://developer.mozilla.org/en/docs/DOM/window.crypto.getRandomValues","!doc":"This methods lets you get cryptographically random values."},navigator:{appName:{"!type":"string","!url":"https://developer.mozilla.org/en/docs/DOM/window.navigator.appName","!doc":'Returns the name of the browser. The HTML5 specification also allows any browser to return "Netscape" here, for compatibility reasons.'},appVersion:{"!type":"string","!url":"https://developer.mozilla.org/en/docs/DOM/window.navigator.appVersion","!doc":'Returns the version of the browser as a string. It may be either a plain version number, like "5.0", or a version number followed by more detailed information. The HTML5 specification also allows any browser to return "4.0" here, for compatibility reasons.'},language:{"!type":"string","!url":"https://developer.mozilla.org/en/docs/DOM/window.navigator.language","!doc":"Returns a string representing the language version of the browser."},platform:{"!type":"string","!url":"https://developer.mozilla.org/en/docs/DOM/window.navigator.platform","!doc":"Returns a string representing the platform of the browser."},plugins:{"!type":"[?]","!url":"https://developer.mozilla.org/en/docs/DOM/window.navigator.plugins","!doc":"Returns a PluginArray object, listing the plugins installed in the application."},userAgent:{"!type":"string","!url":"https://developer.mozilla.org/en/docs/DOM/window.navigator.userAgent","!doc":"Returns the user agent string for the current browser."},vendor:{"!type":"string","!url":"https://developer.mozilla.org/en/docs/DOM/window.navigator.vendor","!doc":"Returns the name of the browser vendor for the current browser."},javaEnabled:{"!type":"bool","!url":"https://developer.mozilla.org/en/docs/DOM/window.navigator.javaEnabled","!doc":"This method indicates whether the current browser is Java-enabled or not."},"!url":"https://developer.mozilla.org/en/docs/DOM/window.navigator","!doc":"Returns a reference to the navigator object, which can be queried for information about the application running the script."},history:{state:{"!type":"?","!url":"https://developer.mozilla.org/en/docs/DOM/Manipulating_the_browser_history","!doc":"The DOM window object provides access to the browser's history through the history object. It exposes useful methods and properties that let you move back and forth through the user's history, as well as -- starting with HTML5 -- manipulate the contents of the history stack."},length:{"!type":"number","!url":"https://developer.mozilla.org/en/docs/DOM/Manipulating_the_browser_history","!doc":"The DOM window object provides access to the browser's history through the history object. It exposes useful methods and properties that let you move back and forth through the user's history, as well as -- starting with HTML5 -- manipulate the contents of the history stack."},go:{"!type":"fn(delta: number)","!url":"https://developer.mozilla.org/en/docs/DOM/window.history","!doc":"Returns a reference to the History object, which provides an interface for manipulating the browser session history (pages visited in the tab or frame that the current page is loaded in)."},forward:{"!type":"fn()","!url":"https://developer.mozilla.org/en/docs/DOM/Manipulating_the_browser_history","!doc":"The DOM window object provides access to the browser's history through the history object. It exposes useful methods and properties that let you move back and forth through the user's history, as well as -- starting with HTML5 -- manipulate the contents of the history stack."},back:{"!type":"fn()","!url":"https://developer.mozilla.org/en/docs/DOM/Manipulating_the_browser_history","!doc":"The DOM window object provides access to the browser's history through the history object. It exposes useful methods and properties that let you move back and forth through the user's history, as well as -- starting with HTML5 -- manipulate the contents of the history stack."},pushState:{"!type":"fn(data: ?, title: string, url?: string)","!url":"https://developer.mozilla.org/en/docs/DOM/Manipulating_the_browser_history","!doc":"The DOM window object provides access to the browser's history through the history object. It exposes useful methods and properties that let you move back and forth through the user's history, as well as -- starting with HTML5 -- manipulate the contents of the history stack."},replaceState:{"!type":"fn(data: ?, title: string, url?: string)","!url":"https://developer.mozilla.org/en/docs/DOM/Manipulating_the_browser_history","!doc":"The DOM window object provides access to the browser's history through the history object. It exposes useful methods and properties that let you move back and forth through the user's history, as well as -- starting with HTML5 -- manipulate the contents of the history stack."},"!url":"https://developer.mozilla.org/en/docs/DOM/Manipulating_the_browser_history","!doc":"The DOM window object provides access to the browser's history through the history object. It exposes useful methods and properties that let you move back and forth through the user's history, as well as -- starting with HTML5 -- manipulate the contents of the history stack."},requestAnimationFrame:{"!type":"fn(callback: fn(timestamp: number)) -> number","!url":"https://developer.mozilla.org/en/docs/DOM/window.requestAnimationFrame","!doc":"The Window.requestAnimationFrame() method tells the browser that you wish to perform an animation and requests that the browser call a specified function to update an animation before the next repaint. The method takes as an argument a callback to be invoked before the repaint."},cancelAnimationFrame:{"!type":"fn(number)n","!url":"https://developer.mozilla.org/en/docs/DOM/window.cancelAnimationFrame","!doc":"Cancels a previously scheduled animation frame request."},screen:{availWidth:{"!type":"number","!url":"https://developer.mozilla.org/en/docs/DOM/window.screen.availWidth","!doc":"Returns the amount of horizontal space in pixels available to the window."},availHeight:{"!type":"number","!url":"https://developer.mozilla.org/en/docs/DOM/window.screen.availHeight","!doc":"Returns the amount of vertical space available to the window on the screen."},availTop:{"!type":"number","!url":"https://developer.mozilla.org/en/docs/DOM/window.screen.availTop","!doc":"Specifies the y-coordinate of the first pixel that is not allocated to permanent or semipermanent user interface features."},availLeft:{"!type":"number","!url":"https://developer.mozilla.org/en/docs/DOM/window.screen.availLeft","!doc":"Returns the first available pixel available from the left side of the screen."},pixelDepth:{"!type":"number","!url":"https://developer.mozilla.org/en/docs/DOM/window.screen.pixelDepth","!doc":"Returns the bit depth of the screen."},colorDepth:{"!type":"number","!url":"https://developer.mozilla.org/en/docs/DOM/window.screen.colorDepth","!doc":"Returns the color depth of the screen."},width:{"!type":"number","!url":"https://developer.mozilla.org/en/docs/DOM/window.screen.width","!doc":"Returns the width of the screen."},height:{"!type":"number","!url":"https://developer.mozilla.org/en/docs/DOM/window.screen.height","!doc":"Returns the height of the screen in pixels."},"!url":"https://developer.mozilla.org/en/docs/DOM/window.screen","!doc":"Returns a reference to the screen object associated with the window."},postMessage:{"!type":"fn(message: string, targetOrigin: string)","!url":"https://developer.mozilla.org/en/docs/DOM/window.postMessage","!doc":"window.postMessage, when called, causes a MessageEvent to be dispatched at the target window when any pending script that must be executed completes (e.g. remaining event handlers if window.postMessage is called from an event handler, previously-set pending timeouts, etc.). The MessageEvent has the type message, a data property which is set to the value of the first argument provided to window.postMessage, an origin property corresponding to the origin of the main document in the window calling window.postMessage at the time window.postMessage was called, and a source property which is the window from which window.postMessage is called. (Other standard properties of events are present with their expected values.)"},close:{"!type":"fn()","!url":"https://developer.mozilla.org/en/docs/DOM/window.close","!doc":"Closes the current window, or a referenced window."},blur:{"!type":"fn()","!url":"https://developer.mozilla.org/en/docs/DOM/element.blur","!doc":"The blur method removes keyboard focus from the current element."},focus:{"!type":"fn()","!url":"https://developer.mozilla.org/en/docs/DOM/element.focus","!doc":"Sets focus on the specified element, if it can be focused."},onload:{"!type":"?","!url":"https://developer.mozilla.org/en/docs/DOM/window.onload","!doc":"An event handler for the load event of a window."},onunload:{"!type":"?","!url":"https://developer.mozilla.org/en/docs/DOM/window.onunload","!doc":"The unload event is raised when the window is unloading its content and resources. The resources removal is processed after the unload event occurs."},onscroll:{"!type":"?","!url":"https://developer.mozilla.org/en/docs/DOM/window.onscroll","!doc":"Specifies the function to be called when the window is scrolled."},onresize:{"!type":"?","!url":"https://developer.mozilla.org/en/docs/DOM/window.onresize","!doc":"An event handler for the resize event on the window."},ononline:{"!type":"?","!url":"https://developer.mozilla.org/en/docs/DOM/document.ononline","!doc":'"online" event is fired when the browser switches between online and offline mode.'},onoffline:{"!type":"?","!url":"https://developer.mozilla.org/en/docs/Online_and_offline_events","!doc":"Some browsers implement Online/Offline events from the WHATWG Web Applications 1.0 specification."},onmousewheel:{"!type":"?","!url":"https://developer.mozilla.org/en/docs/DOM/DOM_event_reference/mousewheel","!doc":"The DOM mousewheel event is fired asynchronously when mouse wheel or similar device is operated. It's represented by the MouseWheelEvent interface."},onmouseup:{"!type":"?","!url":"https://developer.mozilla.org/en/docs/DOM/window.onmouseup","!doc":"An event handler for the mouseup event on the window."},onmouseover:{"!type":"?","!url":"https://developer.mozilla.org/en/docs/DOM/element.onmouseover","!doc":"The onmouseover property returns the onMouseOver event handler code on the current element."},onmouseout:{"!type":"?","!url":"https://developer.mozilla.org/en/docs/DOM/element.onmouseout","!doc":"The onmouseout property returns the onMouseOut event handler code on the current element."},onmousemove:{"!type":"?","!url":"https://developer.mozilla.org/en/docs/DOM/element.onmousemove","!doc":"The onmousemove property returns the mousemove event handler code on the current element."},onmousedown:{"!type":"?","!url":"https://developer.mozilla.org/en/docs/DOM/window.onmousedown","!doc":"An event handler for the mousedown event on the window."},onclick:{"!type":"?","!url":"https://developer.mozilla.org/en/docs/DOM/element.onclick","!doc":"The onclick property returns the onClick event handler code on the current element."},ondblclick:{"!type":"?","!url":"https://developer.mozilla.org/en/docs/DOM/element.ondblclick","!doc":"The ondblclick property returns the onDblClick event handler code on the current element."},onmessage:{"!type":"?","!url":"https://developer.mozilla.org/en/docs/DOM/Worker","!doc":"Dedicated Web Workers provide a simple means for web content to run scripts in background threads.  Once created, a worker can send messages to the spawning task by posting messages to an event handler specified by the creator."},onkeyup:{"!type":"?","!url":"https://developer.mozilla.org/en/docs/DOM/element.onkeyup","!doc":"The onkeyup property returns the onKeyUp event handler code for the current element."},onkeypress:{"!type":"?","!url":"https://developer.mozilla.org/en/docs/DOM/element.onkeypress","!doc":"The onkeypress property sets and returns the onKeyPress event handler code for the current element."},onkeydown:{"!type":"?","!url":"https://developer.mozilla.org/en/docs/DOM/window.onkeydown","!doc":"An event handler for the keydown event on the window."},oninput:{"!type":"?","!url":"https://developer.mozilla.org/en/docs/DOM/DOM_event_reference/input","!doc":"The DOM input event is fired synchronously when the value of an <input> or <textarea> element is changed. Additionally, it's also fired on contenteditable editors when its contents are changed. In this case, the event target is the editing host element. If there are two or more elements which have contenteditable as true, \"editing host\" is the nearest ancestor element whose parent isn't editable. Similarly, it's also fired on root element of designMode editors."},onpopstate:{"!type":"?","!url":"https://developer.mozilla.org/en/docs/DOM/window.onpopstate","!doc":"An event handler for the popstate event on the window."},onhashchange:{"!type":"?","!url":"https://developer.mozilla.org/en/docs/DOM/window.onhashchange","!doc":"The hashchange event fires when a window's hash changes."},onfocus:{"!type":"?","!url":"https://developer.mozilla.org/en/docs/DOM/element.onfocus","!doc":"The onfocus property returns the onFocus event handler code on the current element."},onblur:{"!type":"?","!url":"https://developer.mozilla.org/en/docs/DOM/element.onblur","!doc":"The onblur property returns the onBlur event handler code, if any, that exists on the current element."},onerror:{"!type":"?","!url":"https://developer.mozilla.org/en/docs/DOM/window.onerror","!doc":"An event handler for runtime script errors."},ondrop:{"!type":"?","!url":"https://developer.mozilla.org/en-US/docs/DOM/Mozilla_event_reference/drop","!doc":"The drop event is fired when an element or text selection is dropped on a valid drop target."},ondragstart:{"!type":"?","!url":"https://developer.mozilla.org/en-US/docs/DOM/Mozilla_event_reference/dragstart","!doc":"The dragstart event is fired when the user starts dragging an element or text selection."},ondragover:{"!type":"?","!url":"https://developer.mozilla.org/en-US/docs/DOM/Mozilla_event_reference/dragover","!doc":"The dragover event is fired when an element or text selection is being dragged over a valid drop target (every few hundred milliseconds)."},ondragleave:{"!type":"?","!url":"https://developer.mozilla.org/en-US/docs/DOM/Mozilla_event_reference/dragleave","!doc":"The dragleave event is fired when a dragged element or text selection leaves a valid drop target."},ondragenter:{"!type":"?","!url":"https://developer.mozilla.org/en-US/docs/DOM/Mozilla_event_reference/dragenter","!doc":"The dragenter event is fired when a dragged element or text selection enters a valid drop target."},ondragend:{"!type":"?","!url":"https://developer.mozilla.org/en-US/docs/DOM/Mozilla_event_reference/dragend","!doc":"The dragend event is fired when a drag operation is being ended (by releasing a mouse button or hitting the escape key)."},ondrag:{"!type":"?","!url":"https://developer.mozilla.org/en-US/docs/DOM/Mozilla_event_reference/drag","!doc":"The drag event is fired when an element or text selection is being dragged (every few hundred milliseconds)."},oncontextmenu:{"!type":"?","!url":"https://developer.mozilla.org/en/docs/DOM/window.oncontextmenu","!doc":'An event handler property for right-click events on the window. Unless the default behavior is prevented, the browser context menu will activate (though IE8 has a bug with this and will not activate the context menu if a contextmenu event handler is defined). Note that this event will occur with any non-disabled right-click event and does not depend on an element possessing the "contextmenu" attribute.'},onchange:{"!type":"?","!url":"https://developer.mozilla.org/en/docs/DOM/element.onchange","!doc":"The onchange property sets and returns the onChange event handler code for the current element."},onbeforeunload:{"!type":"?","!url":"https://developer.mozilla.org/en/docs/DOM/window.onbeforeunload","!doc":"An event that fires when a window is about to unload its resources. The document is still visible and the event is still cancelable."},onabort:{"!type":"?","!url":"https://developer.mozilla.org/en/docs/DOM/window.onabort","!doc":"An event handler for abort events sent to the window."},getSelection:{"!type":"fn() -> +Selection","!url":"https://developer.mozilla.org/en/docs/DOM/window.getSelection","!doc":"Returns a selection object representing the range of text selected by the user. "},alert:{"!type":"fn(message: string)","!url":"https://developer.mozilla.org/en/docs/DOM/window.alert","!doc":"Display an alert dialog with the specified content and an OK button."},confirm:{"!type":"fn(message: string) -> bool","!url":"https://developer.mozilla.org/en/docs/DOM/window.confirm","!doc":"Displays a modal dialog with a message and two buttons, OK and Cancel."},prompt:{"!type":"fn(message: string, value: string) -> string","!url":"https://developer.mozilla.org/en/docs/DOM/window.prompt","!doc":"Displays a dialog with a message prompting the user to input some text."},scrollBy:{"!type":"fn(x: number, y: number)","!url":"https://developer.mozilla.org/en/docs/DOM/window.scrollBy","!doc":"Scrolls the document in the window by the given amount."},scrollTo:{"!type":"fn(x: number, y: number)","!url":"https://developer.mozilla.org/en/docs/DOM/window.scrollTo","!doc":"Scrolls to a particular set of coordinates in the document."},scroll:{"!type":"fn(x: number, y: number)","!url":"https://developer.mozilla.org/en/docs/DOM/window.scroll","!doc":"Scrolls the window to a particular place in the document."},setTimeout:{"!type":"fn(f: fn(), ms: number) -> number","!url":"https://developer.mozilla.org/en/docs/DOM/window.setTimeout","!doc":"Calls a function or executes a code snippet after specified delay."},clearTimeout:{"!type":"fn(timeout: number)","!url":"https://developer.mozilla.org/en/docs/DOM/window.clearTimeout","!doc":"Clears the delay set by window.setTimeout()."},setInterval:{"!type":"fn(f: fn(), ms: number) -> number","!url":"https://developer.mozilla.org/en/docs/DOM/window.setInterval","!doc":"Calls a function or executes a code snippet repeatedly, with a fixed time delay between each call to that function."},clearInterval:{"!type":"fn(interval: number)","!url":"https://developer.mozilla.org/en/docs/DOM/window.clearInterval","!doc":"Cancels repeated action which was set up using setInterval."},atob:{"!type":"fn(encoded: string) -> string","!url":"https://developer.mozilla.org/en/docs/DOM/window.atob","!doc":"Decodes a string of data which has been encoded using base-64 encoding."},btoa:{"!type":"fn(data: string) -> string","!url":"https://developer.mozilla.org/en/docs/DOM/window.btoa","!doc":"Creates a base-64 encoded ASCII string from a string of binary data."},addEventListener:{"!type":"fn(type: string, listener: fn(e: +Event), capture: bool)","!url":"https://developer.mozilla.org/en/docs/DOM/EventTarget.addEventListener","!doc":"Registers a single event listener on a single target. The event target may be a single element in a document, the document itself, a window, or an XMLHttpRequest."},removeEventListener:{"!type":"fn(type: string, listener: fn(), capture: bool)","!url":"https://developer.mozilla.org/en/docs/DOM/EventTarget.removeEventListener","!doc":"Allows the removal of event listeners from the event target."},dispatchEvent:{"!type":"fn(event: +Event) -> bool","!url":"https://developer.mozilla.org/en/docs/DOM/EventTarget.dispatchEvent","!doc":"Dispatches an event into the event system. The event is subject to the same capturing and bubbling behavior as directly dispatched events."},getComputedStyle:{"!type":"fn(node: +Element, pseudo?: string) -> Element.prototype.style","!url":"https://developer.mozilla.org/en/docs/DOM/window.getComputedStyle","!doc":"Gives the final used values of all the CSS properties of an element."},CanvasRenderingContext2D:{canvas:"+Element",width:"number",height:"number",commit:"fn()",save:"fn()",restore:"fn()",currentTransform:"?",scale:"fn(x: number, y: number)",rotate:"fn(angle: number)",translate:"fn(x: number, y: number)",transform:"fn(a: number, b: number, c: number, d: number, e: number, f: number)",setTransform:"fn(a: number, b: number, c: number, d: number, e: number, f: number)",resetTransform:"fn()",globalAlpha:"number",globalCompositeOperation:"string",imageSmoothingEnabled:"bool",strokeStyle:"string",fillStyle:"string",createLinearGradient:"fn(x0: number, y0: number, x1: number, y1: number) -> ?",createPattern:"fn(image: ?, repetition: string) -> ?",shadowOffsetX:"number",shadowOffsetY:"number",shadowBlur:"number",shadowColor:"string",clearRect:"fn(x: number, y: number, w: number, h: number)",fillRect:"fn(x: number, y: number, w: number, h: number)",strokeRect:"fn(x: number, y: number, w: number, h: number)",fillRule:"string",fill:"fn()",beginPath:"fn()",stroke:"fn()",clip:"fn()",resetClip:"fn()",fillText:"fn(text: string, x: number, y: number, maxWidth: number)",strokeText:"fn(text: string, x: number, y: number, maxWidth: number)",measureText:"fn(text: string) -> ?",drawImage:"fn(image: ?, dx: number, dy: number)",createImageData:"fn(sw: number, sh: number) -> ?",getImageData:"fn(sx: number, sy: number, sw: number, sh: number) -> ?",putImageData:"fn(imagedata: ?, dx: number, dy: number)",lineWidth:"number",lineCap:"string",lineJoin:"string",miterLimit:"number",setLineDash:"fn(segments: [number])",getLineDash:"fn() -> [number]",lineDashOffset:"number",font:"string",textAlign:"string",textBaseline:"string",direction:"string",closePath:"fn()",moveTo:"fn(x: number, y: number)",lineTo:"fn(x: number, y: number)",quadraticCurveTo:"fn(cpx: number, cpy: number, x: number, y: number)",bezierCurveTo:"fn(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number)",arcTo:"fn(x1: number, y1: number, x2: number, y2: number, radius: number)",rect:"fn(x: number, y: number, w: number, h: number)",arc:"fn(x: number, y: number, radius: number, startAngle: number, endAngle: number, anticlockwise?: bool)",ellipse:"fn(x: number, y: number, radiusX: number, radiusY: number, rotation: number, startAngle: number, endAngle: number, anticlockwise: bool)"},Image:{"!type":"fn(width?: number, height?: number) -> +HTMLImageElement","!url":"https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement/Image","!doc":"Image Element constructor. Accepts two optional parameters: Image([unsigned long width, unsigned long height]). Returns an HTMLImageElement instance just as document.createElement('img') would."}}
}),define("json!tern/defs/chai.json",function(){return{"!name":"chai",chai:{should:{Language:{"!doc":"Language Chains\n\n\n\nThe following are provided as chainable getters to\nimprove the readability of your assertions. They\ndo not provide an testing capability unless they\nhave been overwritten by a plugin.Chains\n\n","!url":"http://chaijs.com/api/bdd/#Language","!type":"fn() -> bool"},not:{"!doc":".not\n\n\n\nNegates any of assertions following in the chain.\n\nexpect(foo).to.not.equal('bar');\nexpect(goodFn).to.not.throw(Error);\nexpect({ foo: 'baz' }).to.have.property('foo')\n  .and.not.equal('bar');","!url":"http://chaijs.com/api/bdd/#not","!type":"fn() -> bool"},deep:{"!doc":".deep\n\n\n\nSets the deep flag, later used by the equal and\nproperty assertions.\n\nexpect(foo).to.deep.equal({ bar: 'baz' });\nexpect({ foo: { bar: { baz: 'quux' } } })\n  .to.have.deep.property('foo.bar.baz', 'quux');","!url":"http://chaijs.com/api/bdd/#deep","!type":"fn() -> bool"},a:{"!doc":".a(type)\n\n  * @param { String } type\n  * @param { String } message_optional_\n\nThe a and an assertions are aliases that can be\nused either as language chains or to assert a value's\ntype.\n\n// typeof\nexpect('test').to.be.a('string');\nexpect({ foo: 'bar' }).to.be.an('object');\nexpect(null).to.be.a('null');\nexpect(undefined).to.be.an('undefined');\n\n// language chain\nexpect(foo).to.be.an.instanceof(Foo);","!url":"http://chaijs.com/api/bdd/#a","!type":"fn(type: string, message: string) -> bool"},include:{"!doc":".include(value)\n\n  * @param { Object | String | Number } obj\n  * @param { String } message_optional_\n\nThe include and contain assertions can be used as either property\nbased language chains or as methods to assert the inclusion of an object\nin an array or a substring in a string. When used as language chains,\nthey toggle the contain flag for the keys assertion.\n\nexpect([1,2,3]).to.include(2);\nexpect('foobar').to.contain('foo');\nexpect({ foo: 'bar', hello: 'universe' }).to.include.keys('foo');","!url":"http://chaijs.com/api/bdd/#include","!type":"fn(obj: object, message: string) -> bool"},ok:{"!doc":".ok\n\n\n\nAsserts that the target is truthy.\n\nexpect('everthing').to.be.ok;\nexpect(1).to.be.ok;\nexpect(false).to.not.be.ok;\nexpect(undefined).to.not.be.ok;\nexpect(null).to.not.be.ok;","!url":"http://chaijs.com/api/bdd/#ok","!type":"fn() -> bool"},"true":{"!doc":".true\n\n\n\nAsserts that the target is true.\n\nexpect(true).to.be.true;\nexpect(1).to.not.be.true;","!url":"http://chaijs.com/api/bdd/#true","!type":"fn() -> bool"},"false":{"!doc":".false\n\n\n\nAsserts that the target is false.\n\nexpect(false).to.be.false;\nexpect(0).to.not.be.false;","!url":"http://chaijs.com/api/bdd/#false","!type":"fn() -> bool"},"null":{"!doc":".null\n\n\n\nAsserts that the target is null.\n\nexpect(null).to.be.null;\nexpect(undefined).not.to.be.null;","!url":"http://chaijs.com/api/bdd/#null","!type":"fn() -> bool"},undefined:{"!doc":".undefined\n\n\n\nAsserts that the target is undefined.\n\nexpect(undefined).to.be.undefined;\nexpect(null).to.not.be.undefined;","!url":"http://chaijs.com/api/bdd/#undefined","!type":"fn() -> bool"},exist:{"!doc":".exist\n\n\n\nAsserts that the target is neither null nor undefined.\n\nvar foo = 'hi'\n  , bar = null\n  , baz;\n\nexpect(foo).to.exist;\nexpect(bar).to.not.exist;\nexpect(baz).to.not.exist;","!url":"http://chaijs.com/api/bdd/#exist","!type":"fn() -> bool"},empty:{"!doc":".empty\n\n\n\nAsserts that the target's length is 0. For arrays, it checks\nthe length property. For objects, it gets the count of\nenumerable keys.\n\nexpect([]).to.be.empty;\nexpect('').to.be.empty;\nexpect({}).to.be.empty;","!url":"http://chaijs.com/api/bdd/#empty","!type":"fn() -> bool"},arguments:{"!doc":".arguments\n\n\n\nAsserts that the target is an arguments object.\n\nfunction test () {\n  expect(arguments).to.be.arguments;\n}","!url":"http://chaijs.com/api/bdd/#arguments","!type":"fn() -> bool"},equal:{"!doc":".equal(value)\n\n  * @param { Mixed } value\n  * @param { String } message_optional_\n\nAsserts that the target is strictly equal (===) to value.\nAlternately, if the deep flag is set, asserts that\nthe target is deeply equal to value.\n\nexpect('hello').to.equal('hello');\nexpect(42).to.equal(42);\nexpect(1).to.not.equal(true);\nexpect({ foo: 'bar' }).to.not.equal({ foo: 'bar' });\nexpect({ foo: 'bar' }).to.deep.equal({ foo: 'bar' });","!url":"http://chaijs.com/api/bdd/#equal","!type":"fn(value: mixed, message: string) -> bool"},eql:{"!doc":".eql(value)\n\n  * @param { Mixed } value\n  * @param { String } message_optional_\n\nAsserts that the target is deeply equal to value.\n\nexpect({ foo: 'bar' }).to.eql({ foo: 'bar' });\nexpect([ 1, 2, 3 ]).to.eql([ 1, 2, 3 ]);","!url":"http://chaijs.com/api/bdd/#eql","!type":"fn(value: mixed, message: string) -> bool"},above:{"!doc":".above(value)\n\n  * @param { Number } value\n  * @param { String } message_optional_\n\nAsserts that the target is greater than value.Can also be used in conjunction with length to\nassert a minimum length. The benefit being a\nmore informative error message than if the length\nwas supplied directly.\n\nexpect(10).to.be.above(5);expect('foo').to.have.length.above(2);\nexpect([ 1, 2, 3 ]).to.have.length.above(2);","!url":"http://chaijs.com/api/bdd/#above","!type":"fn(value: number, message: string) -> bool"},least:{"!doc":".least(value)\n\n  * @param { Number } value\n  * @param { String } message_optional_\n\nAsserts that the target is greater than or equal to value.Can also be used in conjunction with length to\nassert a minimum length. The benefit being a\nmore informative error message than if the length\nwas supplied directly.\n\nexpect(10).to.be.at.least(10);expect('foo').to.have.length.of.at.least(2);\nexpect([ 1, 2, 3 ]).to.have.length.of.at.least(3);","!url":"http://chaijs.com/api/bdd/#least","!type":"fn(value: number, message: string) -> bool"},below:{"!doc":".below(value)\n\n  * @param { Number } value\n  * @param { String } message_optional_\n\nAsserts that the target is less than value.Can also be used in conjunction with length to\nassert a maximum length. The benefit being a\nmore informative error message than if the length\nwas supplied directly.\n\nexpect(5).to.be.below(10);expect('foo').to.have.length.below(4);\nexpect([ 1, 2, 3 ]).to.have.length.below(4);","!url":"http://chaijs.com/api/bdd/#below","!type":"fn(value: number, message: string) -> bool"},most:{"!doc":".most(value)\n\n  * @param { Number } value\n  * @param { String } message_optional_\n\nAsserts that the target is less than or equal to value.Can also be used in conjunction with length to\nassert a maximum length. The benefit being a\nmore informative error message than if the length\nwas supplied directly.\n\nexpect(5).to.be.at.most(5);expect('foo').to.have.length.of.at.most(4);\nexpect([ 1, 2, 3 ]).to.have.length.of.at.most(3);","!url":"http://chaijs.com/api/bdd/#most","!type":"fn(value: number, message: string) -> bool"},within:{"!doc":".within(start, finish)\n\n  * @param { Number } startlowerbound inclusive\n  * @param { Number } finishupperbound inclusive\n  * @param { String } message_optional_\n\nAsserts that the target is within a range.Can also be used in conjunction with length to\nassert a length range. The benefit being a\nmore informative error message than if the length\nwas supplied directly.\n\nexpect(7).to.be.within(5,10);expect('foo').to.have.length.within(2,4);\nexpect([ 1, 2, 3 ]).to.have.length.within(2,4);","!url":"http://chaijs.com/api/bdd/#within","!type":"fn(start: number, finish: number, message: string) -> bool"},"instanceof":{"!doc":".instanceof(constructor)\n\n  * @param { Constructor } constructor\n  * @param { String } message_optional_\n\nAsserts that the target is an instance of constructor.\n\nvar Tea = function (name) { this.name = name; }\n  , Chai = new Tea('chai');\n\nexpect(Chai).to.be.an.instanceof(Tea);\nexpect([ 1, 2, 3 ]).to.be.instanceof(Array);","!url":"http://chaijs.com/api/bdd/#instanceof","!type":"fn(constructor: constructor, message: string) -> bool"},property:{"!doc":".property(name, [value])\n\n  * @param { String } name\n  * @param { Mixed } value(optional)\n  * @param { String } message_optional_\n\nAsserts that the target has a property name, optionally asserting that\nthe value of that property is strictly equal to  value.\nIf the deep flag is set, you can use dot- and bracket-notation for deep\nreferences into objects and arrays.You can also use an array as the starting point of a deep.property\nassertion, or traverse nested arrays.Furthermore, property changes the subject of the assertion\nto be the value of that property from the original object. This\npermits for further chainable assertions on that property.\n\n// simple referencing\nvar obj = { foo: 'bar' };\nexpect(obj).to.have.property('foo');\nexpect(obj).to.have.property('foo', 'bar');\n\n// deep referencing\nvar deepObj = {\n    green: { tea: 'matcha' }\n  , teas: [ 'chai', 'matcha', { tea: 'konacha' } ]\n};\n\nexpect(deepObj).to.have.deep.property('green.tea', 'matcha');\nexpect(deepObj).to.have.deep.property('teas[1]', 'matcha');\nexpect(deepObj).to.have.deep.property('teas[2].tea', 'konacha');var arr = [\n    [ 'chai', 'matcha', 'konacha' ]\n  , [ { tea: 'chai' }\n    , { tea: 'matcha' }\n    , { tea: 'konacha' } ]\n];\n\nexpect(arr).to.have.deep.property('[0][1]', 'matcha');\nexpect(arr).to.have.deep.property('[1][2].tea', 'konacha');expect(obj).to.have.property('foo')\n  .that.is.a('string');\nexpect(deepObj).to.have.property('green')\n  .that.is.an('object')\n  .that.deep.equals({ tea: 'matcha' });\nexpect(deepObj).to.have.property('teas')\n  .that.is.an('array')\n  .with.deep.property('[2]')\n    .that.deep.equals({ tea: 'konacha' });","!url":"http://chaijs.com/api/bdd/#property","!type":"fn(name: string, value: [mixed], message: string) -> bool"},ownProperty:{"!doc":".ownProperty(name)\n\n  * @param { String } name\n  * @param { String } message_optional_\n\nAsserts that the target has an own property name.\n\nexpect('test').to.have.ownProperty('length');","!url":"http://chaijs.com/api/bdd/#ownProperty","!type":"fn(name: string, message: string) -> bool"},length:{"!doc":".length(value)\n\n  * @param { Number } length\n  * @param { String } message_optional_\n\nAsserts that the target's length property has\nthe expected value.Can also be used as a chain precursor to a value\ncomparison for the length property.\n\nexpect([ 1, 2, 3]).to.have.length(3);\nexpect('foobar').to.have.length(6);expect('foo').to.have.length.above(2);\nexpect([ 1, 2, 3 ]).to.have.length.above(2);\nexpect('foo').to.have.length.below(4);\nexpect([ 1, 2, 3 ]).to.have.length.below(4);\nexpect('foo').to.have.length.within(2,4);\nexpect([ 1, 2, 3 ]).to.have.length.within(2,4);","!url":"http://chaijs.com/api/bdd/#length","!type":"fn(length: number, message: string) -> bool"},match:{"!doc":".match(regexp)\n\n  * @param { RegExp } RegularExpression\n  * @param { String } message_optional_\n\nAsserts that the target matches a regular expression.\n\nexpect('foobar').to.match(/^foo/);","!url":"http://chaijs.com/api/bdd/#match","!type":"fn(RegularExpression: regexp, message: string) -> bool"},string:{"!doc":".string(string)\n\n  * @param { String } string\n  * @param { String } message_optional_\n\nAsserts that the string target contains another string.\n\nexpect('foobar').to.have.string('bar');","!url":"http://chaijs.com/api/bdd/#string","!type":"fn(string: string, message: string) -> bool"},keys:{"!doc":".keys(key1, [key2], [...])\n\n  * @param { String... | Array } keys\n\nAsserts that the target has exactly the given keys, or\nasserts the inclusion of some keys when using the\ninclude or contain modifiers.\n\nexpect({ foo: 1, bar: 2 }).to.have.keys(['foo', 'bar']);\nexpect({ foo: 1, bar: 2, baz: 3 }).to.contain.keys('foo', 'bar');","!url":"http://chaijs.com/api/bdd/#keys","!type":"fn(keys: string) -> bool"},"throw":{"!doc":".throw(constructor)\n\n  * @param { ErrorConstructor } constructor\n  * @param { String | RegExp } expectederror message\n  * @param { String } message_optional_\n  * @seehttps://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error#Error_types  \n\nAsserts that the function target will throw a specific error, or specific type of error\n(as determined using instanceof), optionally with a RegExp or string inclusion test\nfor the error's message.Please note that when a throw expectation is negated, it will check each\nparameter independently, starting with error constructor type. The appropriate way\nto check for the existence of a type of error but for a message that does not match\nis to use and.\n\nvar err = new ReferenceError('This is a bad function.');\nvar fn = function () { throw err; }\nexpect(fn).to.throw(ReferenceError);\nexpect(fn).to.throw(Error);\nexpect(fn).to.throw(/bad function/);\nexpect(fn).to.not.throw('good function');\nexpect(fn).to.throw(ReferenceError, /bad function/);\nexpect(fn).to.throw(err);\nexpect(fn).to.not.throw(new RangeError('Out of range.'));expect(fn).to.throw(ReferenceError)\n   .and.not.throw(/good function/);","!url":"http://chaijs.com/api/bdd/#throw","!type":"fn(constructor: errorconstructor, expected: string, message: string) -> bool"},respondTo:{"!doc":".respondTo(method)\n\n  * @param { String } method\n  * @param { String } message_optional_\n\nAsserts that the object or class target will respond to a method.To check if a constructor will respond to a static function,\nset the itself flag.\n\nKlass.prototype.bar = function(){};\nexpect(Klass).to.respondTo('bar');\nexpect(obj).to.respondTo('bar');Klass.baz = function(){};\nexpect(Klass).itself.to.respondTo('baz');","!url":"http://chaijs.com/api/bdd/#respondTo","!type":"fn(method: string, message: string) -> bool"},itself:{"!doc":".itself\n\n\n\nSets the itself flag, later used by the respondTo assertion.\n\nfunction Foo() {}\nFoo.bar = function() {}\nFoo.prototype.baz = function() {}\n\nexpect(Foo).itself.to.respondTo('bar');\nexpect(Foo).itself.not.to.respondTo('baz');","!url":"http://chaijs.com/api/bdd/#itself","!type":"fn() -> bool"},satisfy:{"!doc":".satisfy(method)\n\n  * @param { Function } matcher\n  * @param { String } message_optional_\n\nAsserts that the target passes a given truth test.\n\nexpect(1).to.satisfy(function(num) { return num > 0; });","!url":"http://chaijs.com/api/bdd/#satisfy","!type":"fn(matcher: function, message: string) -> bool"},closeTo:{"!doc":".closeTo(expected, delta)\n\n  * @param { Number } expected\n  * @param { Number } delta\n  * @param { String } message_optional_\n\nAsserts that the target is equal expected, to within a +/- delta range.\n\nexpect(1.5).to.be.closeTo(1, 0.5);","!url":"http://chaijs.com/api/bdd/#closeTo","!type":"fn(expected: number, delta: number, message: string) -> bool"},members:{"!doc":".members(set)\n\n  * @param { Array } set\n  * @param { String } message_optional_\n\nAsserts that the target is a superset of set,\nor that the target and set have the same members.\n\nexpect([1, 2, 3]).to.include.members([3, 2]);\nexpect([1, 2, 3]).to.not.include.members([3, 2, 8]);\n\nexpect([4, 2]).to.have.members([2, 4]);\nexpect([5, 2]).to.not.have.members([5, 2, 1]);","!url":"http://chaijs.com/api/bdd/#members","!type":"fn(set: array, message: string) -> bool"}},assert:{assert:{"!doc":"assert(expression, message)\n\n  * @param { Mixed } expressionto test for truthiness\n  * @param { String } messageto display on error\n\nWrite your own test expressions.\n\nassert('foo' !== 'bar', 'foo is not bar');\nassert(Array.isArray([]), 'empty arrays are arrays');","!url":"http://chaijs.com/api/assert/#assert","!type":"fn(expression: mixed, message: string) -> bool"},fail:{"!doc":".fail(actual, expected, [message], [operator])\n\n  * @param { Mixed } actual\n  * @param { Mixed } expected\n  * @param { String } message\n  * @param { String } operator\n\nThrow a failure. Node.js assert module-compatible.\n\n","!url":"http://chaijs.com/api/assert/#fail","!type":"fn(actual: mixed, expected: mixed, message: [string], operator: [string]) -> bool"},ok:{"!doc":".ok(object, [message])\n\n  * @param { Mixed } objectto test\n  * @param { String } message\n\nAsserts that object is truthy.\n\nassert.ok('everything', 'everything is ok');\nassert.ok(false, 'this will fail');","!url":"http://chaijs.com/api/assert/#ok","!type":"fn(object: mixed, message: [string]) -> bool"},notOk:{"!doc":".notOk(object, [message])\n\n  * @param { Mixed } objectto test\n  * @param { String } message\n\nAsserts that object is falsy.\n\nassert.notOk('everything', 'this will fail');\nassert.notOk(false, 'this will pass');","!url":"http://chaijs.com/api/assert/#notOk","!type":"fn(object: mixed, message: [string]) -> bool"},equal:{"!doc":".equal(actual, expected, [message])\n\n  * @param { Mixed } actual\n  * @param { Mixed } expected\n  * @param { String } message\n\nAsserts non-strict equality (==) of actual and expected.\n\nassert.equal(3, '3', '== coerces values to strings');","!url":"http://chaijs.com/api/assert/#equal","!type":"fn(actual: mixed, expected: mixed, message: [string]) -> bool"},notEqual:{"!doc":".notEqual(actual, expected, [message])\n\n  * @param { Mixed } actual\n  * @param { Mixed } expected\n  * @param { String } message\n\nAsserts non-strict inequality (!=) of actual and expected.\n\nassert.notEqual(3, 4, 'these numbers are not equal');","!url":"http://chaijs.com/api/assert/#notEqual","!type":"fn(actual: mixed, expected: mixed, message: [string]) -> bool"},strictEqual:{"!doc":".strictEqual(actual, expected, [message])\n\n  * @param { Mixed } actual\n  * @param { Mixed } expected\n  * @param { String } message\n\nAsserts strict equality (===) of actual and expected.\n\nassert.strictEqual(true, true, 'these booleans are strictly equal');","!url":"http://chaijs.com/api/assert/#strictEqual","!type":"fn(actual: mixed, expected: mixed, message: [string]) -> bool"},notStrictEqual:{"!doc":".notStrictEqual(actual, expected, [message])\n\n  * @param { Mixed } actual\n  * @param { Mixed } expected\n  * @param { String } message\n\nAsserts strict inequality (!==) of actual and expected.\n\nassert.notStrictEqual(3, '3', 'no coercion for strict equality');","!url":"http://chaijs.com/api/assert/#notStrictEqual","!type":"fn(actual: mixed, expected: mixed, message: [string]) -> bool"},deepEqual:{"!doc":".deepEqual(actual, expected, [message])\n\n  * @param { Mixed } actual\n  * @param { Mixed } expected\n  * @param { String } message\n\nAsserts that actual is deeply equal to expected.\n\nassert.deepEqual({ tea: 'green' }, { tea: 'green' });","!url":"http://chaijs.com/api/assert/#deepEqual","!type":"fn(actual: mixed, expected: mixed, message: [string]) -> bool"},notDeepEqual:{"!doc":".notDeepEqual(actual, expected, [message])\n\n  * @param { Mixed } actual\n  * @param { Mixed } expected\n  * @param { String } message\n\nAssert that actual is not deeply equal to expected.\n\nassert.notDeepEqual({ tea: 'green' }, { tea: 'jasmine' });","!url":"http://chaijs.com/api/assert/#notDeepEqual","!type":"fn(actual: mixed, expected: mixed, message: [string]) -> bool"},isTrue:{"!doc":".isTrue(value, [message])\n\n  * @param { Mixed } value\n  * @param { String } message\n\nAsserts that value is true.\n\nvar teaServed = true;\nassert.isTrue(teaServed, 'the tea has been served');","!url":"http://chaijs.com/api/assert/#isTrue","!type":"fn(value: mixed, message: [string]) -> bool"},isFalse:{"!doc":".isFalse(value, [message])\n\n  * @param { Mixed } value\n  * @param { String } message\n\nAsserts that value is false.\n\nvar teaServed = false;\nassert.isFalse(teaServed, 'no tea yet? hmm...');","!url":"http://chaijs.com/api/assert/#isFalse","!type":"fn(value: mixed, message: [string]) -> bool"},isNull:{"!doc":".isNull(value, [message])\n\n  * @param { Mixed } value\n  * @param { String } message\n\nAsserts that value is null.\n\nassert.isNull(err, 'there was no error');","!url":"http://chaijs.com/api/assert/#isNull","!type":"fn(value: mixed, message: [string]) -> bool"},isNotNull:{"!doc":".isNotNull(value, [message])\n\n  * @param { Mixed } value\n  * @param { String } message\n\nAsserts that value is not null.\n\nvar tea = 'tasty chai';\nassert.isNotNull(tea, 'great, time for tea!');","!url":"http://chaijs.com/api/assert/#isNotNull","!type":"fn(value: mixed, message: [string]) -> bool"},isUndefined:{"!doc":".isUndefined(value, [message])\n\n  * @param { Mixed } value\n  * @param { String } message\n\nAsserts that value is undefined.\n\nvar tea;\nassert.isUndefined(tea, 'no tea defined');","!url":"http://chaijs.com/api/assert/#isUndefined","!type":"fn(value: mixed, message: [string]) -> bool"},isDefined:{"!doc":".isDefined(value, [message])\n\n  * @param { Mixed } value\n  * @param { String } message\n\nAsserts that value is not undefined.\n\nvar tea = 'cup of chai';\nassert.isDefined(tea, 'tea has been defined');","!url":"http://chaijs.com/api/assert/#isDefined","!type":"fn(value: mixed, message: [string]) -> bool"},isFunction:{"!doc":".isFunction(value, [message])\n\n  * @param { Mixed } value\n  * @param { String } message\n\nAsserts that value is a function.\n\nfunction serveTea() { return 'cup of tea'; };\nassert.isFunction(serveTea, 'great, we can have tea now');","!url":"http://chaijs.com/api/assert/#isFunction","!type":"fn(value: mixed, message: [string]) -> bool"},isNotFunction:{"!doc":".isNotFunction(value, [message])\n\n  * @param { Mixed } value\n  * @param { String } message\n\nAsserts that value is not a function.\n\nvar serveTea = [ 'heat', 'pour', 'sip' ];\nassert.isNotFunction(serveTea, 'great, we have listed the steps');","!url":"http://chaijs.com/api/assert/#isNotFunction","!type":"fn(value: mixed, message: [string]) -> bool"},isObject:{"!doc":".isObject(value, [message])\n\n  * @param { Mixed } value\n  * @param { String } message\n\nAsserts that value is an object (as revealed by\nObject.prototype.toString).\n\nvar selection = { name: 'Chai', serve: 'with spices' };\nassert.isObject(selection, 'tea selection is an object');","!url":"http://chaijs.com/api/assert/#isObject","!type":"fn(value: mixed, message: [string]) -> bool"},isNotObject:{"!doc":".isNotObject(value, [message])\n\n  * @param { Mixed } value\n  * @param { String } message\n\nAsserts that value is not an object.\n\nvar selection = 'chai'\nassert.isObject(selection, 'tea selection is not an object');\nassert.isObject(null, 'null is not an object');","!url":"http://chaijs.com/api/assert/#isNotObject","!type":"fn(value: mixed, message: [string]) -> bool"},isArray:{"!doc":".isArray(value, [message])\n\n  * @param { Mixed } value\n  * @param { String } message\n\nAsserts that value is an array.\n\nvar menu = [ 'green', 'chai', 'oolong' ];\nassert.isArray(menu, 'what kind of tea do we want?');","!url":"http://chaijs.com/api/assert/#isArray","!type":"fn(value: mixed, message: [string]) -> bool"},isNotArray:{"!doc":".isNotArray(value, [message])\n\n  * @param { Mixed } value\n  * @param { String } message\n\nAsserts that value is not an array.\n\nvar menu = 'green|chai|oolong';\nassert.isNotArray(menu, 'what kind of tea do we want?');","!url":"http://chaijs.com/api/assert/#isNotArray","!type":"fn(value: mixed, message: [string]) -> bool"},isString:{"!doc":".isString(value, [message])\n\n  * @param { Mixed } value\n  * @param { String } message\n\nAsserts that value is a string.\n\nvar teaOrder = 'chai';\nassert.isString(teaOrder, 'order placed');","!url":"http://chaijs.com/api/assert/#isString","!type":"fn(value: mixed, message: [string]) -> bool"},isNotString:{"!doc":".isNotString(value, [message])\n\n  * @param { Mixed } value\n  * @param { String } message\n\nAsserts that value is not a string.\n\nvar teaOrder = 4;\nassert.isNotString(teaOrder, 'order placed');","!url":"http://chaijs.com/api/assert/#isNotString","!type":"fn(value: mixed, message: [string]) -> bool"},isNumber:{"!doc":".isNumber(value, [message])\n\n  * @param { Number } value\n  * @param { String } message\n\nAsserts that value is a number.\n\nvar cups = 2;\nassert.isNumber(cups, 'how many cups');","!url":"http://chaijs.com/api/assert/#isNumber","!type":"fn(value: number, message: [string]) -> bool"},isNotNumber:{"!doc":".isNotNumber(value, [message])\n\n  * @param { Mixed } value\n  * @param { String } message\n\nAsserts that value is not a number.\n\nvar cups = '2 cups please';\nassert.isNotNumber(cups, 'how many cups');","!url":"http://chaijs.com/api/assert/#isNotNumber","!type":"fn(value: mixed, message: [string]) -> bool"},isBoolean:{"!doc":".isBoolean(value, [message])\n\n  * @param { Mixed } value\n  * @param { String } message\n\nAsserts that value is a boolean.\n\nvar teaReady = true\n  , teaServed = false;\n\nassert.isBoolean(teaReady, 'is the tea ready');\nassert.isBoolean(teaServed, 'has tea been served');","!url":"http://chaijs.com/api/assert/#isBoolean","!type":"fn(value: mixed, message: [string]) -> bool"},isNotBoolean:{"!doc":".isNotBoolean(value, [message])\n\n  * @param { Mixed } value\n  * @param { String } message\n\nAsserts that value is not a boolean.\n\nvar teaReady = 'yep'\n  , teaServed = 'nope';\n\nassert.isNotBoolean(teaReady, 'is the tea ready');\nassert.isNotBoolean(teaServed, 'has tea been served');","!url":"http://chaijs.com/api/assert/#isNotBoolean","!type":"fn(value: mixed, message: [string]) -> bool"},typeOf:{"!doc":".typeOf(value, name, [message])\n\n  * @param { Mixed } value\n  * @param { String } name\n  * @param { String } message\n\nAsserts that value's type is name, as determined by\nObject.prototype.toString.\n\nassert.typeOf({ tea: 'chai' }, 'object', 'we have an object');\nassert.typeOf(['chai', 'jasmine'], 'array', 'we have an array');\nassert.typeOf('tea', 'string', 'we have a string');\nassert.typeOf(/tea/, 'regexp', 'we have a regular expression');\nassert.typeOf(null, 'null', 'we have a null');\nassert.typeOf(undefined, 'undefined', 'we have an undefined');","!url":"http://chaijs.com/api/assert/#typeOf","!type":"fn(value: mixed, name: string, message: [string]) -> bool"},notTypeOf:{"!doc":".notTypeOf(value, name, [message])\n\n  * @param { Mixed } value\n  * @param { String } typeofname\n  * @param { String } message\n\nAsserts that value's type is not name, as determined by\nObject.prototype.toString.\n\nassert.notTypeOf('tea', 'number', 'strings are not numbers');","!url":"http://chaijs.com/api/assert/#notTypeOf","!type":"fn(value: mixed, typeof: string, message: [string]) -> bool"},instanceOf:{"!doc":".instanceOf(object, constructor, [message])\n\n  * @param { Object } object\n  * @param { Constructor } constructor\n  * @param { String } message\n\nAsserts that value is an instance of constructor.\n\nvar Tea = function (name) { this.name = name; }\n  , chai = new Tea('chai');\n\nassert.instanceOf(chai, Tea, 'chai is an instance of tea');","!url":"http://chaijs.com/api/assert/#instanceOf","!type":"fn(object: object, constructor: constructor, message: [string]) -> bool"},notInstanceOf:{"!doc":".notInstanceOf(object, constructor, [message])\n\n  * @param { Object } object\n  * @param { Constructor } constructor\n  * @param { String } message\n\nAsserts value is not an instance of constructor.\n\nvar Tea = function (name) { this.name = name; }\n  , chai = new String('chai');\n\nassert.notInstanceOf(chai, Tea, 'chai is not an instance of tea');","!url":"http://chaijs.com/api/assert/#notInstanceOf","!type":"fn(object: object, constructor: constructor, message: [string]) -> bool"},include:{"!doc":".include(haystack, needle, [message])\n\n  * @param { Array | String } haystack\n  * @param { Mixed } needle\n  * @param { String } message\n\nAsserts that haystack includes needle. Works\nfor strings and arrays.\n\nassert.include('foobar', 'bar', 'foobar contains string \"bar\"');\nassert.include([ 1, 2, 3 ], 3, 'array contains value');","!url":"http://chaijs.com/api/assert/#include","!type":"fn(haystack: array, needle: mixed, message: [string]) -> bool"},notInclude:{"!doc":".notInclude(haystack, needle, [message])\n\n  * @param { Array | String } haystack\n  * @param { Mixed } needle\n  * @param { String } message\n\nAsserts that haystack does not include needle. Works\nfor strings and arrays.\ni\n    assert.notInclude('foobar', 'baz', 'string not include substring');\n    assert.notInclude([ 1, 2, 3 ], 4, 'array not include contain value');\n\n","!url":"http://chaijs.com/api/assert/#notInclude","!type":"fn(haystack: array, needle: mixed, message: [string]) -> bool"},match:{"!doc":".match(value, regexp, [message])\n\n  * @param { Mixed } value\n  * @param { RegExp } regexp\n  * @param { String } message\n\nAsserts that value matches the regular expression regexp.\n\nassert.match('foobar', /^foo/, 'regexp matches');","!url":"http://chaijs.com/api/assert/#match","!type":"fn(value: mixed, regexp: regexp, message: [string]) -> bool"},notMatch:{"!doc":".notMatch(value, regexp, [message])\n\n  * @param { Mixed } value\n  * @param { RegExp } regexp\n  * @param { String } message\n\nAsserts that value does not match the regular expression regexp.\n\nassert.notMatch('foobar', /^foo/, 'regexp does not match');","!url":"http://chaijs.com/api/assert/#notMatch","!type":"fn(value: mixed, regexp: regexp, message: [string]) -> bool"},property:{"!doc":".property(object, property, [message])\n\n  * @param { Object } object\n  * @param { String } property\n  * @param { String } message\n\nAsserts that object has a property named by property.\n\nassert.property({ tea: { green: 'matcha' }}, 'tea');","!url":"http://chaijs.com/api/assert/#property","!type":"fn(object: object, property: string, message: [string]) -> bool"},notProperty:{"!doc":".notProperty(object, property, [message])\n\n  * @param { Object } object\n  * @param { String } property\n  * @param { String } message\n\nAsserts that object does not have a property named by property.\n\nassert.notProperty({ tea: { green: 'matcha' }}, 'coffee');","!url":"http://chaijs.com/api/assert/#notProperty","!type":"fn(object: object, property: string, message: [string]) -> bool"},deepProperty:{"!doc":".deepProperty(object, property, [message])\n\n  * @param { Object } object\n  * @param { String } property\n  * @param { String } message\n\nAsserts that object has a property named by property, which can be a\nstring using dot- and bracket-notation for deep reference.\n\nassert.deepProperty({ tea: { green: 'matcha' }}, 'tea.green');","!url":"http://chaijs.com/api/assert/#deepProperty","!type":"fn(object: object, property: string, message: [string]) -> bool"},notDeepProperty:{"!doc":".notDeepProperty(object, property, [message])\n\n  * @param { Object } object\n  * @param { String } property\n  * @param { String } message\n\nAsserts that object does not have a property named by property, which\ncan be a string using dot- and bracket-notation for deep reference.\n\nassert.notDeepProperty({ tea: { green: 'matcha' }}, 'tea.oolong');","!url":"http://chaijs.com/api/assert/#notDeepProperty","!type":"fn(object: object, property: string, message: [string]) -> bool"},propertyVal:{"!doc":".propertyVal(object, property, value, [message])\n\n  * @param { Object } object\n  * @param { String } property\n  * @param { Mixed } value\n  * @param { String } message\n\nAsserts that object has a property named by property with value given\nby value.\n\nassert.propertyVal({ tea: 'is good' }, 'tea', 'is good');","!url":"http://chaijs.com/api/assert/#propertyVal","!type":"fn(object: object, property: string, value: mixed, message: [string]) -> bool"},propertyNotVal:{"!doc":".propertyNotVal(object, property, value, [message])\n\n  * @param { Object } object\n  * @param { String } property\n  * @param { Mixed } value\n  * @param { String } message\n\nAsserts that object has a property named by property, but with a value\ndifferent from that given by value.\n\nassert.propertyNotVal({ tea: 'is good' }, 'tea', 'is bad');","!url":"http://chaijs.com/api/assert/#propertyNotVal","!type":"fn(object: object, property: string, value: mixed, message: [string]) -> bool"},deepPropertyVal:{"!doc":".deepPropertyVal(object, property, value, [message])\n\n  * @param { Object } object\n  * @param { String } property\n  * @param { Mixed } value\n  * @param { String } message\n\nAsserts that object has a property named by property with value given\nby value. property can use dot- and bracket-notation for deep\nreference.\n\nassert.deepPropertyVal({ tea: { green: 'matcha' }}, 'tea.green', 'matcha');","!url":"http://chaijs.com/api/assert/#deepPropertyVal","!type":"fn(object: object, property: string, value: mixed, message: [string]) -> bool"},deepPropertyNotVal:{"!doc":".deepPropertyNotVal(object, property, value, [message])\n\n  * @param { Object } object\n  * @param { String } property\n  * @param { Mixed } value\n  * @param { String } message\n\nAsserts that object has a property named by property, but with a value\ndifferent from that given by value. property can use dot- and\nbracket-notation for deep reference.\n\nassert.deepPropertyNotVal({ tea: { green: 'matcha' }}, 'tea.green', 'konacha');","!url":"http://chaijs.com/api/assert/#deepPropertyNotVal","!type":"fn(object: object, property: string, value: mixed, message: [string]) -> bool"},lengthOf:{"!doc":".lengthOf(object, length, [message])\n\n  * @param { Mixed } object\n  * @param { Number } length\n  * @param { String } message\n\nAsserts that object has a length property with the expected value.\n\nassert.lengthOf([1,2,3], 3, 'array has length of 3');\nassert.lengthOf('foobar', 5, 'string has length of 6');","!url":"http://chaijs.com/api/assert/#lengthOf","!type":"fn(object: mixed, length: number, message: [string]) -> bool"},"throws":{"!doc":".throws(function, [constructor/string/regexp], [string/regexp], [message])\n\n  * @param { Function } function\n  * @param { ErrorConstructor } constructor\n  * @param { RegExp } regexp\n  * @param { String } message\n  * @seehttps://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error#Error_types  \n\nAsserts that function will throw an error that is an instance of\nconstructor, or alternately that it will throw an error with message\nmatching regexp.\n\nassert.throw(fn, 'function throws a reference error');\nassert.throw(fn, /function throws a reference error/);\nassert.throw(fn, ReferenceError);\nassert.throw(fn, ReferenceError, 'function throws a reference error');\nassert.throw(fn, ReferenceError, /function throws a reference error/);","!url":"http://chaijs.com/api/assert/#throws","!type":"fn(function: function, constructor: [errorconstructor], regexp: [regexp], message: [string]) -> bool"},doesNotThrow:{"!doc":".doesNotThrow(function, [constructor/regexp], [message])\n\n  * @param { Function } function\n  * @param { ErrorConstructor } constructor\n  * @param { RegExp } regexp\n  * @param { String } message\n  * @seehttps://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error#Error_types  \n\nAsserts that function will not throw an error that is an instance of\nconstructor, or alternately that it will not throw an error with message\nmatching regexp.\n\nassert.doesNotThrow(fn, Error, 'function does not throw');","!url":"http://chaijs.com/api/assert/#doesNotThrow","!type":"fn(function: function, constructor: [errorconstructor], regexp: [regexp], message: string) -> bool"},operator:{"!doc":".operator(val1, operator, val2, [message])\n\n  * @param { Mixed } val1\n  * @param { String } operator\n  * @param { Mixed } val2\n  * @param { String } message\n\nCompares two values using operator.\n\nassert.operator(1, '<', 2, 'everything is ok');\nassert.operator(1, '>', 2, 'this will fail');","!url":"http://chaijs.com/api/assert/#operator","!type":"fn(val1: mixed, operator: string, val2: mixed, message: [string]) -> bool"},closeTo:{"!doc":".closeTo(actual, expected, delta, [message])\n\n  * @param { Number } actual\n  * @param { Number } expected\n  * @param { Number } delta\n  * @param { String } message\n\nAsserts that the target is equal expected, to within a +/- delta range.\n\nassert.closeTo(1.5, 1, 0.5, 'numbers are close');","!url":"http://chaijs.com/api/assert/#closeTo","!type":"fn(actual: number, expected: number, delta: number, message: [string]) -> bool"},sameMembers:{"!doc":".sameMembers(set1, set2, [message])\n\n  * @param { Array } superset\n  * @param { Array } subset\n  * @param { String } message\n\nAsserts that set1 and set2 have the same members.\nOrder is not taken into account.\n\nassert.sameMembers([ 1, 2, 3 ], [ 2, 1, 3 ], 'same members');","!url":"http://chaijs.com/api/assert/#sameMembers","!type":"fn(superset: array, subset: array, message: [string]) -> bool"},includeMembers:{"!doc":".includeMembers(superset, subset, [message])\n\n  * @param { Array } superset\n  * @param { Array } subset\n  * @param { String } message\n\nAsserts that subset is included in superset.\nOrder is not taken into account.\n\nassert.includeMembers([ 1, 2, 3 ], [ 2, 1 ], 'include members');","!url":"http://chaijs.com/api/assert/#includeMembers","!type":"fn(superset: array, subset: array, message: [string]) -> bool"}},expect:{Language:{"!doc":"Language Chains\n\n\n\nThe following are provided as chainable getters to\nimprove the readability of your assertions. They\ndo not provide an testing capability unless they\nhave been overwritten by a plugin.Chains\n\n","!url":"http://chaijs.com/api/bdd/#Language","!type":"fn() -> bool"},not:{"!doc":".not\n\n\n\nNegates any of assertions following in the chain.\n\nexpect(foo).to.not.equal('bar');\nexpect(goodFn).to.not.throw(Error);\nexpect({ foo: 'baz' }).to.have.property('foo')\n  .and.not.equal('bar');","!url":"http://chaijs.com/api/bdd/#not","!type":"fn() -> bool"},deep:{"!doc":".deep\n\n\n\nSets the deep flag, later used by the equal and\nproperty assertions.\n\nexpect(foo).to.deep.equal({ bar: 'baz' });\nexpect({ foo: { bar: { baz: 'quux' } } })\n  .to.have.deep.property('foo.bar.baz', 'quux');","!url":"http://chaijs.com/api/bdd/#deep","!type":"fn() -> bool"},a:{"!doc":".a(type)\n\n  * @param { String } type\n  * @param { String } message_optional_\n\nThe a and an assertions are aliases that can be\nused either as language chains or to assert a value's\ntype.\n\n// typeof\nexpect('test').to.be.a('string');\nexpect({ foo: 'bar' }).to.be.an('object');\nexpect(null).to.be.a('null');\nexpect(undefined).to.be.an('undefined');\n\n// language chain\nexpect(foo).to.be.an.instanceof(Foo);","!url":"http://chaijs.com/api/bdd/#a","!type":"fn(type: string, message: string) -> bool"},include:{"!doc":".include(value)\n\n  * @param { Object | String | Number } obj\n  * @param { String } message_optional_\n\nThe include and contain assertions can be used as either property\nbased language chains or as methods to assert the inclusion of an object\nin an array or a substring in a string. When used as language chains,\nthey toggle the contain flag for the keys assertion.\n\nexpect([1,2,3]).to.include(2);\nexpect('foobar').to.contain('foo');\nexpect({ foo: 'bar', hello: 'universe' }).to.include.keys('foo');","!url":"http://chaijs.com/api/bdd/#include","!type":"fn(obj: object, message: string) -> bool"},ok:{"!doc":".ok\n\n\n\nAsserts that the target is truthy.\n\nexpect('everthing').to.be.ok;\nexpect(1).to.be.ok;\nexpect(false).to.not.be.ok;\nexpect(undefined).to.not.be.ok;\nexpect(null).to.not.be.ok;","!url":"http://chaijs.com/api/bdd/#ok","!type":"fn() -> bool"},"true":{"!doc":".true\n\n\n\nAsserts that the target is true.\n\nexpect(true).to.be.true;\nexpect(1).to.not.be.true;","!url":"http://chaijs.com/api/bdd/#true","!type":"fn() -> bool"},"false":{"!doc":".false\n\n\n\nAsserts that the target is false.\n\nexpect(false).to.be.false;\nexpect(0).to.not.be.false;","!url":"http://chaijs.com/api/bdd/#false","!type":"fn() -> bool"},"null":{"!doc":".null\n\n\n\nAsserts that the target is null.\n\nexpect(null).to.be.null;\nexpect(undefined).not.to.be.null;","!url":"http://chaijs.com/api/bdd/#null","!type":"fn() -> bool"},undefined:{"!doc":".undefined\n\n\n\nAsserts that the target is undefined.\n\nexpect(undefined).to.be.undefined;\nexpect(null).to.not.be.undefined;","!url":"http://chaijs.com/api/bdd/#undefined","!type":"fn() -> bool"},exist:{"!doc":".exist\n\n\n\nAsserts that the target is neither null nor undefined.\n\nvar foo = 'hi'\n  , bar = null\n  , baz;\n\nexpect(foo).to.exist;\nexpect(bar).to.not.exist;\nexpect(baz).to.not.exist;","!url":"http://chaijs.com/api/bdd/#exist","!type":"fn() -> bool"},empty:{"!doc":".empty\n\n\n\nAsserts that the target's length is 0. For arrays, it checks\nthe length property. For objects, it gets the count of\nenumerable keys.\n\nexpect([]).to.be.empty;\nexpect('').to.be.empty;\nexpect({}).to.be.empty;","!url":"http://chaijs.com/api/bdd/#empty","!type":"fn() -> bool"},arguments:{"!doc":".arguments\n\n\n\nAsserts that the target is an arguments object.\n\nfunction test () {\n  expect(arguments).to.be.arguments;\n}","!url":"http://chaijs.com/api/bdd/#arguments","!type":"fn() -> bool"},equal:{"!doc":".equal(value)\n\n  * @param { Mixed } value\n  * @param { String } message_optional_\n\nAsserts that the target is strictly equal (===) to value.\nAlternately, if the deep flag is set, asserts that\nthe target is deeply equal to value.\n\nexpect('hello').to.equal('hello');\nexpect(42).to.equal(42);\nexpect(1).to.not.equal(true);\nexpect({ foo: 'bar' }).to.not.equal({ foo: 'bar' });\nexpect({ foo: 'bar' }).to.deep.equal({ foo: 'bar' });","!url":"http://chaijs.com/api/bdd/#equal","!type":"fn(value: mixed, message: string) -> bool"},eql:{"!doc":".eql(value)\n\n  * @param { Mixed } value\n  * @param { String } message_optional_\n\nAsserts that the target is deeply equal to value.\n\nexpect({ foo: 'bar' }).to.eql({ foo: 'bar' });\nexpect([ 1, 2, 3 ]).to.eql([ 1, 2, 3 ]);","!url":"http://chaijs.com/api/bdd/#eql","!type":"fn(value: mixed, message: string) -> bool"},above:{"!doc":".above(value)\n\n  * @param { Number } value\n  * @param { String } message_optional_\n\nAsserts that the target is greater than value.Can also be used in conjunction with length to\nassert a minimum length. The benefit being a\nmore informative error message than if the length\nwas supplied directly.\n\nexpect(10).to.be.above(5);expect('foo').to.have.length.above(2);\nexpect([ 1, 2, 3 ]).to.have.length.above(2);","!url":"http://chaijs.com/api/bdd/#above","!type":"fn(value: number, message: string) -> bool"},least:{"!doc":".least(value)\n\n  * @param { Number } value\n  * @param { String } message_optional_\n\nAsserts that the target is greater than or equal to value.Can also be used in conjunction with length to\nassert a minimum length. The benefit being a\nmore informative error message than if the length\nwas supplied directly.\n\nexpect(10).to.be.at.least(10);expect('foo').to.have.length.of.at.least(2);\nexpect([ 1, 2, 3 ]).to.have.length.of.at.least(3);","!url":"http://chaijs.com/api/bdd/#least","!type":"fn(value: number, message: string) -> bool"},below:{"!doc":".below(value)\n\n  * @param { Number } value\n  * @param { String } message_optional_\n\nAsserts that the target is less than value.Can also be used in conjunction with length to\nassert a maximum length. The benefit being a\nmore informative error message than if the length\nwas supplied directly.\n\nexpect(5).to.be.below(10);expect('foo').to.have.length.below(4);\nexpect([ 1, 2, 3 ]).to.have.length.below(4);","!url":"http://chaijs.com/api/bdd/#below","!type":"fn(value: number, message: string) -> bool"},most:{"!doc":".most(value)\n\n  * @param { Number } value\n  * @param { String } message_optional_\n\nAsserts that the target is less than or equal to value.Can also be used in conjunction with length to\nassert a maximum length. The benefit being a\nmore informative error message than if the length\nwas supplied directly.\n\nexpect(5).to.be.at.most(5);expect('foo').to.have.length.of.at.most(4);\nexpect([ 1, 2, 3 ]).to.have.length.of.at.most(3);","!url":"http://chaijs.com/api/bdd/#most","!type":"fn(value: number, message: string) -> bool"},within:{"!doc":".within(start, finish)\n\n  * @param { Number } startlowerbound inclusive\n  * @param { Number } finishupperbound inclusive\n  * @param { String } message_optional_\n\nAsserts that the target is within a range.Can also be used in conjunction with length to\nassert a length range. The benefit being a\nmore informative error message than if the length\nwas supplied directly.\n\nexpect(7).to.be.within(5,10);expect('foo').to.have.length.within(2,4);\nexpect([ 1, 2, 3 ]).to.have.length.within(2,4);","!url":"http://chaijs.com/api/bdd/#within","!type":"fn(start: number, finish: number, message: string) -> bool"},"instanceof":{"!doc":".instanceof(constructor)\n\n  * @param { Constructor } constructor\n  * @param { String } message_optional_\n\nAsserts that the target is an instance of constructor.\n\nvar Tea = function (name) { this.name = name; }\n  , Chai = new Tea('chai');\n\nexpect(Chai).to.be.an.instanceof(Tea);\nexpect([ 1, 2, 3 ]).to.be.instanceof(Array);","!url":"http://chaijs.com/api/bdd/#instanceof","!type":"fn(constructor: constructor, message: string) -> bool"},property:{"!doc":".property(name, [value])\n\n  * @param { String } name\n  * @param { Mixed } value(optional)\n  * @param { String } message_optional_\n\nAsserts that the target has a property name, optionally asserting that\nthe value of that property is strictly equal to  value.\nIf the deep flag is set, you can use dot- and bracket-notation for deep\nreferences into objects and arrays.You can also use an array as the starting point of a deep.property\nassertion, or traverse nested arrays.Furthermore, property changes the subject of the assertion\nto be the value of that property from the original object. This\npermits for further chainable assertions on that property.\n\n// simple referencing\nvar obj = { foo: 'bar' };\nexpect(obj).to.have.property('foo');\nexpect(obj).to.have.property('foo', 'bar');\n\n// deep referencing\nvar deepObj = {\n    green: { tea: 'matcha' }\n  , teas: [ 'chai', 'matcha', { tea: 'konacha' } ]\n};\n\nexpect(deepObj).to.have.deep.property('green.tea', 'matcha');\nexpect(deepObj).to.have.deep.property('teas[1]', 'matcha');\nexpect(deepObj).to.have.deep.property('teas[2].tea', 'konacha');var arr = [\n    [ 'chai', 'matcha', 'konacha' ]\n  , [ { tea: 'chai' }\n    , { tea: 'matcha' }\n    , { tea: 'konacha' } ]\n];\n\nexpect(arr).to.have.deep.property('[0][1]', 'matcha');\nexpect(arr).to.have.deep.property('[1][2].tea', 'konacha');expect(obj).to.have.property('foo')\n  .that.is.a('string');\nexpect(deepObj).to.have.property('green')\n  .that.is.an('object')\n  .that.deep.equals({ tea: 'matcha' });\nexpect(deepObj).to.have.property('teas')\n  .that.is.an('array')\n  .with.deep.property('[2]')\n    .that.deep.equals({ tea: 'konacha' });","!url":"http://chaijs.com/api/bdd/#property","!type":"fn(name: string, value: [mixed], message: string) -> bool"},ownProperty:{"!doc":".ownProperty(name)\n\n  * @param { String } name\n  * @param { String } message_optional_\n\nAsserts that the target has an own property name.\n\nexpect('test').to.have.ownProperty('length');","!url":"http://chaijs.com/api/bdd/#ownProperty","!type":"fn(name: string, message: string) -> bool"},length:{"!doc":".length(value)\n\n  * @param { Number } length\n  * @param { String } message_optional_\n\nAsserts that the target's length property has\nthe expected value.Can also be used as a chain precursor to a value\ncomparison for the length property.\n\nexpect([ 1, 2, 3]).to.have.length(3);\nexpect('foobar').to.have.length(6);expect('foo').to.have.length.above(2);\nexpect([ 1, 2, 3 ]).to.have.length.above(2);\nexpect('foo').to.have.length.below(4);\nexpect([ 1, 2, 3 ]).to.have.length.below(4);\nexpect('foo').to.have.length.within(2,4);\nexpect([ 1, 2, 3 ]).to.have.length.within(2,4);","!url":"http://chaijs.com/api/bdd/#length","!type":"fn(length: number, message: string) -> bool"},match:{"!doc":".match(regexp)\n\n  * @param { RegExp } RegularExpression\n  * @param { String } message_optional_\n\nAsserts that the target matches a regular expression.\n\nexpect('foobar').to.match(/^foo/);","!url":"http://chaijs.com/api/bdd/#match","!type":"fn(RegularExpression: regexp, message: string) -> bool"},string:{"!doc":".string(string)\n\n  * @param { String } string\n  * @param { String } message_optional_\n\nAsserts that the string target contains another string.\n\nexpect('foobar').to.have.string('bar');","!url":"http://chaijs.com/api/bdd/#string","!type":"fn(string: string, message: string) -> bool"},keys:{"!doc":".keys(key1, [key2], [...])\n\n  * @param { String... | Array } keys\n\nAsserts that the target has exactly the given keys, or\nasserts the inclusion of some keys when using the\ninclude or contain modifiers.\n\nexpect({ foo: 1, bar: 2 }).to.have.keys(['foo', 'bar']);\nexpect({ foo: 1, bar: 2, baz: 3 }).to.contain.keys('foo', 'bar');","!url":"http://chaijs.com/api/bdd/#keys","!type":"fn(keys: string) -> bool"},"throw":{"!doc":".throw(constructor)\n\n  * @param { ErrorConstructor } constructor\n  * @param { String | RegExp } expectederror message\n  * @param { String } message_optional_\n  * @seehttps://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error#Error_types  \n\nAsserts that the function target will throw a specific error, or specific type of error\n(as determined using instanceof), optionally with a RegExp or string inclusion test\nfor the error's message.Please note that when a throw expectation is negated, it will check each\nparameter independently, starting with error constructor type. The appropriate way\nto check for the existence of a type of error but for a message that does not match\nis to use and.\n\nvar err = new ReferenceError('This is a bad function.');\nvar fn = function () { throw err; }\nexpect(fn).to.throw(ReferenceError);\nexpect(fn).to.throw(Error);\nexpect(fn).to.throw(/bad function/);\nexpect(fn).to.not.throw('good function');\nexpect(fn).to.throw(ReferenceError, /bad function/);\nexpect(fn).to.throw(err);\nexpect(fn).to.not.throw(new RangeError('Out of range.'));expect(fn).to.throw(ReferenceError)\n   .and.not.throw(/good function/);","!url":"http://chaijs.com/api/bdd/#throw","!type":"fn(constructor: errorconstructor, expected: string, message: string) -> bool"},respondTo:{"!doc":".respondTo(method)\n\n  * @param { String } method\n  * @param { String } message_optional_\n\nAsserts that the object or class target will respond to a method.To check if a constructor will respond to a static function,\nset the itself flag.\n\nKlass.prototype.bar = function(){};\nexpect(Klass).to.respondTo('bar');\nexpect(obj).to.respondTo('bar');Klass.baz = function(){};\nexpect(Klass).itself.to.respondTo('baz');","!url":"http://chaijs.com/api/bdd/#respondTo","!type":"fn(method: string, message: string) -> bool"},itself:{"!doc":".itself\n\n\n\nSets the itself flag, later used by the respondTo assertion.\n\nfunction Foo() {}\nFoo.bar = function() {}\nFoo.prototype.baz = function() {}\n\nexpect(Foo).itself.to.respondTo('bar');\nexpect(Foo).itself.not.to.respondTo('baz');","!url":"http://chaijs.com/api/bdd/#itself","!type":"fn() -> bool"},satisfy:{"!doc":".satisfy(method)\n\n  * @param { Function } matcher\n  * @param { String } message_optional_\n\nAsserts that the target passes a given truth test.\n\nexpect(1).to.satisfy(function(num) { return num > 0; });","!url":"http://chaijs.com/api/bdd/#satisfy","!type":"fn(matcher: function, message: string) -> bool"},closeTo:{"!doc":".closeTo(expected, delta)\n\n  * @param { Number } expected\n  * @param { Number } delta\n  * @param { String } message_optional_\n\nAsserts that the target is equal expected, to within a +/- delta range.\n\nexpect(1.5).to.be.closeTo(1, 0.5);","!url":"http://chaijs.com/api/bdd/#closeTo","!type":"fn(expected: number, delta: number, message: string) -> bool"},members:{"!doc":".members(set)\n\n  * @param { Array } set\n  * @param { String } message_optional_\n\nAsserts that the target is a superset of set,\nor that the target and set have the same members.\n\nexpect([1, 2, 3]).to.include.members([3, 2]);\nexpect([1, 2, 3]).to.not.include.members([3, 2, 8]);\n\nexpect([4, 2]).to.have.members([2, 4]);\nexpect([5, 2]).to.not.have.members([5, 2, 1]);","!url":"http://chaijs.com/api/bdd/#members","!type":"fn(set: array, message: string) -> bool"}}}}
}),function(e){return"object"==typeof exports&&"object"==typeof module?e(exports):"function"==typeof define&&define.amd?define("tern/lib/comment",["exports"],e):void e(tern.comment||(tern.comment={}))}(function(e){function t(e){return 14>e&&e>8||32===e||160===e}function n(e,n){for(;n>0;--n){var r=e.charCodeAt(n-1);if(10==r)break;if(!t(r))return!1}return!0}e.commentsBefore=function(e,r){var o,s=null,a=0;e:for(;r>0;){var i=e.charCodeAt(r-1);if(10==i)for(var l=--r,c=!1;l>0;--l){if(i=e.charCodeAt(l-1),47==i&&47==e.charCodeAt(l-2)){if(!n(e,l-2))break e;var p=e.slice(l,r);!a&&o?s[0]=p+"\n"+s[0]:(s||(s=[])).unshift(p),o=!0,a=0,r=l-2;break}if(10==i){if(!c&&++a>1)break e;break}c||t(i)||(c=!0)}else if(47==i&&42==e.charCodeAt(r-2)){for(var l=r-2;l>1;--l)if(42==e.charCodeAt(l-1)&&47==e.charCodeAt(l-2)){if(!n(e,l-2))break e;(s||(s=[])).unshift(e.slice(l,r-2)),o=!1,a=0;break}r=l-2}else{if(!t(i))break;--r}}return s},e.commentAfter=function(e,n){for(;n<e.length;){var r=e.charCodeAt(n);if(47==r){var o,s=e.charCodeAt(n+1);if(47==s)o=e.indexOf("\n",n+2);else{if(42!=s)return;o=e.indexOf("*/",n+2)}return e.slice(n+2,0>o?e.length:o)}t(r)&&++n}},e.ensureCommentsBefore=function(t,n){return n.hasOwnProperty("commentsBefore")?n.commentsBefore:n.commentsBefore=e.commentsBefore(t,n.start)}}),function(e){return"object"==typeof exports&&"object"==typeof module?e(require("../lib/infer"),require("../lib/tern"),require("../lib/comment"),require("acorn/dist/walk")):"function"==typeof define&&define.amd?define("tern/plugin/angular",["../lib/infer","../lib/tern","../lib/comment","acorn/dist/walk"],e):void e(tern,tern,tern.comment,acorn.walk)}(function(e,t,n,r){"use strict";function o(){this.fields=Object.create(null),this.forward=[]}function s(t){var n=e.cx().definitions.angular.service;return n.hasProp(t)?n.getProp(t):void 0}function a(t,n){var r=s(n);return r?r:t.injector&&t.injector?t.injector.get(n):e.ANull}function i(t,n,r,o){var s=[];if(/FunctionExpression/.test(r.type))for(var i=0;i<r.params.length;++i)s.push(a(t,r.params[i].name));else if("ArrayExpression"==r.type){for(var i=0;i<r.elements.length-1;++i){var l=r.elements[i];s.push("Literal"==l.type&&"string"==typeof l.value?a(t,l.value):e.ANull)}var c=r.elements[r.elements.length-1];c&&/FunctionExpression/.test(c.type)&&(n=c.scope.fnType)}var p=new e.AVal;if(o){var u=new e.AVal;n.propagate(new e.IsCtor(u)),u.propagate(p,90),n.propagate(new e.IsCallee(u,s,null,new e.IfObj(p)))}else n.propagate(new e.IsCallee(e.cx().topScope,s,null,p));return p}function l(e){var t=[];if(e&&"ArrayExpression"==e.type)for(var n=0;n<e.elements.length;++n){var r=e.elements[n];"Literal"==r.type&&"string"==typeof r.value&&t.push(r.value)}return t}function c(e){var t=e.definitions.angular;return t&&t.Module.getProp("prototype").getType()}function p(t,n){var r=e.cx(),s=r.parent.mod.angular,a=c(r),i=new e.Obj(a||!0);a||s.nakedModules.push(i),i.origin=r.curOrigin,i.injector=new o,i.metaData={includes:n};for(var l=0;l<n.length;++l){var p=s.modules[n[l]];p?p.injector&&p.injector.forwardTo(i.injector):(s.pendingImports[n[l]]||(s.pendingImports[n[l]]=[])).push(i.injector)}if("string"==typeof t){s.modules[t]=i;var u=s.pendingImports[t];if(u){delete s.pendingImports[t];for(var l=0;l<u.length;++l)i.injector.forwardTo(u[l])}}return i}function u(e,t){r.simple(e,{CallExpression:function(e){if("MemberExpression"==e.callee.type&&!e.callee.computed&&e.arguments.length&&/^(value|constant|controller|factory|provider)$/.test(e.callee.property.name)){var r=n.commentsBefore(t,e.callee.property.start-1);if(r){var o=r[0],s=o.search(/\.\s/);s>5&&(o=o.slice(0,s+1)),o=o.trim().replace(/\s*\n\s*\*\s*|\s{1,}/g," "),e.arguments[0].angularDoc=o}}}})}function d(t){var n=e.cx(),r=t["!name"],o=n.definitions[r];if("angular"!=r){var s=o&&o["!ng"];if(s)for(var a in s.props){var i=s.props[a].getType(),l=p(a.replace(/`/g,"."),i.metaData&&i.metaData.includes||[]);l.origin=r;for(var u in i.props){var d=i.props[u],h=d.getType();h&&(/^_inject_/.test(u)?(h.name||(h.name=u.slice(8)),l.injector.set(u.slice(8),h,d.doc,d.span)):i.props[u].propagate(l.defProp(u)))}}}else{var f=c(n),m=n.parent.mod.angular.nakedModules;if(f)for(var g=0;g<m.length;++g)m[g].proto=f}}function h(t){var n=e.cx().parent.mod.angular.modules,r=new e.Obj(null),o=0;for(var s in n){var a=n[s];if(t.origins.indexOf(a.origin)>-1){var i=s.replace(/\./g,"`");if(r.defProp(i).addType(a),a.condenseForceInclude=!0,++o,a.injector)for(var l in a.injector.fields){var c=a.injector.fields[l];c.local&&(t.roots["!ng."+i+"._inject_"+l]=c)}}}o&&(t.roots["!ng"]=r)}function f(t){var n=e.cx().parent.mod.angular.modules;for(var r in t.types){var o;if(o=r.match(/^!ng\.([^\.]+)\._inject_([^\.]+)^/)){var s=n[o[1].replace(/`/g,".")],a=s.injector.fields[o[2]],i=t.types[r];a.span&&(i.span=a.span),a.doc&&(i.doc=a.doc)}}}function m(e){e.mod.angular={modules:Object.create(null),pendingImports:Object.create(null),nakedModules:[]}}var g=e.constraint({construct:function(e){this.doc=e},addType:function(e){e.doc||(e.doc=this.doc)}});o.prototype.get=function(t){if("$scope"==t)return new e.Obj(s("$rootScope").getType(),"$scope");if(t in this.fields)return this.fields[t];var n=this.fields[t]=new e.AVal;return n},o.prototype.set=function(t,n,r,o,s){if(!("$scope"==t||s&&s>10)){var a=this.fields[t]||(this.fields[t]=new e.AVal);s||(a.local=!0),a.origin||(a.origin=e.cx().curOrigin),"string"!=typeof o||a.span?o&&"object"==typeof o&&!a.originNode&&(a.originNode=o):a.span=o,r&&(a.doc=r,a.propagate(new g(r))),n.propagate(a);for(var i=0;i<this.forward.length;++i)this.forward[i].set(t,n,r,o,(s||0)+1)}},o.prototype.forwardTo=function(e){this.forward.push(e);for(var t in this.fields){var n=this.fields[t];e.set(t,n,n.doc,n.span||n.originNode,1)}},e.registerFunction("angular_callInject",function(e){return function(t,n,r){var o=t.getType();o&&r&&r[e]&&i(o,n[e],r[e])}}),e.registerFunction("angular_regFieldCall",function(e,t,n){var r=e.getType();if(r&&n&&n.length>1){var o=i(r,t[1],n[1]);r.injector&&"Literal"==n[0].type&&r.injector.set(n[0].value,o,n[0].angularDoc,n[0])}}),e.registerFunction("angular_regFieldNew",function(e,t,n){var r=e.getType();if(r&&n&&n.length>1){var o=i(r,t[1],n[1],!0);r.injector&&"Literal"==n[0].type&&r.injector.set(n[0].value,o,n[0].angularDoc,n[0])}}),e.registerFunction("angular_regField",function(e,t,n){var r=e.getType();r&&r.injector&&n&&n[0]&&"Literal"==n[0].type&&t[1]&&r.injector.set(n[0].value,t[1],n[0].angularDoc,n[0])}),e.registerFunction("angular_module",function(t,n,r){var o,s=r&&r[0]&&"Literal"==r[0].type&&r[0].value;return"string"==typeof s&&(o=e.cx().parent.mod.angular.modules[s]),o||(o=p(s,l(r&&r[1]))),o});var b=e.constraint({construct:function(e,t,n){this.self=e,this.args=t,this.target=n},addType:function(t){if(t instanceof e.Fn){this.target.addType(new e.Fn(t.name,t.self,t.args.slice(this.args.length),t.argNames.slice(this.args.length),t.retval)),this.self.propagate(t.self);for(var n=0;n<Math.min(t.args.length,this.args.length);++n)this.args[n].propagate(t.args[n])}}});e.registerFunction("angular_bind",function(t,n){if(n.length<2)return e.ANull;var r=new e.AVal;return n[1].propagate(new b(n[0],n.slice(2),r)),r}),t.registerPlugin("angular",function(e){m(e),e.on("reset",function(){m(e)}),e.on("postParse",u),e.on("postLoadDef",d),e.on("preCondenseReach",h),e.on("postCondenseReach",f),e.addDefs(y,!0)});var y={"!name":"angular","!define":{cacheObj:{info:"fn() -> ?",put:"fn(key: string, value: ?) -> !1",get:"fn(key: string) -> ?",remove:"fn(key: string)",removeAll:"fn()",destroy:"fn()"},eventObj:{targetScope:"service.$rootScope",currentScope:"service.$rootScope",name:"string",stopPropagation:"fn()",preventDefault:"fn()",defaultPrevented:"bool"},directiveObj:{multiElement:{"!type":"bool","!url":"https://docs.angularjs.org/api/ng/service/$compile#-multielement-","!doc":"When this property is set to true, the HTML compiler will collect DOM nodes between nodes with the attributes directive-name-start and directive-name-end, and group them together as the directive elements. It is recommended that this feature be used on directives which are not strictly behavioural (such as ngClick), and which do not manipulate or replace child nodes (such as ngInclude)."},priority:{"!type":"number","!url":"https://docs.angularjs.org/api/ng/service/$compile#-priority-","!doc":"When there are multiple directives defined on a single DOM element, sometimes it is necessary to specify the order in which the directives are applied. The priority is used to sort the directives before their compile functions get called. Priority is defined as a number. Directives with greater numerical priority are compiled first. Pre-link functions are also run in priority order, but post-link functions are run in reverse order. The order of directives with the same priority is undefined. The default priority is 0."},terminal:{"!type":"bool","!url":"https://docs.angularjs.org/api/ng/service/$compile#-terminal-","!doc":"If set to true then the current priority will be the last set of directives which will execute (any directives at the current priority will still execute as the order of execution on same priority is undefined). Note that expressions and other directives used in the directive's template will also be excluded from execution."},scope:{"!type":"?","!url":"https://docs.angularjs.org/api/ng/service/$compile#-scope-","!doc":"If set to true, then a new scope will be created for this directive. If multiple directives on the same element request a new scope, only one new scope is created. The new scope rule does not apply for the root of the template since the root of the template always gets a new scope. If set to {} (object hash), then a new 'isolate' scope is created. The 'isolate' scope differs from normal scope in that it does not prototypically inherit from the parent scope. This is useful when creating reusable components, which should not accidentally read or modify data in the parent scope."},bindToController:{"!type":"bool","!url":"https://docs.angularjs.org/api/ng/service/$compile#-bindtocontroller-","!doc":"When an isolate scope is used for a component (see above), and controllerAs is used, bindToController: true will allow a component to have its properties bound to the controller, rather than to scope. When the controller is instantiated, the initial values of the isolate scope bindings are already available."},controller:{"!type":"fn()","!url":"https://docs.angularjs.org/api/ng/service/$compile#-require-","!doc":"Controller constructor function. The controller is instantiated before the pre-linking phase and it is shared with other directives (see require attribute). This allows the directives to communicate with each other and augment each other's behavior."},require:{"!type":"string","!url":"https://docs.angularjs.org/api/ng/service/$compile#-controller-","!doc":"Require another directive and inject its controller as the fourth argument to the linking function. The require takes a string name (or array of strings) of the directive(s) to pass in. If an array is used, the injected argument will be an array in corresponding order. If no such directive can be found, or if the directive does not have a controller, then an error is raised."},controllerAs:{"!type":"string","!url":"https://docs.angularjs.org/api/ng/service/$compile#-controlleras-","!doc":"Controller alias at the directive scope. An alias for the controller so it can be referenced at the directive template. The directive needs to define a scope for this configuration to be used. Useful in the case when directive is used as component."},restrict:{"!type":"string","!url":"https://docs.angularjs.org/api/ng/service/$compile#-restrict-","!doc":"String of subset of EACM which restricts the directive to a specific directive declaration style. If omitted, the defaults (elements and attributes) are used. E - Element name (default): <my-directive></my-directive>. A - Attribute (default): <div my-directive='exp'></div>. C - Class: <div class='my-directive: exp;'></div>. M - Comment: <!-- directive: my-directive exp --> "},templateNamespace:{"!type":"string","!url":"https://docs.angularjs.org/api/ng/service/$compile#-templatenamespace-","!doc":"String representing the document type used by the markup in the template. AngularJS needs this information as those elements need to be created and cloned in a special way when they are defined outside their usual containers like <svg> and <math>."},template:{"!type":"string","!url":"https://docs.angularjs.org/api/ng/service/$compile#-template-","!doc":"HTML markup that may: Replace the contents of the directive's element (default). Replace the directive's element itself (if replace is true - DEPRECATED). Wrap the contents of the directive's element (if transclude is true)."},templateUrl:{"!type":"string","!url":"https://docs.angularjs.org/api/ng/service/$compile#-templateurl-","!doc":"This is similar to template but the template is loaded from the specified URL, asynchronously."},transclude:{"!type":"bool","!url":"https://docs.angularjs.org/api/ng/service/$compile#-transclude-","!doc":"Extract the contents of the element where the directive appears and make it available to the directive. The contents are compiled and provided to the directive as a transclusion function."},compile:{"!type":"fn(tElement: +Element, tAttrs: +Attr)","!url":"https://docs.angularjs.org/api/ng/service/$compile#-transclude-","!doc":"The compile function deals with transforming the template DOM. Since most directives do not do template transformation, it is not used often."},link:{"!type":"fn(scope: ?, iElement: +Element, iAttrs: +Attr, controller: ?, transcludeFn: fn())","!url":"https://docs.angularjs.org/api/ng/service/$compile#-link-","!doc":"The link function is responsible for registering DOM listeners as well as updating the DOM. It is executed after the template has been cloned. This is where most of the directive logic will be put."}},Module:{"!url":"http://docs.angularjs.org/api/angular.Module","!doc":"Interface for configuring angular modules.",prototype:{animation:{"!type":"fn(name: string, animationFactory: fn()) -> !this","!url":"http://docs.angularjs.org/api/angular.Module#animation","!doc":"Defines an animation hook that can be later used with $animate service and directives that use this service."},config:{"!type":"fn(configFn: fn()) -> !this","!effects":["custom angular_callInject 0"],"!url":"http://docs.angularjs.org/api/angular.Module#config","!doc":"Use this method to register work which needs to be performed on module loading."},constant:"service.$provide.constant",controller:{"!type":"fn(name: string, constructor: fn()) -> !this","!effects":["custom angular_regFieldCall"],"!url":"http://docs.angularjs.org/api/ng.$controllerProvider","!doc":"Register a controller."},directive:{"!type":"fn(name: string, directiveFactory: fn() -> directiveObj) -> !this","!effects":["custom angular_regFieldCall"],"!url":"http://docs.angularjs.org/api/ng.$compileProvider#directive","!doc":"Register a new directive with the compiler."},factory:"service.$provide.factory",filter:{"!type":"fn(name: string, filterFactory: fn()) -> !this","!effects":["custom angular_callInject 1"],"!url":"http://docs.angularjs.org/api/ng.$filterProvider","!doc":"Register filter factory function."},provider:"service.$provide.provider",run:{"!type":"fn(initializationFn: fn()) -> !this","!effects":["custom angular_callInject 0"],"!url":"http://docs.angularjs.org/api/angular.Module#run","!doc":"Register work which should be performed when the injector is done loading all modules."},service:"service.$provide.service",value:"service.$provide.value",name:{"!type":"string","!url":"http://docs.angularjs.org/api/angular.Module#name","!doc":"Name of the module."},requires:{"!type":"[string]","!url":"http://docs.angularjs.org/api/angular.Module#requires","!doc":"List of module names which must be loaded before this module."}}},Promise:{"!url":"http://docs.angularjs.org/api/ng.$q","!doc":"Allow for interested parties to get access to the result of the deferred task when it completes.",prototype:{then:"fn(successCallback: fn(value: ?), errorCallback: fn(reason: ?), notifyCallback: fn(value: ?)) -> +Promise","catch":"fn(errorCallback: fn(reason: ?))","finally":"fn(callback: fn()) -> +Promise",success:"fn(callback: fn(data: ?, status: number, headers: ?, config: ?)) -> +Promise",error:"fn(callback: fn(data: ?, status: number, headers: ?, config: ?)) -> +Promise"}},Deferred:{"!url":"http://docs.angularjs.org/api/ng.$q",prototype:{resolve:"fn(value: ?)",reject:"fn(reason: ?)",notify:"fn(value: ?)",promise:"+Promise"}},ResourceClass:{"!url":"http://docs.angularjs.org/api/ngResource.$resource",prototype:{$promise:"+Promise",$save:"fn()"}},Resource:{"!url":"http://docs.angularjs.org/api/ngResource.$resource",prototype:{get:"fn(params: ?, callback: fn()) -> +ResourceClass",save:"fn(params: ?, callback: fn()) -> +ResourceClass",query:"fn(params: ?, callback: fn()) -> +ResourceClass",remove:"fn(params: ?, callback: fn()) -> +ResourceClass","delete":"fn(params: ?, callback: fn()) -> +ResourceClass"}},service:{$anchorScroll:{"!type":"fn()","!url":"http://docs.angularjs.org/api/ng.$anchorScroll","!doc":"Checks current value of $location.hash() and scroll to related element."},$animate:{"!url":"http://docs.angularjs.org/api/ng.$animate","!doc":"Rudimentary DOM manipulation functions to insert, remove, move elements within the DOM.",addClass:{"!type":"fn(element: +Element, className: string, done?: fn()) -> !this","!url":"http://docs.angularjs.org/api/ng.$animate#addClass","!doc":"Adds the provided className CSS class value to the provided element."},enter:{"!type":"fn(element: +Element, parent: +Element, after: +Element, done?: fn()) -> !this","!url":"http://docs.angularjs.org/api/ng.$animate#enter","!doc":"Inserts the element into the DOM either after the after element or within the parent element."},leave:{"!type":"fn(element: +Element, done?: fn()) -> !this","!url":"http://docs.angularjs.org/api/ng.$animate#leave","!doc":"Removes the element from the DOM."},move:{"!type":"fn(element: +Element, parent: +Element, after: +Element, done?: fn()) -> !this","!url":"http://docs.angularjs.org/api/ng.$animate#move","!doc":"Moves element to be placed either after the after element or inside of the parent element."},removeClass:{"!type":"fn(element: +Element, className: string, done?: fn()) -> !this","!url":"http://docs.angularjs.org/api/ng.$animate#removeClass","!doc":"Removes the provided className CSS class value from the provided element."}},$cacheFactory:{"!type":"fn(cacheId: string, options?: ?) -> cacheObj","!url":"http://docs.angularjs.org/api/ng.$cacheFactory","!doc":"Factory that constructs cache objects and gives access to them."},$compile:{"!type":"fn(element: +Element, transclude: fn(scope: ?), maxPriority: number)","!url":"http://docs.angularjs.org/api/ng.$compile","!doc":"Compiles a piece of HTML string or DOM into a template and produces a template function."},$controller:{"!type":"fn(controller: fn(), locals: ?) -> ?","!url":"http://docs.angularjs.org/api/ng.$controller","!doc":"Instantiates controllers."},$document:{"!type":"jQuery.fn","!url":"http://docs.angularjs.org/api/ng.$document","!doc":"A jQuery (lite)-wrapped reference to the browser's window.document element."},$exceptionHandler:{"!type":"fn(exception: +Error, cause?: string)","!url":"http://docs.angularjs.org/api/ng.$exceptionHandler","!doc":"Any uncaught exception in angular expressions is delegated to this service."},$filter:{"!type":"fn(name: string) -> fn(input: string) -> string","!url":"http://docs.angularjs.org/api/ng.$filter","!doc":"Retrieve a filter function."},$http:{"!type":"fn(config: ?) -> service.$q","!url":"http://docs.angularjs.org/api/ng.$http","!doc":"Facilitates communication with remote HTTP servers.","delete":"fn(url: string, config?: ?) -> +Promise",get:"fn(url: string, config?: ?) -> +Promise",head:"fn(url: string, config?: ?) -> +Promise",jsonp:"fn(url: string, config?: ?) -> +Promise",post:"fn(url: string, data: ?, config?: ?) -> +Promise",put:"fn(url: string, data: ?, config?: ?) -> +Promise"},$interpolate:{"!type":"fn(text: string, mustHaveExpression?: bool, trustedContext?: string) -> fn(context: ?) -> string","!url":"http://docs.angularjs.org/api/ng.$interpolate","!doc":"Compiles a string with markup into an interpolation function."},$locale:{"!url":"http://docs.angularjs.org/api/ng.$locale",id:"string"},$location:{"!url":"http://docs.angularjs.org/api/ng.$location","!doc":"Parses the URL in the browser address bar.",absUrl:{"!type":"fn() -> string","!url":"http://docs.angularjs.org/api/ng.$location#absUrl","!doc":"Return full url representation."},hash:{"!type":"fn(value?: string) -> string","!url":"http://docs.angularjs.org/api/ng.$location#hash","!doc":"Get or set the hash fragment."},host:{"!type":"fn() -> string","!url":"http://docs.angularjs.org/api/ng.$location#host","!doc":"Return host of current url."},path:{"!type":"fn(value?: string) -> string","!url":"http://docs.angularjs.org/api/ng.$location#path","!doc":"Get or set the URL path."},port:{"!type":"fn() -> number","!url":"http://docs.angularjs.org/api/ng.$location#port","!doc":"Returns the port of the current url."},protocol:{"!type":"fn() -> string","!url":"http://docs.angularjs.org/api/ng.$location#protocol","!doc":"Return protocol of current url."},replace:{"!type":"fn()","!url":"http://docs.angularjs.org/api/ng.$location#replace","!doc":"Changes to $location during current $digest will be replacing current history record, instead of adding new one."},search:{"!type":"fn(search: string, paramValue?: string) -> string","!url":"http://docs.angularjs.org/api/ng.$location#search","!doc":"Get or set the URL query."},url:{"!type":"fn(url: string, replace?: string) -> string","!url":"http://docs.angularjs.org/api/ng.$location#url","!doc":"Get or set the current url."}},$log:{"!url":"http://docs.angularjs.org/api/ng.$log","!doc":"Simple service for logging.",debug:{"!type":"fn(message: string)","!url":"http://docs.angularjs.org/api/ng.$log#debug","!doc":"Write a debug message."},error:{"!type":"fn(message: string)","!url":"http://docs.angularjs.org/api/ng.$log#error","!doc":"Write an error message."},info:{"!type":"fn(message: string)","!url":"http://docs.angularjs.org/api/ng.$log#info","!doc":"Write an info message."},log:{"!type":"fn(message: string)","!url":"http://docs.angularjs.org/api/ng.$log#log","!doc":"Write a log message."},warn:{"!type":"fn(message: string)","!url":"http://docs.angularjs.org/api/ng.$log#warn","!doc":"Write a warning message."}},$parse:{"!type":"fn(expression: string) -> fn(context: ?, locals: ?) -> ?","!url":"http://docs.angularjs.org/api/ng.$parse","!doc":"Converts Angular expression into a function."},$q:{"!type":"fn(executor: fn(resolve: fn(value: ?) -> +Promise, reject: fn(value: ?) -> +Promise)) -> +Promise","!url":"http://docs.angularjs.org/api/ng.$q","!doc":"A promise/deferred implementation.",all:{"!type":"fn(promises: [+Promise]) -> +Promise","!url":"http://docs.angularjs.org/api/ng.$q#all","!doc":"Combines multiple promises into a single promise."},defer:{"!type":"fn() -> +Deferred","!url":"http://docs.angularjs.org/api/ng.$q#defer","!doc":"Creates a Deferred object which represents a task which will finish in the future."},reject:{"!type":"fn(reason: ?) -> +Promise","!url":"http://docs.angularjs.org/api/ng.$q#reject","!doc":"Creates a promise that is resolved as rejected with the specified reason."},when:{"!type":"fn(value: ?) -> +Promise","!url":"http://docs.angularjs.org/api/ng.$q#when","!doc":"Wraps an object that might be a value or a (3rd party) then-able promise into a $q promise."}},$rootElement:{"!type":"+Element","!url":"http://docs.angularjs.org/api/ng.$rootElement","!doc":"The root element of Angular application."},$rootScope:{"!url":"http://docs.angularjs.org/api/ng.$rootScope",$apply:{"!type":"fn(expression: string)","!url":"http://docs.angularjs.org/api/ng.$rootScope.Scope#$apply","!doc":"Execute an expression in angular from outside of the angular framework."},$broadcast:{"!type":"fn(name: string, args?: ?) -> eventObj","!url":"http://docs.angularjs.org/api/ng.$rootScope.Scope#$broadcast","!doc":"Dispatches an event name downwards to all child scopes."},$destroy:{"!type":"fn()","!url":"http://docs.angularjs.org/api/ng.$rootScope.Scope#$destroy","!doc":"Removes the current scope (and all of its children) from the parent scope."},$digest:{"!type":"fn()","!url":"http://docs.angularjs.org/api/ng.$rootScope.Scope#$digest","!doc":"Processes all of the watchers of the current scope and its children."},$emit:{"!type":"fn(name: string, args?: ?) -> eventObj","!url":"http://docs.angularjs.org/api/ng.$rootScope.Scope#$emit","!doc":"Dispatches an event name upwards through the scope hierarchy."},$eval:{"!type":"fn(expression: string) -> ?","!url":"http://docs.angularjs.org/api/ng.$rootScope.Scope#$eval","!doc":"Executes the expression on the current scope and returns the result."},$evalAsync:{"!type":"fn(expression: string)","!url":"http://docs.angularjs.org/api/ng.$rootScope.Scope#$evalAsync","!doc":"Executes the expression on the current scope at a later point in time."},$new:{"!type":"fn(isolate: bool) -> service.$rootScope","!url":"http://docs.angularjs.org/api/ng.$rootScope.Scope#$new","!doc":"Creates a new child scope."},$on:{"!type":"fn(name: string, listener: fn(event: ?)) -> fn()","!url":"http://docs.angularjs.org/api/ng.$rootScope.Scope#$on","!doc":"Listens on events of a given type."},$watch:{"!type":"fn(watchExpression: string, listener?: fn(), objectEquality?: bool) -> fn()","!url":"http://docs.angularjs.org/api/ng.$rootScope.Scope#$watch","!doc":"Registers a listener callback to be executed whenever the watchExpression changes."},$watchCollection:{"!type":"fn(obj: string, listener: fn()) -> fn()","!url":"http://docs.angularjs.org/api/ng.$rootScope.Scope#$watchCollection","!doc":"Shallow watches the properties of an object and fires whenever any of the properties."},$id:{"!type":"number","!url":"http://docs.angularjs.org/api/ng.$rootScope.Scope#$id","!doc":"Unique scope ID."}},$sce:{HTML:"string",CSS:"string",URL:"string",RESOURCE_URL:"string",JS:"string",getTrusted:"fn(type: string, maybeTrusted: ?) -> !1",getTrustedCss:"fn(maybeTrusted: ?) -> !0",getTrustedHtml:"fn(maybeTrusted: ?) -> !0",getTrustedJs:"fn(maybeTrusted: ?) -> !0",getTrustedResourceUrl:"fn(maybeTrusted: ?) -> !0",getTrustedUrl:"fn(maybeTrusted: ?) -> !0",parse:"fn(type: string, expression: string) -> fn(context: ?, locals: ?) -> ?",parseAsCss:"fn(expression: string) -> fn(context: ?, locals: ?) -> ?",parseAsHtml:"fn(expression: string) -> fn(context: ?, locals: ?) -> ?",parseAsJs:"fn(expression: string) -> fn(context: ?, locals: ?) -> ?",parseAsResourceUrl:"fn(expression: string) -> fn(context: ?, locals: ?) -> ?",parseAsUrl:"fn(expression: string) -> fn(context: ?, locals: ?) -> ?",trustAs:"fn(type: string, value: ?) -> !1",trustAsHtml:"fn(value: ?) -> !0",trustAsJs:"fn(value: ?) -> !0",trustAsResourceUrl:"fn(value: ?) -> !0",trustAsUrl:"fn(value: ?) -> !0",isEnabled:"fn() -> bool"},$templateCache:{"!url":"http://docs.angularjs.org/api/ng.$templateCache","!proto":"cacheObj"},$timeout:{"!type":"fn(fn: fn(), delay?: number, invokeApply?: bool) -> +Promise","!url":"http://docs.angularjs.org/api/ng.$timeout","!doc":"Angular's wrapper for window.setTimeout.",cancel:"fn(promise: +Promise)"},$window:"<top>",$injector:{"!url":"http://docs.angularjs.org/api/AUTO.$injector","!doc":"Retrieve object instances as defined by provider.",annotate:{"!type":"fn(f: fn()) -> [string]","!url":"http://docs.angularjs.org/api/AUTO.$injector#annotate","!doc":"Returns an array of service names which the function is requesting for injection."},get:{"!type":"fn(name: string) -> ?","!url":"http://docs.angularjs.org/api/AUTO.$injector#get","!doc":"Return an instance of a service."},has:{"!type":"fn(name: string) -> bool","!url":"http://docs.angularjs.org/api/AUTO.$injector#has","!doc":"Allows the user to query if the particular service exist."},instantiate:{"!type":"fn(type: fn(), locals?: ?) -> +!0","!url":"http://docs.angularjs.org/api/AUTO.$injector#instantiate","!doc":"Create a new instance of JS type."},invoke:{"!type":"fn(type: fn(), self?: ?, locals?: ?) -> !0.!ret","!url":"http://docs.angularjs.org/api/AUTO.$injector#invoke","!doc":"Invoke the method and supply the method arguments from the $injector."}},$provide:{"!url":"http://docs.angularjs.org/api/AUTO.$provide","!doc":"Use $provide to register new providers with the $injector.",constant:{"!type":"fn(name: string, value: ?) -> !this","!effects":["custom angular_regField"],"!url":"http://docs.angularjs.org/api/AUTO.$provide#constant","!doc":"A constant value."},decorator:{"!type":"fn(name: string, decorator: fn())","!effects":["custom angular_regFieldCall"],"!url":"http://docs.angularjs.org/api/AUTO.$provide#decorator","!doc":"Decoration of service, allows the decorator to intercept the service instance creation."},factory:{"!type":"fn(name: string, providerFunction: fn()) -> !this","!effects":["custom angular_regFieldCall"],"!url":"http://docs.angularjs.org/api/AUTO.$provide#factory","!doc":"A short hand for configuring services if only $get method is required."},provider:{"!type":"fn(name: string, providerType: fn()) -> !this","!effects":["custom angular_regFieldCall"],"!url":"http://docs.angularjs.org/api/AUTO.$provide#provider","!doc":"Register a provider for a service."},service:{"!type":"fn(name: string, constructor: fn()) -> !this","!effects":["custom angular_regFieldNew"],"!url":"http://docs.angularjs.org/api/AUTO.$provide#provider","!doc":"Register a provider for a service."},value:{"!type":"fn(name: string, object: ?) -> !this","!effects":["custom angular_regField"],"!url":"http://docs.angularjs.org/api/AUTO.$providevalue","!doc":"A short hand for configuring services if the $get method is a constant."}},$cookies:{"!url":"http://docs.angularjs.org/api/ngCookies.$cookies","!doc":"Provides read/write access to browser's cookies.",text:"string"},$resource:{"!type":"fn(url: string, paramDefaults?: ?, actions?: ?) -> +Resource","!url":"http://docs.angularjs.org/api/ngResource.$resource","!doc":"Creates a resource object that lets you interact with RESTful server-side data sources."},$route:{"!url":"http://docs.angularjs.org/api/ngRoute.$route","!doc":"Deep-link URLs to controllers and views.",reload:{"!type":"fn()","!url":"http://docs.angularjs.org/api/ngRoute.$route#reload","!doc":"Reload the current route even if $location hasn't changed."},current:{"!url":"http://docs.angularjs.org/api/ngRoute.$route#current","!doc":"Reference to the current route definition.",controller:"?",locals:"?"},routes:"[?]"},$sanitize:{"!type":"fn(string) -> string","!url":"http://docs.angularjs.org/api/ngSanitize.$sanitize","!doc":"Sanitize HTML input."},$swipe:{"!url":"http://docs.angularjs.org/api/ngTouch.$swipe","!doc":"A service that abstracts the messier details of hold-and-drag swipe behavior.",bind:{"!type":"fn(element: +Element, handlers: ?)","!url":"http://docs.angularjs.org/api/ngTouch.$swipe#bind","!doc":"Abstracts the messier details of hold-and-drag swipe behavior."}}}},angular:{bind:{"!type":"fn(self: ?, fn: fn(), args?: ?) -> !custom:angular_bind","!url":"http://docs.angularjs.org/api/angular.bind","!doc":"Returns a function which calls function fn bound to self."},bootstrap:{"!type":"fn(element: +Element, modules?: [string]) -> service.$injector","!url":"http://docs.angularjs.org/api/angular.bootstrap","!doc":"Use this function to manually start up angular application."},copy:{"!type":"fn(source: ?, target?: ?) -> !0","!url":"http://docs.angularjs.org/api/angular.copy","!doc":"Creates a deep copy of source, which should be an object or an array."},element:{"!type":"fn(element: +Element) -> jQuery.fn","!url":"http://docs.angularjs.org/api/angular.element","!doc":"Wraps a raw DOM element or HTML string as a jQuery element."},equals:{"!type":"fn(o1: ?, o2: ?) -> bool","!url":"http://docs.angularjs.org/api/angular.equals","!doc":"Determines if two objects or two values are equivalent."},extend:{"!type":"fn(dst: ?, src: ?) -> !0","!url":"http://docs.angularjs.org/api/angular.extend","!doc":"Extends the destination object dst by copying all of the properties from the src object(s) to dst."},forEach:{"!type":"fn(obj: ?, iterator: fn(value: ?, key: ?), context?: ?) -> !0","!effects":["call !1 this=!2 !0.<i> number"],"!url":"http://docs.angularjs.org/api/angular.forEach","!doc":"Invokes the iterator function once for each item in obj collection, which can be either an object or an array."},fromJson:{"!type":"fn(json: string) -> ?","!url":"http://docs.angularjs.org/api/angular.fromJson","!doc":"Deserializes a JSON string."},identity:{"!type":"fn(val: ?) -> !0","!url":"http://docs.angularjs.org/api/angular.identity","!doc":"A function that returns its first argument."},injector:{"!type":"fn(modules: [string]) -> service.$injector","!url":"http://docs.angularjs.org/api/angular.injector","!doc":"Creates an injector function"},isArray:{"!type":"fn(val: ?) -> bool","!url":"http://docs.angularjs.org/api/angular.isArray","!doc":"Determines if a reference is an Array."},isDate:{"!type":"fn(val: ?) -> bool","!url":"http://docs.angularjs.org/api/angular.isDate","!doc":"Determines if a reference is a date."},isDefined:{"!type":"fn(val: ?) -> bool","!url":"http://docs.angularjs.org/api/angular.isDefined","!doc":"Determines if a reference is defined."},isElement:{"!type":"fn(val: ?) -> bool","!url":"http://docs.angularjs.org/api/angular.isElement","!doc":"Determines if a reference is a DOM element."},isFunction:{"!type":"fn(val: ?) -> bool","!url":"http://docs.angularjs.org/api/angular.isFunction","!doc":"Determines if a reference is a function."},isNumber:{"!type":"fn(val: ?) -> bool","!url":"http://docs.angularjs.org/api/angular.isNumber","!doc":"Determines if a reference is a number."},isObject:{"!type":"fn(val: ?) -> bool","!url":"http://docs.angularjs.org/api/angular.isObject","!doc":"Determines if a reference is an object."},isString:{"!type":"fn(val: ?) -> bool","!url":"http://docs.angularjs.org/api/angular.isString","!doc":"Determines if a reference is a string."},isUndefined:{"!type":"fn(val: ?) -> bool","!url":"http://docs.angularjs.org/api/angular.isUndefined","!doc":"Determines if a reference is undefined."},lowercase:{"!type":"fn(val: string) -> string","!url":"http://docs.angularjs.org/api/angular.lowercase","!doc":"Converts the specified string to lowercase."},module:{"!type":"fn(name: string, deps: [string]) -> !custom:angular_module","!url":"http://docs.angularjs.org/api/angular.module","!doc":"A global place for creating, registering and retrieving Angular modules."},Module:"Module",noop:{"!type":"fn()","!url":"http://docs.angularjs.org/api/angular.noop","!doc":"A function that performs no operations."},toJson:{"!type":"fn(val: ?) -> string","!url":"http://docs.angularjs.org/api/angular.toJson","!doc":"Serializes input into a JSON-formatted string."},uppercase:{"!type":"fn(string) -> string","!url":"http://docs.angularjs.org/api/angular.uppercase","!doc":"Converts the specified string to uppercase."},version:{"!url":"http://docs.angularjs.org/api/angular.version",full:"string",major:"number",minor:"number",dot:"number",codename:"string"}}}
}),function(e){return"object"==typeof exports&&"object"==typeof module?e(require("../lib/infer"),require("../lib/tern"),require("../lib/comment"),require("acorn"),require("acorn/dist/walk")):"function"==typeof define&&define.amd?define("tern/plugin/doc_comment",["../lib/infer","../lib/tern","../lib/comment","acorn/dist/acorn","acorn/dist/walk"],e):void e(tern,tern,tern.comment,acorn,acorn.walk)}(function(e,t,n,r,o){"use strict";function s(e,t){function r(e){n.ensureCommentsBefore(t,e)}o.simple(e,{VariableDeclaration:r,FunctionDeclaration:r,MethodDefinition:r,Property:r,ClassDeclaration:r,AssignmentExpression:function(e){"="==e.operator&&r(e)},CallExpression:function(e){a(e)&&r(e)},ExportNamedDeclaration:function(e){r(e)},ExportDefaultDeclaration:function(e){r(e)}})}function a(e){return"MemberExpression"==e.callee.type&&"Object"==e.callee.object.name&&"defineProperty"==e.callee.property.name&&e.arguments.length>=3&&"string"==typeof e.arguments[1].value}function i(t,n){x(t.sourceFile.text,n),o.simple(t,{VariableDeclaration:function(e,t){var n=e.declarations[0].id;e.commentsBefore&&"Identifier"==n.type&&p(e,e.commentsBefore,t,t.getProp(e.declarations[0].id.name))},FunctionDeclaration:function(e,t){e.commentsBefore&&p(e,e.commentsBefore,t,t.getProp(e.id.name),e.scope.fnType)},ClassDeclaration:function(e,t){e.commentsBefore&&p(e,e.commentsBefore,t,t.getProp(e.id.name),e.objType)},AssignmentExpression:function(t,n){t.commentsBefore&&p(t,t.commentsBefore,n,e.expressionType({node:t.left,state:n}))},ObjectExpression:function(t,n){for(var r=0;r<t.properties.length;++r){var o=t.properties[r],s=e.propName(o);"<i>"!=s&&o.commentsBefore&&p(o,o.commentsBefore,n,t.objType.getProp(s))}},Class:function(t,n){var r=t.objType.getProp("prototype").getObjType();if(r)for(var o=0;o<t.body.body.length;o++){var s,a=t.body.body[o];a.commentsBefore&&("constructor"==a.kind?p(a,a.commentsBefore,n,t.objType):"<i>"!=(s=e.propName(a))&&p(a,a.commentsBefore,n,r.getProp(s)))}},CallExpression:function(t,n){if(t.commentsBefore&&a(t)){var r=e.expressionType({node:t.arguments[0],state:n}).getObjType();if(r&&r instanceof e.Obj){var o=r.props[t.arguments[1].value];o&&p(t,t.commentsBefore,n,o)}}},ExportNamedDeclaration:function(e,t){e.commentsBefore&&e.declaration&&"FunctionDeclaration"===e.declaration.type&&p(e.declaration,e.commentsBefore,t,t.getProp(e.declaration.id.name),e.declaration.scope.fnType)},ExportDefaultDeclaration:function(e,t){e.commentsBefore&&e.declaration&&"FunctionDeclaration"===e.declaration.type&&p(e.declaration,e.commentsBefore,t,t.getProp(e.declaration.id.name),e.declaration.scope.fnType)}},e.searchVisitor,n)}function l(t){var n=t["!typedef"],r=e.cx(),o=t["!name"];if(n)for(var s in n)r.parent.mod.jsdocTypedefs[s]=b(e.def.parse(n[s],o,s),s)}function c(e){for(var t,n=1;n<e.length;n++){var r=e[n],o=r.match(/^[\s\*]*/)[0];if(o!=r)if(null==t)t=o;else{for(var s=0;s<t.length&&t.charCodeAt(s)==o.charCodeAt(s);)++s;s<t.length&&(t=t.slice(0,s))}}for(e=e.map(function(e,n){if(e=e.replace(/\s+$/,""),0==n&&null!=t)for(var r=0;r<t.length;r++){var o=e.indexOf(t.slice(r));if(0==o)return e.slice(t.length-r)}return null==t||0==n?e.replace(/^[\s\*]*/,""):e.length<t.length?"":e.slice(t.length)});e.length&&!e[e.length-1];)e.pop();for(;e.length&&!e[0];)e.shift();return e}function p(t,n,r,o,s){v(t,r,o,n);var a=e.cx();!s&&o instanceof e.AVal&&o.types.length&&(s=o.types[o.types.length-1],s instanceof e.Obj&&s.origin==a.curOrigin&&!s.doc||(s=null));for(var i=n.length-1;i>=0;i--){var l=c(n[i].split(/\r\n?|\n/)).join("\n");if(l){o instanceof e.AVal&&(o.doc=l),s&&(s.doc=l);break}}}function u(e,t){for(;/\s/.test(e.charAt(t));)++t;return t}function d(e){if(!r.isIdentifierStart(e.charCodeAt(0)))return!1;for(var t=1;t<e.length;t++)if(!r.isIdentifierChar(e.charCodeAt(t)))return!1;return!0}function h(e,t,n,r){for(var o=[],s=[],a=!1,i=!0;n=u(t,n),!i||t.charAt(n)!=r;i=!1){var l=t.indexOf(":",n);if(0>l)return null;var c=t.slice(n,l);if(!d(c))return null;o.push(c),n=l+1;var p=m(e,t,n);if(!p)return null;n=p.end,a=a||p.madeUp,s.push(p.type),n=u(t,n);var h=t.charAt(n);if(++n,h==r)break;if(","!=h)return null}return{labels:o,types:s,end:n,madeUp:a}}function f(t,n,r){var o=g(t,n,r);return o?"[]"==n.slice(o.end,o.end+2)?{madeUp:o.madeUp,end:o.end+2,type:new e.Arr(o.type)}:o:null}function m(t,n,r){for(var o,s=!1,a=!1;;){var i=f(t,n,r);if(!i)return null;if(a=a||i.madeUp,s?i.type.propagate(s):o=i.type,r=u(n,i.end),"|"!=n.charAt(r))break;r++,s||(s=new e.AVal,o.propagate(s),o=s)}var l=!1;return"="==n.charAt(r)&&(++r,l=!0),{type:o,end:r,isOptional:l,madeUp:a}}function g(t,n,o){o=u(n,o);var s,a=!1;if(n.indexOf("function(",o)==o){var i=h(t,n,o+9,")"),l=e.ANull;if(!i)return null;if(o=u(n,i.end),":"==n.charAt(o)){++o;var c=m(t,n,o+1);if(!c)return null;o=c.end,l=c.type,a=c.madeUp}s=new e.Fn(null,e.ANull,i.types,i.labels,l)}else if("["==n.charAt(o)){var p=m(t,n,o+1);if(!p)return null;if(o=u(n,p.end),a=p.madeUp,"]"!=n.charAt(o))return null;++o,s=new e.Arr(p.type)}else if("{"==n.charAt(o)){var d=h(t,n,o+1,"}");if(!d)return null;s=new e.Obj(!0);for(var f=0;f<d.types.length;++f){var g=s.defProp(d.labels[f]);g.initializer=!0,d.types[f].propagate(g)}o=d.end,a=d.madeUp}else if("("==n.charAt(o)){var p=m(t,n,o+1);if(!p)return null;if(o=u(n,p.end),")"!=n.charAt(o))return null;++o,s=p.type}else{var y=o;if(!r.isIdentifierStart(n.charCodeAt(o)))return null;for(;r.isIdentifierChar(n.charCodeAt(o));)++o;if(y==o)return null;var v=n.slice(y,o);if(/^(number|integer)$/i.test(v))s=e.cx().num;else if(/^bool(ean)?$/i.test(v))s=e.cx().bool;else if(/^string$/i.test(v))s=e.cx().str;else if(/^(null|undefined)$/i.test(v))s=e.ANull;else if(/^array$/i.test(v)){var p=null;if("."==n.charAt(o)&&"<"==n.charAt(o+1)){var x=m(t,n,o+2);if(!x)return null;if(o=u(n,x.end),a=x.madeUp,">"!=n.charAt(o++))return null;p=x.type}s=new e.Arr(p)}else if(/^object$/i.test(v)){if(s=new e.Obj(!0),"."==n.charAt(o)&&"<"==n.charAt(o+1)){var _=m(t,n,o+2);if(!_)return null;if(o=u(n,_.end),a=a||_.madeUp,","!=n.charAt(o++))return null;var S=m(t,n,o);if(!S)return null;if(o=u(n,S.end),a=_.madeUp||S.madeUp,">"!=n.charAt(o++))return null;S.type.propagate(s.defProp("<i>"))}}else{for(;46==n.charCodeAt(o)||r.isIdentifierChar(n.charCodeAt(o));)++o;var w,k=n.slice(y,o),E=e.cx(),j=E.parent&&E.parent.mod.jsdocTypedefs;j&&k in j?s=j[k]:(w=e.def.parsePath(k,t).getObjType())?s=b(w,k):(E.jsdocPlaceholders||(E.jsdocPlaceholders=Object.create(null)),s=k in E.jsdocPlaceholders?E.jsdocPlaceholders[k]:E.jsdocPlaceholders[k]=new e.Obj(null,k),a=!0)}}return{type:s,end:o,madeUp:a}}function b(t,n){if(t instanceof e.Fn&&/(?:^|\.)[A-Z][^\.]*$/.test(n)){var r=t.getProp("prototype").getObjType();if(r instanceof e.Obj)return e.getInstance(r)}return t}function y(e,t,n){if(n=u(t,n||0),"{"!=t.charAt(n))return null;var r=m(e,t,n+1);if(!r)return null;var o=u(t,r.end);return"}"!=t.charAt(o)?null:(r.end=o+1,r)}function v(e,t,n,r){for(var o,s,a,i,l,c,p=0;p<r.length;++p)for(var u,d=r[p],h=/(?:\n|$|\*)\s*@(type|param|arg(?:ument)?|returns?|this|class|constructor)\s+(.*)/g;u=h.exec(d);)if("class"!=u[1]&&"constructor"!=u[1]){if("this"==u[1]&&(c=m(t,u[2],0)))l=c,i=!0;else if(c=y(t,u[2]))switch(i=!0,u[1]){case"returns":case"return":a=c;break;case"type":o=c;break;case"param":case"arg":case"argument":var f=u[2].slice(c.end).match(/^\s*(\[?)\s*([^\]\s=]+)\s*(?:=[^\]]+\s*)?(\]?).*/);if(!f)continue;var g=f[2]+(c.isOptional||"["===f[1]&&"]"===f[3]?"?":"");(s||(s=Object.create(null)))[g]=c}}else l=i=!0;i&&w(o,l,s,a,e,n)}function x(t,n){for(var r,o=e.cx(),s=/\s@typedef\s+(.*)/g;r=s.exec(t);){var a=y(n,r[1]),i=a&&r[1].slice(a.end).match(/^\s*(\S+)/);if(i&&a.type instanceof e.Obj){for(var l=t.slice(r.index+r[0].length);r=/\s+@prop(?:erty)?\s+(.*)/.exec(l);){var c,p=y(n,r[1]);p&&(c=r[1].slice(p.end).match(/^\s*(\S+)/))&&p.type.propagate(a.type.defProp(c[1])),l=l.slice(r[0].length)}o.parent.mod.jsdocTypedefs[i[1]]=a.type}}}function _(t,n){var r=e.cx().parent.mod.docComment.weight;t.type.propagate(n,r||(t.madeUp?k:void 0))}function S(e){return"FunctionExpression"==e.type||"ArrowFunctionExpression"==e.type}function w(t,n,r,o,s,a){var i;if("VariableDeclaration"==s.type){var l=s.declarations[0];l.init&&S(l.init)&&(i=l.init.scope.fnType)}else"FunctionDeclaration"==s.type?i=s.scope.fnType:"AssignmentExpression"==s.type?S(s.right)&&(i=s.right.scope.fnType):"CallExpression"==s.type||"ClassDeclaration"===s.type||S(s.value)&&(i=s.value.scope.fnType);if(i&&(r||o||n)){if(r)for(var c=0;c<i.argNames.length;++c){var p=i.argNames[c],u=r[p];!u&&(u=r[p+"?"])&&(i.argNames[c]+="?"),u&&_(u,i.args[c])}if(o&&(i.retval==e.ANull&&(i.retval=new e.AVal),_(o,i.retval)),n===!0){var d=i.getProp("prototype").getObjType();n=d&&{type:e.getInstance(d,i)}}n&&_(n,i.self)}else t&&_(t,a)}var k=1,E=101;t.registerPlugin("doc_comment",function(e,t){e.mod.jsdocTypedefs=Object.create(null),e.on("reset",function(){e.mod.jsdocTypedefs=Object.create(null)}),e.mod.docComment={weight:t&&t.strong?E:void 0,fullDocs:t&&t.fullDocs},e.on("postParse",s),e.on("postInfer",i),e.on("postLoadDef",l)})}),function(e){return"object"==typeof exports&&"object"==typeof module?e(require("../lib/infer"),require("../lib/tern"),require("../lib/signal"),require):"function"==typeof define&&define.amd?define("tern/plugin/modules",["../lib/infer","../lib/tern","../lib/signal"],e):void e(tern,tern,tern.signal)}(function(e,t,n,r){"use strict";function o(e,t){this.server=e,this.options=t||{},this.modules=Object.create(null),this.nonRelative=Object.create(null),this.knownModules=Object.create(null),this.resolvers=[],this.modNameTests=[],this.importTests=[],this.completableTypes=Object.create(null)}function s(e,t){if(/^https?:|^\//.test(t))return t;e&&!/\/$/.test(e)&&(e+="/");for(var n;n=/^\.(\.)?\//.exec(t);){if(n[1]&&e.length>1){var r=e.lastIndexOf("/",e.length-2);e=-1==r?"":e.slice(0,r+1)}t=t.slice(n[0].length)}return e+t}function a(e){var t=e.lastIndexOf("/");return-1==t?"":e.slice(0,t+1)}function i(e){var t=e.lastIndexOf("/");return-1==t?e:e.slice(t+1)}function l(t,n){if(/^\.\.?\//.test(t)){var r=s(a(n),t),o=e.cx().parent;return o.findFile(r)?r:o.findFile(r+".js")?r+".js":void 0}}function c(e){return/^\.\.?\//.test(e)}function p(e,t,n){return n.filter===!1||!e||0==(n.caseInsensitive?t.toLowerCase():t).indexOf(e)}function u(t){var n=e.cx().parent.mod.modules.modules,r=t.roots["!modules"]=new e.Obj(null);for(var o in n){var s=n[o],a=s.origin||o,i=r.defProp(a.replace(/\./g,"`"));i.origin=s.origin,s.propagate(i)}}function d(t){var n=e.cx(),r=n.parent.mod.modules,o=n.definitions[t["!name"]]["!modules"];if(o)for(var s in o.props){var a=s.replace(/`/g,"."),i=r.get(a);i.origin=a,o.props[s].propagate(i)}var l=n.definitions[t["!name"]]["!known_modules"];if(l)for(var s in l.props)r.knownModules[s.replace(/`/g,".")]=l.props[s]}function h(t,n,r,o){if(!r)return o;var s=e.cx().parent.mod.modules,a=s.getModType(r.node);if(!a)return o;var i=a.getType(!1)||{};return o=Object.create(o),o.origin=a.origin||i.origin,o.originNode=a.originNode||i.originNode,a.doc?o.doc=a.doc:i.doc&&(o.doc=i.doc),a.url?o.url=a.url:i.url&&(o.url=i.url),o}function f(n,r){var o=e.cx().parent.mod.modules,s=t.resolvePos(n,r.end),a=o.completableTypes,i=e.findExpressionAround(n.ast,null,s,n.scope,function(e){return e in a});if(!i)return null;if(null!=o.isModName(i.node,s))return g(o,n,r,i.node,s);var l=o.isImport(i.node,s);return l&&l.name&&null!=l.prop?m(o,n,r,i.node,l,s):void 0}function m(n,r,o,s,a,i){var l=[],c=s.name?s.name.slice(0,i-s.start):"";o.caseInsensitive&&(c=c.toLowerCase());var p=n.resolveModule(a.name,s.sourceFile.name).getType();return p?(e.forAllPropertiesOf(p,function(n,r,s){r!=e.cx().protos.Object&&(o.filter!==!1&&c&&0!==(o.caseInsensitive?n.toLowerCase():n).indexOf(c)||t.addCompletion(o,l,n,r&&r.props[n],s))}),{start:t.outputPos(o,r,s.name?s.start:i),end:t.outputPos(o,r,i),completions:l,isSpecifier:!0}):null}function g(e,n,r,o,s){if(!("Literal"!=o.type||"string"!=typeof o.value||o.start>s||o.end<s)){var a=o.raw.slice(1,s-o.start),i=o.raw.charAt(0);a&&a.charAt(a.length-1)==i&&(a=a.slice(0,a.length-1)),r.caseInsensitive&&(a=a.toLowerCase());var l=[];return c(a)?e.completeFileName(l,r,n.name,a):e.completeModuleName(l,r,a),o.end==s+1&&n.text.charAt(s)==i&&++s,{start:t.outputPos(r,n,o.start),end:t.outputPos(r,n,s),isProperty:!1,completions:l.map(function(e){var t="string"==typeof e?e:e.name,n=t;return"string"==typeof e?n:(e.displayName=t,e.name=n,e.type="string",e)})}}}o.prototype=n.mixin({buildWrappingScope:function(t,n,r){var o=new e.Scope(t,r);return o.origin=n,this.signal("wrapScope",o),o},maybeOverride:function(t){if(!this.options.modules||!this.options.modules.hasOwnProperty(t))return!1;if(this.modules[t])return this.modules[t];var n=this.options.modules[t];if("string"==typeof n&&"="==n.charAt(0))return e.def.parsePath(n.slice(1));var r=this.buildWrappingScope(e.cx().topScope,t);return e.def.load(n,r),this.modules[t]=r.exports},resolveModule:function(t,n){var r=t,o=this.maybeOverride(t);if(o)return o;var s=this.knownModules[t];if(s)return s;if(1==this.options.dontLoad||this.options.dontLoad&&new RegExp(this.options.dontLoad).test(t)||this.options.load&&!new RegExp(this.options.load).test(t))return e.ANull;for(var a,i=c(t),p=0;!a&&p<this.resolvers.length;p++)a=this.resolvers[p](t,n);if(a||(a=l(t,n)),!a)return e.ANull;var u=null;if("object"==typeof a&&"string"==typeof a.contents&&(u=a.contents,a=a.file),"string"!=typeof a)return i||(this.nonRelative[t]=!0),a;var s=this.modules[a];if(s&&u&&(s.modName=r),s)return s;/\.js$|(?:^\/)[^\.]+$/.test(a)&&this.server.addFile(a,u,n),i||(this.nonRelative[t]=a);var d=new e.AVal;return u&&(d.modName=r),this.modules[a]=d},findIn:function(e,t,n){for(var r=0;r<e.length;r++){var o=e[r](t,n);if(null!=o)return o}},isModName:function(e,t){return this.findIn(this.modNameTests,e,t)},isImport:function(e,t){return this.findIn(this.importTests,e,t)},get:function(t){return this.modules[t]||(this.modules[t]=new e.AVal)},completeModuleName:function(e,n,r){function o(o,s){for(var a in o)p(r,a,n)&&t.addCompletion(n,e,a,s&&o[a])}o(this.knownModules,!0),this.options.modules&&o(this.options.modules,!1);var s=Object.create(null);for(var a in this.nonRelative){var i=this.nonRelative[a];if(i||-1==a.indexOf("/"))p(r,a,n)&&t.addCompletion(n,e,a);else if(0==a.indexOf(r)&&r.indexOf("/")>-1){var l=/.*?\/(.*)/.exec(a)[1],c=i.indexOf(l);if(c>-1){var u=i.slice(0,c)+(/.*?\/(.*\/)?/.exec(r)[1]||"");if(u in s)continue;s[u]=!0,this.completeFileName(e,n,null,r,u)}}}},completeFileName:function(e,n,r,o){var l=r?s(a(r),o):i(o);for(var c in this.modules)if(c!=r&&p(l,c,n)){/\.js$/.test(c)&&(c=c.slice(0,c.length-3));var u=c.slice(l.length);t.addCompletion(n,e,o+u,this.modules[c])}},getModType:function(e){var t,n,r=this.isModName(e);if(null==r&&(t=this.isImport(e))&&(r=t.name,n=t.prop),null!=r){var o=this.resolveModule(r,e.sourceFile.name);if(n){var s=o.getObjType();o=s&&s.hasProp(n)||o.getProp(n)}return o}}}),r&&function(){var e=r("fs"),n=r("path");o.prototype.completeFileName=function(r,o,s,a,i){var l=this.server.projectDir,c=/\/$/.test(a);if(s){var u=n.resolve(l,n.dirname(s),a);i=c?u:n.dirname(u)}var d=c?a:n.dirname(a)+"/",h=c?"":n.basename(a),f=this;e.readdirSync(i).forEach(function(e){if(!/^\./.test(e)&&p(h,e,o)){var a=f.server.normalizeFilename(n.relative(l,n.resolve(i,e)));if(a==s)return;var c=f.modules[a];/\.js$/.test(e)&&(e=e.slice(0,e.length-3)),t.addCompletion(o,r,d+e,c)}})}}(),t.registerPlugin("modules",function(e,t){function n(e){if(e.ast){if(e.ast.environments&&(e.ast.environments.node||e.ast.environments.es_modules)&&!e.ast.environments.simplifiedCommonJS)return!0;if(e.ast.dependencies)for(var t=0;t<e.ast.dependencies.length;t++){var n=e.ast.dependencies[t];if("node"===n.env||"es_modules"===n.env)return!0}}return!1}e.mod.modules=new o(e,t),e.on("beforeLoad",function(e){n(e)&&(e.scope=this.mod.modules.buildWrappingScope(e.scope,e.name,e.ast))}),e.on("afterLoad",function(e){if(n(e)){var t=this.mod.modules.get(e.name);t.origin=e.name,this.mod.modules.signal("getExports",e,t)}}),e.on("reset",function(){this.mod.modules.modules=Object.create(null)}),e.on("preCondenseReach",u),e.on("postLoadDef",d),e.on("typeAt",h),e.on("completion",f)}),t.defineQueryType("exports",{takesFile:!0,run:function(n,r,o){function s(o){var s={},a=o.getType(!1);s.type=e.toString(a,3);var i=o.doc||a&&a.doc,l=o.url||a&&a.url;i&&(s.doc=i),l&&(s.url=l);var c=t.getSpan(o)||a&&t.getSpan(a);return c&&t.storeSpan(n,r,c,s),s}var a=n.mod.modules,i=a&&a.modules[o.name];if(!i)return{};var l=s(i),c=i.getType(!1);if(c instanceof e.Obj){var p=l.props={};for(var u in c.props)p[u]=s(c.props[u])}return l}})}),function(e){return"object"==typeof exports&&"object"==typeof module?e(require("../lib/infer"),require("../lib/tern"),require("acorn/dist/walk"),require("./modules")):"function"==typeof define&&define.amd?define("tern/plugin/es_modules",["../lib/infer","../lib/tern","acorn/dist/walk","./modules"],e):void e(tern,tern,acorn.walk)}(function(e,t,n){"use strict";function r(t,r){function o(n,o,s){a||(a=new e.Obj(!0),a.origin=t.name,a.originNode=t.ast,r.addType(a));var n=a.defProp(n,s);n.origin=t.name,o.propagate(n)}var s=e.cx().parent.mod.modules,a=null;n.simple(t.ast,{ImportDeclaration:function(e){for(var n=s.resolveModule(e.source.value,t.name),r=0;r<e.specifiers.length;r++){var o=e.specifiers[r],a=t.scope.getProp(o.local.name);"ImportNamespaceSpecifier"==o.type?n.propagate(a):"ImportDefaultSpecifier"==o.type?(n.getProp("default").propagate(a),n.propagate(a,i)):n.getProp(o.imported.name).propagate(a)}},ExportAllDeclaration:function(e){var n=s.resolveModule(e.source.value,t.name);n.forAllProps(function(e,t,n){n&&o(e,t,t.originNode)})},ExportDefaultDeclaration:function(n){var r=n.declaration.id||n.declaration;o("default",e.expressionType({node:r,state:t.scope}),r)},ExportNamedDeclaration:function(e){var n=e.declaration;if(n)if("VariableDeclaration"==n.type)for(var r=0;r<n.declarations.length;++r){var a=n.declarations[r];"Identifier"==a.id.type&&o(a.id.name,t.scope.getProp(a.id.name),a.id)}else n.id&&o(n.id.name,t.scope.getProp(n.id.name),n.id);if(e.specifiers.length)for(var i=e.source?s.resolveModule(e.source.value,t.name):t.scope,r=0;r<e.specifiers.length;r++){var l=e.specifiers[r];o(l.exported.name,i.getProp(l.local.name),l.local)}}})}function o(t){var n=t.sourceFile.ast;if(!n){var r=e.cx().parent;if(n=r.fileMap[t.sourceFile.name],!n)return;n=n.ast}return n}function s(t){if("Literal"==t.type&&"string"==typeof t.value){var n=e.findExpressionAround(o(t),null,t.end,null,function(e,t){return"ImportDeclaration"==t.type||/Export(All|Named)Declaration/.test(t.type)});if(n&&n.node.source==t)return t.value}}function a(t,n){if("Identifier"==t.type){var r=e.findExpressionAround(o(t),null,t.end,null,"ImportDeclaration");if(!r)return;for(var s=r.node.specifiers,a=0;a<s.length;a++){var i=s[a];if(i.local==t){var l={name:r.node.source.value,prop:null};return"ImportDefaultSpecifier"==i.type?l.prop="default":"ImportSpecifier"==i.type&&(l.prop=i.imported.name),l}}}else if("ImportDeclaration"==t.type&&/^import\s+\{\s*([\w$]+\s*,\s*)*$/.test(t.sourceFile.text.slice(t.start,n)))return{name:t.source.value,prop:""}}var i=80;t.registerPlugin("es_modules",function(e){e.loadPlugin("modules"),e.mod.modules.on("getExports",r),e.mod.modules.modNameTests.push(s),e.mod.modules.importTests.push(a),e.mod.modules.completableTypes.Identifier=!0,e.mod.modules.completableTypes.Literal=!0,e.mod.modules.completableTypes.ImportDeclaration=!0})}),function(e){return"object"==typeof exports&&"object"==typeof module?e(require("../lib/infer"),require("../lib/tern"),require("./modules")):"function"==typeof define&&define.amd?define("tern/plugin/commonjs",["../lib/infer","../lib/tern","./modules"],e):void e(tern,tern)}(function(e,t){"use strict";function n(t){if(t.originNode&&t.originNode.environments&&t.originNode.environments.node){var n=e.cx().definitions.commonjs;n.require.propagate(t.defProp("require"));var r=new e.Obj(!0);r.propagate(t.defProp("require"));var o=new e.Obj(n.Module.getProp("prototype").getType());o.propagate(t.defProp("module"));var s=new e.Obj(!0);o.origin=s.origin=t.origin,o.originNode=s.originNode=t.originNode,s.propagate(t.defProp("exports"));var a=t.exports=o.defProp("exports");s.propagate(a,l)}}function r(e){if("CallExpression"==e.type&&"Identifier"==e.callee.type&&"require"==e.callee.name){var t=e.arguments[0];return t&&"Literal"==t.type&&"string"==typeof t.value?t.value:void 0}}function o(t){var n=t.sourceFile.ast;if(!n){var r=e.cx().parent;if(n=r.fileMap[t.sourceFile.name],!n)return;n=n.ast}return n}function s(t){if("Literal"==t.type&&"string"==typeof t.value){var n=e.findExpressionAround(o(t),null,t.end,null,function(e,t){return null!=r(t)});return n&&n.node.arguments[0]==t?t.value:void 0}}function a(t){if("Identifier"==t.type){var n,s=e.findExpressionAround(o(t),null,t.end,null,"VariableDeclarator");if(s&&s.node.id==t){var a=s.node.init;return a&&null!=(n=r(a))?{name:n,prop:null}:a&&"MemberExpression"==a.type&&!a.computed&&null!=(n=r(a.object))?{name:n,prop:a.property.name}:void 0}}}function i(e){if(e)for(var t in e)return!0}var l=95;e.registerFunction("require",function(t,n,r){if(!r||!r.length||"Literal"!=r[0].type||"string"!=typeof r[0].value)return e.ANull;var o=e.cx(),s=o.parent,a=r[0].sourceFile.name,i=r[0].value,l=s.mod.modules.resolveModule(i,a);return l}),t.registerPlugin("commonjs",function(e){e.loadPlugin("modules"),e.mod.modules.on("wrapScope",n),e.mod.modules.on("getExports",function(e,t){var n=e.scope.exports;n&&(n.types.length>1||i(n.getObjType()))&&n.propagate(t)}),e.mod.modules.modNameTests.push(s),e.mod.modules.importTests.push(a),e.mod.modules.completableTypes.Identifier=!0,e.mod.modules.completableTypes.Literal=!0,e.addDefs(c)});var c={"!name":"commonjs","!define":{require:{"!type":"fn(id: string) -> !custom:require",resolve:{"!type":"fn() -> string","!url":"https://nodejs.org/api/globals.html#globals_require_resolve","!doc":"Use the internal require() machinery to look up the location of a module, but rather than loading the module, just return the resolved filename."},cache:{"!url":"https://nodejs.org/api/globals.html#globals_require_cache","!doc":"Modules are cached in this object when they are required. By deleting a key value from this object, the next require will reload the module."},extensions:{"!url":"https://nodejs.org/api/globals.html#globals_require_extensions","!doc":"Instruct require on how to handle certain file extensions."},"!url":"https://nodejs.org/api/globals.html#globals_require","!doc":"To require modules."},Module:{"!type":"fn()","!url":"https://nodejs.org/api/modules.html","!doc":"Node has a simple module loading system. In Node, files and modules are in one-to-one correspondence.",prototype:{exports:{"!type":"?","!url":"https://nodejs.org/api/modules.html#modules_module_exports","!doc":"The exports object is created by the Module system. Sometimes this is not acceptable, many want their module to be an instance of some class. To do this assign the desired export object to module.exports. For example suppose we were making a module called a.js"},require:{"!type":"require","!url":"https://nodejs.org/api/modules.html#modules_module_require_id","!doc":"The module.require method provides a way to load a module as if require() was called from the original module."},id:{"!type":"string","!url":"https://nodejs.org/api/modules.html#modules_module_id","!doc":"The identifier for the module. Typically this is the fully resolved filename."},filename:{"!type":"string","!url":"https://nodejs.org/api/modules.html#modules_module_filename","!doc":"The fully resolved filename to the module."},loaded:{"!type":"bool","!url":"https://nodejs.org/api/modules.html#modules_module_loaded","!doc":"Whether or not the module is done loading, or is in the process of loading."},parent:{"!type":"+Module","!url":"https://nodejs.org/api/modules.html#modules_module_parent","!doc":"The module that required this one."},children:{"!type":"[+Module]","!url":"https://nodejs.org/api/modules.html#modules_module_children","!doc":"The module objects required by this one."}}},module:{}},module:{"!type":"+Module","!url":"https://nodejs.org/api/globals.html#globals_module","!doc":"A reference to the current module. In particular module.exports is the same as the exports object. module isn't actually a global but rather local to each module."}}}),function(e){return"object"==typeof exports&&"object"==typeof module?e(require("../lib/infer"),require("../lib/tern"),require("./commonjs"),require):"function"==typeof define&&define.amd?define("tern/plugin/node_resolve",["../lib/infer","../lib/tern","./commonjs"],e):void e(tern,tern)}(function(e,t,n,r){"use strict";function o(t,n){var r=a(t,n);return r&&e.cx().parent.normalizeFilename(r)}function s(){}var a;r?function(){function t(e){for(;;){try{return JSON.parse(i.readFileSync(o.resolve(e,"package.json")))}catch(t){}var n=o.dirname(e);if(n==e)return null;e=n}}var n=r("module"),o=r("path"),i=r("fs");a=function(t,r){var s=e.cx().parent.projectDir,a=o.resolve(s,r),i=o.dirname(a);/^\.\.?\//.test(t)&&(t=o.resolve(s,i,t));var l={id:a,paths:n._nodeModulePaths(i).concat(n.globalPaths)};try{return n._resolveFilename(t,l)}catch(c){return null}},s=function(e,n){function r(e){for(var t in e)t in n||(n[t]=null)}var o=t(e);return o?(r(o.dependencies),r(o.devDependencies),void r(o.peerDependencies)):null}}():function(){function e(e,t){if("/"==t[0])return t;var n,r=e.lastIndexOf("/");for(r>=0&&(t=e.slice(0,r+1)+t);n=/[^\/]*[^\/\.][^\/]*\/\.\.\//.exec(t);)t=t.slice(0,n.index)+t.slice(n.index+n[0].length);return t.replace(/(^|[^\.])\.\//g,"$1")}a=function(t,n){return/^\.\.?\//.test(t)?e(n,t):t}}(),t.registerPlugin("node_resolve",function(e){e.loadPlugin("commonjs"),e.mod.modules.resolvers.push(o),s(e.projectDir,e.mod.modules.knownModules)})}),function(e){return"object"==typeof exports&&"object"==typeof module?e(require("../lib/tern"),require("./node_resolve")):"function"==typeof define&&define.amd?define("tern/plugin/node",["../lib/tern","./node_resolve"],e):void e(tern,tern)}(function(e){"use strict";e.registerPlugin("node",function(e){e.loadPlugin("node_resolve"),e.on("postReset",function(){var t=e.mod.modules,n=e.cx.definitions.node;for(var r in n)/^[a-z_]*$/.test(r)&&(t.knownModules[r]=n[r])}),e.addDefs(t)});var t={"!name":"node","!define":{events:{"!url":"https://nodejs.org/api/events.html","!doc":"Many objects in Node emit events: a net.Server emits an event each time a peer connects to it, a fs.readStream emits an event when the file is opened. All objects which emit events are instances of events.EventEmitter.",EventEmitter:{prototype:{addListener:{"!type":"fn(event: string, listener: fn())","!url":"https://nodejs.org/api/events.html#events_emitter_addlistener_event_listener","!doc":"Adds a listener to the end of the listeners array for the specified event."},on:{"!type":"fn(event: string, listener: fn())","!url":"https://nodejs.org/api/events.html#events_emitter_on_event_listener","!doc":"Adds a listener to the end of the listeners array for the specified event."},once:{"!type":"fn(event: string, listener: fn())","!url":"https://nodejs.org/api/events.html#events_emitter_once_event_listener","!doc":"Adds a one time listener for the event. This listener is invoked only the next time the event is fired, after which it is removed."},removeListener:{"!type":"fn(event: string, listener: fn())","!url":"https://nodejs.org/api/events.html#events_emitter_removelistener_event_listener","!doc":"Remove a listener from the listener array for the specified event. Caution: changes array indices in the listener array behind the listener."},removeAllListeners:{"!type":"fn(event: string)","!url":"https://nodejs.org/api/events.html#events_emitter_removealllisteners_event","!doc":"Removes all listeners, or those of the specified event."},setMaxListeners:{"!type":"fn(n: number)","!url":"https://nodejs.org/api/events.html#events_emitter_setmaxlisteners_n","!doc":"By default EventEmitters will print a warning if more than 10 listeners are added for a particular event. This is a useful default which helps finding memory leaks. Obviously not all Emitters should be limited to 10. This function allows that to be increased. Set to zero for unlimited."},listeners:{"!type":"fn(event: string) -> [fn()]","!url":"https://nodejs.org/api/events.html#events_emitter_listeners_event","!doc":"Returns an array of listeners for the specified event."},emit:{"!type":"fn(event: string)","!url":"https://nodejs.org/api/events.html#events_emitter_emit_event_arg1_arg2","!doc":"Execute each of the listeners in order with the supplied arguments."}},"!url":"https://nodejs.org/api/events.html#events_class_events_eventemitter","!doc":"To access the EventEmitter class, require('events').EventEmitter."}},stream:{"!type":"fn()",prototype:{"!proto":"events.EventEmitter.prototype",pipe:{"!type":"fn(destination: +stream.Writable, options?: ?)","!url":"https://nodejs.org/api/stream.html#stream_readable_pipe_destination_options","!doc":"Connects this readable stream to destination WriteStream. Incoming data on this stream gets written to destination. Properly manages back-pressure so that a slow destination will not be overwhelmed by a fast readable stream."}},Writable:{"!type":"fn(options?: ?)",prototype:{"!proto":"stream.prototype",write:{"!type":"fn(chunk: string|+Buffer, encoding?: string, callback?: fn()) -> bool","!url":"https://nodejs.org/api/stream.html#stream_writable_write_chunk_encoding_callback_1","!doc":"Writes chunk to the stream. Returns true if the data has been flushed to the underlying resource. Returns false to indicate that the buffer is full, and the data will be sent out in the future. The 'drain' event will indicate when the buffer is empty again."},cork:{"!type":"fn()","!url":"https://nodejs.org/api/stream.html#stream_writable_cork","!doc":"Forces buffering of all writes. Buffered data will be flushed either at .uncork() or at .end() call."},uncork:{"!type":"fn()","!url":"https://nodejs.org/api/stream.html#stream_writable_uncork","!doc":"Flush all data, buffered since .cork() call."},setDefaultEncoding:{"!type":"fn(encoding: string) -> bool","!url":"https://nodejs.org/api/stream.html#stream_writable_setdefaultencoding_encoding","!doc":"Sets the default encoding for a writable stream. Returns true if the encoding is valid and is set. Otherwise returns false."},end:{"!type":"fn(chunk?: string|+Buffer, encoding?: string, callback?: fn()) -> bool","!url":"https://nodejs.org/api/stream.html#stream_writable_end_chunk_encoding_callback","!doc":"Call this method to signal the end of the data being written to the stream."}},"!url":"https://nodejs.org/api/stream.html#stream_class_stream_writable","!doc":"A Writable Stream has the following methods, members, and events."},Readable:{"!type":"fn(options?: ?)",prototype:{"!proto":"stream.prototype",setEncoding:{"!type":"fn(encoding: string)","!url":"https://nodejs.org/api/stream.html#stream_readable_setencoding_encoding","!doc":"Makes the 'data' event emit a string instead of a Buffer. encoding can be 'utf8', 'utf16le' ('ucs2'), 'ascii', or 'hex'."},pause:{"!type":"fn()","!url":"https://nodejs.org/api/stream.html#stream_readable_pause","!doc":"Switches the readable stream into \"old mode\", where data is emitted using a 'data' event rather than being buffered for consumption via the read() method."},resume:{"!type":"fn()","!url":"https://nodejs.org/api/stream.html#stream_readable_resume","!doc":"Switches the readable stream into \"old mode\", where data is emitted using a 'data' event rather than being buffered for consumption via the read() method."},destroy:"fn()",unpipe:{"!type":"fn(dest?: +stream.Writable)","!url":"https://nodejs.org/api/stream.html#stream_readable_unpipe_destination","!doc":"Undo a previously established pipe(). If no destination is provided, then all previously established pipes are removed."},push:{"!type":"fn(chunk: +Buffer) -> bool","!url":"https://nodejs.org/api/stream.html#stream_readable_push_chunk","!doc":"Explicitly insert some data into the read queue. If called with null, will signal the end of the data."},unshift:{"!type":"fn(chunk: +Buffer) -> bool","!url":"https://nodejs.org/api/stream.html#stream_readable_unshift_chunk","!doc":"This is the corollary of readable.push(chunk). Rather than putting the data at the end of the read queue, it puts it at the front of the read queue."},wrap:{"!type":"fn(stream: ?) -> +stream.Readable","!url":"https://nodejs.org/api/stream.html#stream_readable_wrap_stream","!doc":"If you are using an older Node library that emits 'data' events and has a pause() method that is advisory only, then you can use the wrap() method to create a Readable stream that uses the old stream as its data source."},read:{"!type":"fn(size?: number) -> +Buffer","!url":"https://nodejs.org/api/stream.html#stream_readable_read_size_1","!doc":"Call this method to consume data once the 'readable' event is emitted."}},"!url":"https://nodejs.org/api/stream.html#stream_class_stream_readable","!doc":"A Readable Stream has the following methods, members, and events."},Duplex:{"!type":"fn(options?: ?)",prototype:{"!proto":"stream.Readable.prototype",write:"fn(chunk: +Buffer, encoding?: string, callback?: fn()) -> bool",end:"fn(chunk: +Buffer, encoding?: string, callback?: fn()) -> bool"},"!url":"https://nodejs.org/api/stream.html#stream_class_stream_duplex","!doc":'A "duplex" stream is one that is both Readable and Writable, such as a TCP socket connection.'},Transform:{"!type":"fn(options?: ?)",prototype:{"!proto":"stream.Duplex.prototype"},"!url":"https://nodejs.org/api/stream.html#stream_class_stream_transform","!doc":'A "transform" stream is a duplex stream where the output is causally connected in some way to the input, such as a zlib stream or a crypto stream.'},PassThrough:"stream.Transform","!url":"https://nodejs.org/api/stream.html#stream_stream","!doc":"A stream is an abstract interface implemented by various objects in Node. For example a request to an HTTP server is a stream, as is stdout. Streams are readable, writable, or both. All streams are instances of EventEmitter"},querystring:{"!url":"https://nodejs.org/api/querystring.html","!doc":"This module provides utilities for dealing with query strings.",stringify:{"!type":"fn(obj: ?, sep?: string, eq?: string) -> string","!url":"https://nodejs.org/api/querystring.html#querystring_querystring_stringify_obj_sep_eq","!doc":"Serialize an object to a query string. Optionally override the default separator ('&') and assignment ('=') characters."},parse:{"!type":"fn(str: string, sep?: string, eq?: string, options?: ?) -> ?","!url":"https://nodejs.org/api/querystring.html#querystring_querystring_parse_str_sep_eq_options","!doc":"Deserialize a query string to an object. Optionally override the default separator ('&') and assignment ('=') characters."},escape:{"!type":"fn(string) -> string","!url":"https://nodejs.org/api/querystring.html#querystring_querystring_escape","!doc":"The escape function used by querystring.stringify, provided so that it could be overridden if necessary."},unescape:{"!type":"fn(string) -> string","!url":"https://nodejs.org/api/querystring.html#querystring_querystring_unescape","!doc":"The unescape function used by querystring.parse, provided so that it could be overridden if necessary."}},http:{"!url":"https://nodejs.org/api/http.html","!doc":"The HTTP interfaces in Node are designed to support many features of the protocol which have been traditionally difficult to use. In particular, large, possibly chunk-encoded, messages. The interface is careful to never buffer entire requests or responses--the user is able to stream data.",STATUS_CODES:{},createServer:{"!type":"fn(listener?: fn(request: +http.IncomingMessage, response: +http.ServerResponse)) -> +http.Server","!url":"https://nodejs.org/api/http.html#http_http_createserver_requestlistener","!doc":"Returns a new web server object."},Server:{"!type":"fn()",prototype:{"!proto":"events.EventEmitter.prototype",listen:{"!type":"fn(port: number, hostname?: string, backlog?: number, callback?: fn())","!url":"https://nodejs.org/api/http.html#http_server_listen_port_hostname_backlog_callback","!doc":"Begin accepting connections on the specified port and hostname. If the hostname is omitted, the server will accept connections directed to any IPv4 address (INADDR_ANY)."},close:{"!type":"fn(callback?: ?)","!url":"https://nodejs.org/api/http.html#http_server_close_callback","!doc":"Stops the server from accepting new connections."},maxHeadersCount:{"!type":"number","!url":"https://nodejs.org/api/http.html#http_server_maxheaderscount","!doc":"Limits maximum incoming headers count, equal to 1000 by default. If set to 0 - no limit will be applied."},setTimeout:{"!type":"fn(timeout: number, callback?: fn())","!url":"https://nodejs.org/api/http.html#http_server_settimeout_msecs_callback","!doc":"Sets the timeout value for sockets, and emits a 'timeout' event on the Server object, passing the socket as an argument, if a timeout occurs."},timeout:{"!type":"number","!url":"https://nodejs.org/api/http.html#http_server_timeout","!doc":"The number of milliseconds of inactivity before a socket is presumed to have timed out."}},"!url":"https://nodejs.org/api/http.html#http_class_http_server","!doc":"Class for HTTP server objects."},ServerResponse:{"!type":"fn()",prototype:{"!proto":"stream.Writable.prototype",writeContinue:{"!type":"fn()","!url":"https://nodejs.org/api/http.html#http_response_writecontinue","!doc":"Sends a HTTP/1.1 100 Continue message to the client, indicating that the request body should be sent."},writeHead:{"!type":"fn(statusCode: number, headers?: ?)","!url":"https://nodejs.org/api/http.html#http_response_writehead_statuscode_reasonphrase_headers","!doc":"Sends a response header to the request. The status code is a 3-digit HTTP status code, like 404. The last argument, headers, are the response headers. Optionally one can give a human-readable reasonPhrase as the second argument."},setTimeout:{"!type":"fn(timeout: number, callback?: fn())","!url":"https://nodejs.org/api/http.html#http_response_settimeout_msecs_callback","!doc":"Sets the Socket's timeout value to msecs. If a callback is provided, then it is added as a listener on the 'timeout' event on the response object."},statusCode:{"!type":"number","!url":"https://nodejs.org/api/http.html#http_response_statuscode","!doc":"When using implicit headers (not calling response.writeHead() explicitly), this property controls the status code that will be sent to the client when the headers get flushed."},setHeader:{"!type":"fn(name: string, value: string)","!url":"https://nodejs.org/api/http.html#http_response_setheader_name_value","!doc":"Sets a single header value for implicit headers. If this header already exists in the to-be-sent headers, its value will be replaced. Use an array of strings here if you need to send multiple headers with the same name."},headersSent:{"!type":"bool","!url":"https://nodejs.org/api/http.html#http_response_headerssent","!doc":"Boolean (read-only). True if headers were sent, false otherwise."},sendDate:{"!type":"bool","!url":"https://nodejs.org/api/http.html#http_response_senddate","!doc":"When true, the Date header will be automatically generated and sent in the response if it is not already present in the headers. Defaults to true."},getHeader:{"!type":"fn(name: string) -> string","!url":"https://nodejs.org/api/http.html#http_response_getheader_name","!doc":"Reads out a header that's already been queued but not sent to the client. Note that the name is case insensitive. This can only be called before headers get implicitly flushed."},removeHeader:{"!type":"fn(name: string)","!url":"https://nodejs.org/api/http.html#http_response_removeheader_name","!doc":"Removes a header that's queued for implicit sending."},addTrailers:{"!type":"fn(headers: ?)","!url":"https://nodejs.org/api/http.html#http_response_addtrailers_headers","!doc":"This method adds HTTP trailing headers (a header but at the end of the message) to the response."}},"!url":"https://nodejs.org/api/http.html#http_class_http_serverresponse","!doc":"This object is created internally by a HTTP server--not by the user. It is passed as the second parameter to the 'request' event."},request:{"!type":"fn(options: ?, callback?: fn(res: +http.IncomingMessage)) -> +http.ClientRequest","!url":"https://nodejs.org/api/http.html#http_http_request_options_callback","!doc":"Node maintains several connections per server to make HTTP requests. This function allows one to transparently issue requests."},get:{"!type":"fn(options: ?, callback?: fn(res: +http.IncomingMessage)) -> +http.ClientRequest","!url":"https://nodejs.org/api/http.html#http_http_get_options_callback","!doc":"Since most requests are GET requests without bodies, Node provides this convenience method. The only difference between this method and http.request() is that it sets the method to GET and calls req.end() automatically."},globalAgent:{"!type":"+http.Agent","!url":"https://nodejs.org/api/http.html#http_http_globalagent","!doc":"Global instance of Agent which is used as the default for all http client requests."},Agent:{"!type":"fn()",prototype:{maxSockets:{"!type":"number","!url":"https://nodejs.org/api/http.html#http_agent_maxsockets","!doc":"By default set to 5. Determines how many concurrent sockets the agent can have open per host."},sockets:{"!type":"[+net.Socket]","!url":"https://nodejs.org/api/http.html#http_agent_sockets","!doc":"An object which contains arrays of sockets currently in use by the Agent. Do not modify."},requests:{"!type":"[+http.ClientRequest]","!url":"https://nodejs.org/api/http.html#http_agent_requests","!doc":"An object which contains queues of requests that have not yet been assigned to sockets. Do not modify."}},"!url":"https://nodejs.org/api/http.html#http_class_http_agent","!doc":"In node 0.5.3+ there is a new implementation of the HTTP Agent which is used for pooling sockets used in HTTP client requests."},ClientRequest:{"!type":"fn()",prototype:{"!proto":"stream.Writable.prototype",abort:{"!type":"fn()","!url":"https://nodejs.org/api/http.html#http_request_abort","!doc":"Aborts a request. (New since v0.3.8.)"},setTimeout:{"!type":"fn(timeout: number, callback?: fn())","!url":"https://nodejs.org/api/http.html#http_request_settimeout_timeout_callback","!doc":"Once a socket is assigned to this request and is connected socket.setTimeout() will be called."},setNoDelay:{"!type":"fn(noDelay?: fn())","!url":"https://nodejs.org/api/http.html#http_request_setnodelay_nodelay","!doc":"Once a socket is assigned to this request and is connected socket.setNoDelay() will be called."},setSocketKeepAlive:{"!type":"fn(enable?: bool, initialDelay?: number)","!url":"https://nodejs.org/api/http.html#http_request_setsocketkeepalive_enable_initialdelay","!doc":"Once a socket is assigned to this request and is connected socket.setKeepAlive() will be called."}},"!url":"https://nodejs.org/api/http.html#http_class_http_clientrequest","!doc":"This object is created internally and returned from http.request(). It represents an in-progress request whose header has already been queued. The header is still mutable using the setHeader(name, value), getHeader(name), removeHeader(name) API. The actual header will be sent along with the first data chunk or when closing the connection."},IncomingMessage:{"!type":"fn()",prototype:{"!proto":"stream.Readable.prototype",httpVersion:{"!type":"string","!url":"https://nodejs.org/api/http.html#http_message_httpversion","!doc":"In case of server request, the HTTP version sent by the client. In the case of client response, the HTTP version of the connected-to server. Probably either '1.1' or '1.0'."},headers:{"!type":"?","!url":"https://nodejs.org/api/http.html#http_message_headers","!doc":"The request/response headers object."},trailers:{"!type":"?","!url":"https://nodejs.org/api/http.html#http_message_trailers","!doc":"The request/response trailers object. Only populated after the 'end' event."},setTimeout:{"!type":"fn(timeout: number, callback?: fn())","!url":"https://nodejs.org/api/http.html#http_message_settimeout_msecs_callback","!doc":"Calls message.connection.setTimeout(msecs, callback)."},setEncoding:{"!type":"fn(encoding?: string)","!url":"https://nodejs.org/api/http.html#http_message_setencoding_encoding","!doc":"Set the encoding for data emitted by the 'data' event."},pause:{"!type":"fn()","!url":"https://nodejs.org/api/http.html#http_message_pause","!doc":"Pauses request/response from emitting events. Useful to throttle back a download."},resume:{"!type":"fn()","!url":"https://nodejs.org/api/http.html#http_message_resume","!doc":"Resumes a paused request/response."},method:{"!type":"string","!url":"https://nodejs.org/api/http.html#http_message_method","!doc":"Only valid for request obtained from http.Server."},url:{"!type":"string","!url":"https://nodejs.org/api/http.html#http_message_url","!doc":"Only valid for request obtained from http.Server."},statusCode:{"!type":"number","!url":"https://nodejs.org/api/http.html#http_message_statuscode","!doc":"Only valid for response obtained from http.ClientRequest."},socket:{"!type":"+net.Socket","!url":"https://nodejs.org/api/http.html#http_message_socket","!doc":"The net.Socket object associated with the connection."}},"!url":"https://nodejs.org/api/http.html#http_http_incomingmessage","!doc":"An IncomingMessage object is created by http.Server or http.ClientRequest and passed as the first argument to the 'request' and 'response' event respectively. It may be used to access response status, headers and data."}},https:{"!url":"https://nodejs.org/api/http.html","!doc":"HTTPS is the HTTP protocol over TLS/SSL. In Node this is implemented as a separate module.",Server:"http.Server",createServer:{"!type":"fn(listener?: fn(request: +http.IncomingMessage, response: +http.ServerResponse)) -> +https.Server","!url":"https://nodejs.org/api/https.html#https_https_createserver_options_requestlistener","!doc":"Returns a new HTTPS web server object. The options is similar to tls.createServer(). The requestListener is a function which is automatically added to the 'request' event."},request:{"!type":"fn(options: ?, callback?: fn(res: +http.IncomingMessage)) -> +http.ClientRequest","!url":"https://nodejs.org/api/https.html#https_https_request_options_callback","!doc":"Makes a request to a secure web server."},get:{"!type":"fn(options: ?, callback?: fn(res: +http.IncomingMessage)) -> +http.ClientRequest","!url":"https://nodejs.org/api/https.html#https_https_get_options_callback","!doc":"Like http.get() but for HTTPS."},Agent:"http.Agent",globalAgent:"http.globalAgent"},cluster:{"!proto":"events.EventEmitter.prototype",settings:{exec:"string",args:"[string]",silent:"bool","!url":"https://nodejs.org/api/cluster.html#cluster_cluster_settings","!doc":"All settings set by the .setupMaster is stored in this settings object. This object is not supposed to be changed or set manually, by you."},Worker:{"!type":"fn()",prototype:{"!proto":"events.EventEmitter.prototype",id:{"!type":"string","!url":"https://nodejs.org/api/cluster.html#cluster_worker_id","!doc":"Each new worker is given its own unique id, this id is stored in the id."},process:{"!type":"+child_process.ChildProcess","!url":"https://nodejs.org/api/cluster.html#cluster_worker_process","!doc":"All workers are created using child_process.fork(), the returned object from this function is stored in process."},suicide:{"!type":"bool","!url":"https://nodejs.org/api/cluster.html#cluster_worker_suicide","!doc":"This property is a boolean. It is set when a worker dies after calling .kill() or immediately after calling the .disconnect() method. Until then it is undefined."},send:{"!type":"fn(message: ?, sendHandle?: ?)","!url":"https://nodejs.org/api/cluster.html#cluster_worker_send_message_sendhandle","!doc":"This function is equal to the send methods provided by child_process.fork(). In the master you should use this function to send a message to a specific worker. However in a worker you can also use process.send(message), since this is the same function."},destroy:"fn()",disconnect:{"!type":"fn()","!url":"https://nodejs.org/api/cluster.html#cluster_worker_disconnect","!doc":"When calling this function the worker will no longer accept new connections, but they will be handled by any other listening worker. Existing connection will be allowed to exit as usual. When no more connections exist, the IPC channel to the worker will close allowing it to die graceful. When the IPC channel is closed the disconnect event will emit, this is then followed by the exit event, there is emitted when the worker finally die."},kill:{"!type":"fn(signal?: string)","!url":"https://nodejs.org/api/cluster.html#cluster_worker_kill_signal_sigterm","!doc":"This function will kill the worker, and inform the master to not spawn a new worker. The boolean suicide lets you distinguish between voluntary and accidental exit."}},"!url":"https://nodejs.org/api/cluster.html#cluster_class_worker","!doc":"A Worker object contains all public information and method about a worker. In the master it can be obtained using cluster.workers. In a worker it can be obtained using cluster.worker."},isMaster:{"!type":"bool","!url":"https://nodejs.org/api/cluster.html#cluster_cluster_ismaster","!doc":"True if the process is a master. This is determined by the process.env.NODE_UNIQUE_ID. If process.env.NODE_UNIQUE_ID is undefined, then isMaster is true."},isWorker:{"!type":"bool","!url":"https://nodejs.org/api/cluster.html#cluster_cluster_isworker","!doc":"This boolean flag is true if the process is a worker forked from a master. If the process.env.NODE_UNIQUE_ID is set to a value, then isWorker is true."},setupMaster:{"!type":"fn(settings?: cluster.settings)","!url":"https://nodejs.org/api/cluster.html#cluster_cluster_setupmaster_settings","!doc":"setupMaster is used to change the default 'fork' behavior. The new settings are effective immediately and permanently, they cannot be changed later on."},fork:{"!type":"fn(env?: ?) -> +cluster.Worker","!url":"https://nodejs.org/api/cluster.html#cluster_cluster_fork_env","!doc":"Spawn a new worker process. This can only be called from the master process."},disconnect:{"!type":"fn(callback?: fn())","!url":"https://nodejs.org/api/cluster.html#cluster_cluster_disconnect_callback","!doc":"When calling this method, all workers will commit a graceful suicide. When they are disconnected all internal handlers will be closed, allowing the master process to die graceful if no other event is waiting."},worker:{"!type":"+cluster.Worker","!url":"https://nodejs.org/api/cluster.html#cluster_cluster_worker","!doc":"A reference to the current worker object. Not available in the master process."},workers:{"!type":"[+cluster.Worker]","!url":"https://nodejs.org/api/cluster.html#cluster_cluster_workers","!doc":"A hash that stores the active worker objects, keyed by id field. Makes it easy to loop through all the workers. It is only available in the master process."},"!url":"https://nodejs.org/api/cluster.html#cluster_cluster","!doc":"A single instance of Node runs in a single thread. To take advantage of multi-core systems the user will sometimes want to launch a cluster of Node processes to handle the load."},zlib:{"!url":"https://nodejs.org/api/zlib.html","!doc":"This provides bindings to Gzip/Gunzip, Deflate/Inflate, and DeflateRaw/InflateRaw classes. Each class takes the same options, and is a readable/writable Stream.",Zlib:{"!type":"fn()",prototype:{"!proto":"stream.Duplex.prototype",flush:{"!type":"fn(callback: fn())","!url":"https://nodejs.org/api/zlib.html#zlib_zlib_flush_callback","!doc":"Flush pending data. Don't call this frivolously, premature flushes negatively impact the effectiveness of the compression algorithm."},reset:{"!type":"fn()","!url":"https://nodejs.org/api/zlib.html#zlib_zlib_reset","!doc":"Reset the compressor/decompressor to factory defaults. Only applicable to the inflate and deflate algorithms."}},"!url":"https://nodejs.org/api/zlib.html#zlib_class_zlib_zlib","!doc":"Not exported by the zlib module. It is documented here because it is the base class of the compressor/decompressor classes."},deflate:{"!type":"fn(buf: +Buffer, callback: fn())","!url":"https://nodejs.org/api/zlib.html#zlib_zlib_deflate_buf_callback","!doc":"Compress a string with Deflate."},deflateRaw:{"!type":"fn(buf: +Buffer, callback: fn())","!url":"https://nodejs.org/api/zlib.html#zlib_zlib_deflateraw_buf_callback","!doc":"Compress a string with DeflateRaw."},gzip:{"!type":"fn(buf: +Buffer, callback: fn())","!url":"https://nodejs.org/api/zlib.html#zlib_zlib_gzip_buf_callback","!doc":"Compress a string with Gzip."},gunzip:{"!type":"fn(buf: +Buffer, callback: fn())","!url":"https://nodejs.org/api/zlib.html#zlib_zlib_gunzip_buf_callback","!doc":"Decompress a raw Buffer with Gunzip."},inflate:{"!type":"fn(buf: +Buffer, callback: fn())","!url":"https://nodejs.org/api/zlib.html#zlib_zlib_inflate_buf_callback","!doc":"Decompress a raw Buffer with Inflate."},inflateRaw:{"!type":"fn(buf: +Buffer, callback: fn())","!url":"https://nodejs.org/api/zlib.html#zlib_zlib_inflateraw_buf_callback","!doc":"Decompress a raw Buffer with InflateRaw."},unzip:{"!type":"fn(buf: +Buffer, callback: fn())","!url":"https://nodejs.org/api/zlib.html#zlib_zlib_unzip_buf_callback","!doc":"Decompress a raw Buffer with Unzip."},Gzip:{"!type":"fn()","!url":"https://nodejs.org/api/zlib.html#zlib_class_zlib_gzip","!doc":"Compress data using gzip.",prototype:{"!proto:":"zlib.Zlib.prototype"}},createGzip:{"!type":"fn(options: ?) -> +zlib.Zlib","!url":"https://nodejs.org/api/zlib.html#zlib_zlib_creategzip_options","!doc":"Returns a new Gzip object with an options."},Gunzip:{"!type":"fn()","!url":"https://nodejs.org/api/zlib.html#zlib_class_zlib_gunzip","!doc":"Decompress a gzip stream.",prototype:{"!proto:":"zlib.Zlib.prototype"}},createGunzip:{"!type":"fn(options: ?) -> +zlib.Gunzip","!url":"https://nodejs.org/api/zlib.html#zlib_zlib_creategunzip_options","!doc":"Returns a new Gunzip object with an options."},Deflate:{"!type":"fn()","!url":"https://nodejs.org/api/zlib.html#zlib_class_zlib_deflate","!doc":"Compress data using deflate.",prototype:{"!proto:":"zlib.Zlib.prototype"}},createDeflate:{"!type":"fn(options: ?) -> +zlib.Deflate","!url":"https://nodejs.org/api/zlib.html#zlib_zlib_createdeflate_options","!doc":"Returns a new Deflate object with an options."},Inflate:{"!type":"fn()","!url":"https://nodejs.org/api/zlib.html#zlib_class_zlib_inflate","!doc":"Decompress a deflate stream.",prototype:{"!proto:":"zlib.Zlib.prototype"}},createInflate:{"!type":"fn(options: ?) -> +zlib.Inflate","!url":"https://nodejs.org/api/zlib.html#zlib_zlib_createinflate_options","!doc":"Returns a new Inflate object with an options."},InflateRaw:{"!type":"fn()","!url":"https://nodejs.org/api/zlib.html#zlib_class_zlib_inflateraw","!doc":"Decompress a raw deflate stream.",prototype:{"!proto:":"zlib.Zlib.prototype"}},createInflateRaw:{"!type":"fn(options: ?) -> +zlib.InflateRaw","!url":"https://nodejs.org/api/zlib.html#zlib_zlib_createinflateraw_options","!doc":"Returns a new InflateRaw object with an options."},DeflateRaw:{"!type":"fn()","!url":"https://nodejs.org/api/zlib.html#zlib_class_zlib_deflateraw","!doc":"Compress data using deflate, and do not append a zlib header.",prototype:{"!proto:":"zlib.Zlib.prototype"}},createDeflateRaw:{"!type":"fn(options: ?) -> +zlib.DeflateRaw","!url":"https://nodejs.org/api/zlib.html#zlib_zlib_createdeflateraw_options","!doc":"Returns a new DeflateRaw object with an options."},Unzip:{"!type":"fn()","!url":"https://nodejs.org/api/zlib.html#zlib_class_zlib_unzip","!doc":"Decompress either a Gzip- or Deflate-compressed stream by auto-detecting the header.",prototype:{"!proto:":"zlib.Zlib.prototype"}},createUnzip:{"!type":"fn(options: ?) -> +zlib.Unzip","!url":"https://nodejs.org/api/zlib.html#zlib_zlib_createunzip_options","!doc":"Returns a new Unzip object with an options."},Z_NO_FLUSH:"number",Z_PARTIAL_FLUSH:"number",Z_SYNC_FLUSH:"number",Z_FULL_FLUSH:"number",Z_FINISH:"number",Z_BLOCK:"number",Z_TREES:"number",Z_OK:"number",Z_STREAM_END:"number",Z_NEED_DICT:"number",Z_ERRNO:"number",Z_STREAM_ERROR:"number",Z_DATA_ERROR:"number",Z_MEM_ERROR:"number",Z_BUF_ERROR:"number",Z_VERSION_ERROR:"number",Z_NO_COMPRESSION:"number",Z_BEST_SPEED:"number",Z_BEST_COMPRESSION:"number",Z_DEFAULT_COMPRESSION:"number",Z_FILTERED:"number",Z_HUFFMAN_ONLY:"number",Z_RLE:"number",Z_FIXED:"number",Z_DEFAULT_STRATEGY:"number",Z_BINARY:"number",Z_TEXT:"number",Z_ASCII:"number",Z_UNKNOWN:"number",Z_DEFLATED:"number",Z_NULL:"number"},os:{"!url":"https://nodejs.org/api/os.html","!doc":"Provides a few basic operating-system related utility functions.",tmpdir:{"!type":"fn() -> string","!url":"https://nodejs.org/api/os.html#os_os_tmpdir","!doc":"Returns the operating system's default directory for temp files."},endianness:{"!type":"fn() -> string","!url":"https://nodejs.org/api/os.html#os_os_endianness","!doc":'Returns the endianness of the CPU. Possible values are "BE" or "LE".'},hostname:{"!type":"fn() -> string","!url":"https://nodejs.org/api/os.html#os_os_hostname","!doc":"Returns the hostname of the operating system."},type:{"!type":"fn() -> string","!url":"https://nodejs.org/api/os.html#os_os_type","!doc":"Returns the operating system name."},platform:{"!type":"fn() -> string","!url":"https://nodejs.org/api/os.html#os_os_platform","!doc":"Returns the operating system platform."},arch:{"!type":"fn() -> string","!url":"https://nodejs.org/api/os.html#os_os_arch","!doc":"Returns the operating system CPU architecture."},release:{"!type":"fn() -> string","!url":"https://nodejs.org/api/os.html#os_os_release","!doc":"Returns the operating system release."},uptime:{"!type":"fn() -> number","!url":"https://nodejs.org/api/os.html#os_os_uptime","!doc":"Returns the system uptime in seconds."},loadavg:{"!type":"fn() -> [number]","!url":"https://nodejs.org/api/os.html#os_os_loadavg","!doc":"Returns an array containing the 1, 5, and 15 minute load averages."},totalmem:{"!type":"fn() -> number","!url":"https://nodejs.org/api/os.html#os_os_totalmem","!doc":"Returns the total amount of system memory in bytes."},freemem:{"!type":"fn() -> number","!url":"https://nodejs.org/api/os.html#os_os_freemem","!doc":"Returns the amount of free system memory in bytes."},cpus:{"!type":"fn() -> [os.cpuSpec]","!url":"https://nodejs.org/api/os.html#os_os_cpus","!doc":"Returns an array of objects containing information about each CPU/core installed: model, speed (in MHz), and times (an object containing the number of milliseconds the CPU/core spent in: user, nice, sys, idle, and irq)."},networkInterfaces:{"!type":"fn() -> ?","!url":"https://nodejs.org/api/os.html#os_os_networkinterfaces","!doc":"Get a list of network interfaces."},EOL:{"!type":"string","!url":"https://nodejs.org/api/os.html#os_os_eol","!doc":"A constant defining the appropriate End-of-line marker for the operating system."}},punycode:{"!url":"https://nodejs.org/api/punycode.html","!doc":"Punycode.js is bundled with Node.js v0.6.2+. Use require('punycode') to access it. (To use it with other Node.js versions, use npm to install the punycode module first.)",decode:{"!type":"fn(string: string) -> string","!url":"https://nodejs.org/api/punycode.html#punycode_punycode_decode_string","!doc":"Converts a Punycode string of ASCII code points to a string of Unicode code points."},encode:{"!type":"fn(string: string) -> string","!url":"https://nodejs.org/api/punycode.html#punycode_punycode_encode_string","!doc":"Converts a string of Unicode code points to a Punycode string of ASCII code points."},toUnicode:{"!type":"fn(domain: string) -> string","!url":"https://nodejs.org/api/punycode.html#punycode_punycode_tounicode_domain","!doc":"Converts a Punycode string representing a domain name to Unicode. Only the Punycoded parts of the domain name will be converted, i.e. it doesn't matter if you call it on a string that has already been converted to Unicode."},toASCII:{"!type":"fn(domain: string) -> string","!url":"https://nodejs.org/api/punycode.html#punycode_punycode_toascii_domain","!doc":"Converts a Unicode string representing a domain name to Punycode. Only the non-ASCII parts of the domain name will be converted, i.e. it doesn't matter if you call it with a domain that's already in ASCII."},ucs2:{decode:{"!type":"fn(string: string) -> string","!url":"https://nodejs.org/api/punycode.html#punycode_punycode_ucs2_decode_string","!doc":"Creates an array containing the decimal code points of each Unicode character in the string. While JavaScript uses UCS-2 internally, this function will convert a pair of surrogate halves (each of which UCS-2 exposes as separate characters) into a single code point, matching UTF-16."},encode:{"!type":"fn(codePoints: [number]) -> string","!url":"https://nodejs.org/api/punycode.html#punycode_punycode_ucs2_encode_codepoints","!doc":"Creates a string based on an array of decimal code points."}},version:{"!type":"?","!url":"https://nodejs.org/api/punycode.html#punycode_punycode_version","!doc":"A string representing the current Punycode.js version number."}},repl:{"!url":"https://nodejs.org/api/repl.html","!doc":"A Read-Eval-Print-Loop (REPL) is available both as a standalone program and easily includable in other programs. The REPL provides a way to interactively run JavaScript and see the results. It can be used for debugging, testing, or just trying things out.",start:{"!type":"fn(options: ?) -> +events.EventEmitter","!url":"https://nodejs.org/api/repl.html#repl_repl_start_options","!doc":"Returns and starts a REPLServer instance."}},readline:{"!url":"https://nodejs.org/api/readline.html","!doc":"Readline allows reading of a stream (such as process.stdin) on a line-by-line basis.",createInterface:{"!type":"fn(options: ?) -> +readline.Interface","!url":"https://nodejs.org/api/readline.html#readline_readline_createinterface_options","!doc":"Creates a readline Interface instance."},Interface:{"!type":"fn()",prototype:{"!proto":"events.EventEmitter.prototype",setPrompt:{"!type":"fn(prompt: string, length: number)","!url":"https://nodejs.org/api/readline.html#readline_rl_setprompt_prompt_length","!doc":"Sets the prompt, for example when you run node on the command line, you see > , which is node's prompt."},prompt:{"!type":"fn(preserveCursor?: bool)","!url":"https://nodejs.org/api/readline.html#readline_rl_prompt_preservecursor","!doc":"Readies readline for input from the user, putting the current setPrompt options on a new line, giving the user a new spot to write. Set preserveCursor to true to prevent the cursor placement being reset to 0."},question:{"!type":"fn(query: string, callback: fn())","!url":"https://nodejs.org/api/readline.html#readline_rl_question_query_callback","!doc":"Prepends the prompt with query and invokes callback with the user's response. Displays the query to the user, and then invokes callback with the user's response after it has been typed."},pause:{"!type":"fn()","!url":"https://nodejs.org/api/readline.html#readline_rl_pause","!doc":"Pauses the readline input stream, allowing it to be resumed later if needed."},resume:{"!type":"fn()","!url":"https://nodejs.org/api/readline.html#readline_rl_resume","!doc":"Resumes the readline input stream."},close:{"!type":"fn()","!url":"https://nodejs.org/api/readline.html#readline_rl_close","!doc":'Closes the Interface instance, relinquishing control on the input and output streams. The "close" event will also be emitted.'},write:{"!type":"fn(data: ?, key?: ?)","!url":"https://nodejs.org/api/readline.html#readline_rl_write_data_key","!doc":"Writes data to output stream. key is an object literal to represent a key sequence; available if the terminal is a TTY."}},"!url":"https://nodejs.org/api/readline.html#readline_class_interface","!doc":"The class that represents a readline interface with an input and output stream."}},vm:{"!url":"https://nodejs.org/api/vm.html","!doc":"JavaScript code can be compiled and run immediately or compiled, saved, and run later.",createContext:{"!type":"fn(initSandbox?: ?) -> ?","!url":"https://nodejs.org/api/vm.html#vm_vm_createcontext_initsandbox","!doc":"vm.createContext creates a new context which is suitable for use as the 2nd argument of a subsequent call to vm.runInContext. A (V8) context comprises a global object together with a set of build-in objects and functions. The optional argument initSandbox will be shallow-copied to seed the initial contents of the global object used by the context."},Script:{"!type":"fn()",prototype:{runInThisContext:{"!type":"fn()","!url":"https://nodejs.org/api/vm.html#vm_script_runinthiscontext","!doc":"Similar to vm.runInThisContext but a method of a precompiled Script object. script.runInThisContext runs the code of script and returns the result. Running code does not have access to local scope, but does have access to the global object (v8: in actual context)."},runInNewContext:{"!type":"fn(sandbox?: ?)","!url":"https://nodejs.org/api/vm.html#vm_script_runinnewcontext_sandbox","!doc":"Similar to vm.runInNewContext a method of a precompiled Script object. script.runInNewContext runs the code of script with sandbox as the global object and returns the result. Running code does not have access to local scope. sandbox is optional."}},"!url":"https://nodejs.org/api/vm.html#vm_class_script","!doc":"A class for running scripts. Returned by vm.createScript."},runInThisContext:{"!type":"fn(code: string, filename?: string)","!url":"https://nodejs.org/api/vm.html#vm_vm_runinthiscontext_code_filename","!doc":"vm.runInThisContext() compiles code, runs it and returns the result. Running code does not have access to local scope. filename is optional, it's used only in stack traces."},runInNewContext:{"!type":"fn(code: string, sandbox?: ?, filename?: string)","!url":"https://nodejs.org/api/vm.html#vm_vm_runinnewcontext_code_sandbox_filename","!doc":"vm.runInNewContext compiles code, then runs it in sandbox and returns the result. Running code does not have access to local scope. The object sandbox will be used as the global object for code. sandbox and filename are optional, filename is only used in stack traces."},runInContext:{"!type":"fn(code: string, context: ?, filename?: string)","!url":"https://nodejs.org/api/vm.html#vm_vm_runincontext_code_context_filename","!doc":"vm.runInContext compiles code, then runs it in context and returns the result. A (V8) context comprises a global object, together with a set of built-in objects and functions. Running code does not have access to local scope and the global object held within context will be used as the global object for code. filename is optional, it's used only in stack traces."},createScript:{"!type":"fn(code: string, filename?: string) -> +vm.Script","!url":"https://nodejs.org/api/vm.html#vm_vm_createscript_code_filename","!doc":"createScript compiles code but does not run it. Instead, it returns a vm.Script object representing this compiled code. This script can be run later many times using methods below. The returned script is not bound to any global object. It is bound before each run, just for that run. filename is optional, it's only used in stack traces."}},child_process:{"!url":"https://nodejs.org/api/child_process.html","!doc":"Node provides a tri-directional popen(3) facility through the child_process module.",ChildProcess:{"!type":"fn()",prototype:{"!proto":"events.EventEmitter.prototype",stdin:{"!type":"+stream.Writable","!url":"https://nodejs.org/api/child_process.html#child_process_child_stdin","!doc":"A Writable Stream that represents the child process's stdin. Closing this stream via end() often causes the child process to terminate."},stdout:{"!type":"+stream.Readable","!url":"https://nodejs.org/api/child_process.html#child_process_child_stdout","!doc":"A Readable Stream that represents the child process's stdout."},stderr:{"!type":"+stream.Readable","!url":"https://nodejs.org/api/child_process.html#child_process_child_stderr","!doc":"A Readable Stream that represents the child process's stderr."},pid:{"!type":"number","!url":"https://nodejs.org/api/child_process.html#child_process_child_pid","!doc":"The PID of the child process."},kill:{"!type":"fn(signal?: string)","!url":"https://nodejs.org/api/child_process.html#child_process_child_kill_signal","!doc":"Send a signal to the child process. If no argument is given, the process will be sent 'SIGTERM'."},send:{"!type":"fn(message: ?, sendHandle?: ?)","!url":"https://nodejs.org/api/child_process.html#child_process_child_send_message_sendhandle","!doc":"When using child_process.fork() you can write to the child using child.send(message, [sendHandle]) and messages are received by a 'message' event on the child."},disconnect:{"!type":"fn()","!url":"https://nodejs.org/api/child_process.html#child_process_child_disconnect","!doc":"To close the IPC connection between parent and child use the child.disconnect() method. This allows the child to exit gracefully since there is no IPC channel keeping it alive. When calling this method the disconnect event will be emitted in both parent and child, and the connected flag will be set to false. Please note that you can also call process.disconnect() in the child process."}},"!url":"https://nodejs.org/api/child_process.html#child_process_class_childprocess","!doc":"ChildProcess is an EventEmitter."},spawn:{"!type":"fn(command: string, args?: [string], options?: ?) -> +child_process.ChildProcess","!url":"https://nodejs.org/api/child_process.html#child_process_child_process_spawn_command_args_options","!doc":"Launches a new process with the given command, with command line arguments in args. If omitted, args defaults to an empty Array."},exec:{"!type":"fn(command: string, callback: fn(error: ?, stdout: +Buffer, stderr: +Buffer)) -> +child_process.ChildProcess","!url":"https://nodejs.org/api/child_process.html#child_process_child_process_exec_command_options_callback","!doc":"Runs a command in a shell and buffers the output."},execFile:{"!type":"fn(file: string, args: [string], options: ?, callback: fn(error: ?, stdout: +Buffer, stderr: +Buffer)) -> +child_process.ChildProcess","!url":"https://nodejs.org/api/child_process.html#child_process_child_process_execfile_file_args_options_callback","!doc":"This is similar to child_process.exec() except it does not execute a subshell but rather the specified file directly. This makes it slightly leaner than child_process.exec. It has the same options."},fork:{"!type":"fn(modulePath: string, args?: [string], options?: ?) -> +child_process.ChildProcess","!url":"https://nodejs.org/api/child_process.html#child_process_child_process_fork_modulepath_args_options","!doc":"This is a special case of the spawn() functionality for spawning Node processes. In addition to having all the methods in a normal ChildProcess instance, the returned object has a communication channel built-in."}},url:{"!url":"https://nodejs.org/api/url.html","!doc":"This module has utilities for URL resolution and parsing. ",parse:{"!type":"fn(urlStr: string, parseQueryString?: bool, slashesDenoteHost?: bool) -> url.type","!url":"https://nodejs.org/api/url.html#url_url_parse_urlstr_parsequerystring_slashesdenotehost","!doc":"Take a URL string, and return an object."},format:{"!type":"fn(url: url.type) -> string","!url":"https://nodejs.org/api/url.html#url_url_format_urlobj","!doc":"Take a parsed URL object, and return a formatted URL string."},resolve:{"!type":"fn(from: string, to: string) -> string","!url":"https://nodejs.org/api/url.html#url_url_resolve_from_to","!doc":"Take a base URL, and a href URL, and resolve them as a browser would for an anchor tag."}},dns:{"!url":"https://nodejs.org/api/dns.html","!doc":"This module contains functions that belong to two different categories:\n1) Functions that use the underlying operating system facilities to perform name resolution, and that do not necessarily do any network communication.\n2) Functions that connect to an actual DNS server to perform name resolution, and that always use the network to perform DNS queries.",lookup:{"!type":"fn(domain: string, callback: fn(err: +Error, address: string, family: number)) -> string","!url":"https://nodejs.org/api/dns.html#dns_dns_lookup_domain_family_callback","!doc":"Resolves a domain (e.g. 'google.com') into the first found A (IPv4) or AAAA (IPv6) record. The family can be the integer 4 or 6. Defaults to null that indicates both Ip v4 and v6 address family."},resolve:{"!type":"fn(domain: string, callback: fn(err: +Error, addresses: [string])) -> [string]","!url":"https://nodejs.org/api/dns.html#dns_dns_resolve_domain_rrtype_callback","!doc":"Resolves a domain (e.g. 'google.com') into an array of the record types specified by rrtype. Valid rrtypes are 'A' (IPV4 addresses, default), 'AAAA' (IPV6 addresses), 'MX' (mail exchange records), 'TXT' (text records), 'SRV' (SRV records), 'PTR' (used for reverse IP lookups), 'NS' (name server records) and 'CNAME' (canonical name records)."},resolve4:{"!type":"fn(domain: string, callback: fn(err: +Error, addresses: [string])) -> [string]","!url":"https://nodejs.org/api/dns.html#dns_dns_resolve4_domain_callback","!doc":"The same as dns.resolve(), but only for IPv4 queries (A records). addresses is an array of IPv4 addresses (e.g. ['74.125.79.104', '74.125.79.105', '74.125.79.106'])."},resolve6:{"!type":"fn(domain: string, callback: fn(err: +Error, addresses: [string])) -> [string]","!url":"https://nodejs.org/api/dns.html#dns_dns_resolve6_domain_callback","!doc":"The same as dns.resolve4() except for IPv6 queries (an AAAA query)."},resolveMx:{"!type":"fn(domain: string, callback: fn(err: +Error, addresses: [string])) -> [string]","!url":"https://nodejs.org/api/dns.html#dns_dns_resolvemx_domain_callback","!doc":"The same as dns.resolve(), but only for mail exchange queries (MX records)."},resolveTxt:{"!type":"fn(domain: string, callback: fn(err: +Error, addresses: [string])) -> [string]","!url":"https://nodejs.org/api/dns.html#dns_dns_resolvetxt_domain_callback","!doc":"The same as dns.resolve(), but only for text queries (TXT records). addresses is an array of the text records available for domain (e.g., ['v=spf1 ip4:0.0.0.0 ~all'])."},resolveSrv:{"!type":"fn(domain: string, callback: fn(err: +Error, addresses: [string])) -> [string]","!url":"https://nodejs.org/api/dns.html#dns_dns_resolvesrv_domain_callback","!doc":"The same as dns.resolve(), but only for service records (SRV records). addresses is an array of the SRV records available for domain. Properties of SRV records are priority, weight, port, and name (e.g., [{'priority': 10, {'weight': 5, 'port': 21223, 'name': 'service.example.com'}, ...])."},resolveNs:{"!type":"fn(domain: string, callback: fn(err: +Error, addresses: [string])) -> [string]","!url":"https://nodejs.org/api/dns.html#dns_dns_resolvens_domain_callback","!doc":"The same as dns.resolve(), but only for name server records (NS records). addresses is an array of the name server records available for domain (e.g., ['ns1.example.com', 'ns2.example.com'])."},resolveCname:{"!type":"fn(domain: string, callback: fn(err: +Error, addresses: [string])) -> [string]","!url":"https://nodejs.org/api/dns.html#dns_dns_resolvecname_domain_callback","!doc":"The same as dns.resolve(), but only for canonical name records (CNAME records). addresses is an array of the canonical name records available for domain (e.g., ['bar.example.com'])."},reverse:{"!type":"fn(ip: string, callback: fn(err: +Error, domains: [string])) -> [string]","!url":"https://nodejs.org/api/dns.html#dns_dns_reverse_ip_callback","!doc":"Reverse resolves an ip address to an array of domain names."}},net:{"!url":"https://nodejs.org/api/net.html","!doc":"The net module provides you with an asynchronous network wrapper. It contains methods for creating both servers and clients (called streams).",createServer:{"!type":"fn(options?: ?, connectionListener?: fn(socket: +net.Socket)) -> +net.Server","!url":"https://nodejs.org/api/net.html#net_net_createserver_options_connectionlistener","!doc":"Creates a new TCP server. The connectionListener argument is automatically set as a listener for the 'connection' event."},Server:{"!type":"fn()",prototype:{"!proto":"net.Socket.prototype",listen:{"!type":"fn(port: number, hostname?: string, backlog?: number, callback?: fn())","!url":"https://nodejs.org/api/net.html#net_server_listen_port_host_backlog_callback","!doc":"Begin accepting connections on the specified port and host. If the host is omitted, the server will accept connections directed to any IPv4 address (INADDR_ANY). A port value of zero will assign a random port."},close:{"!type":"fn(callback?: fn())","!url":"https://nodejs.org/api/net.html#net_server_close_callback","!doc":"Stops the server from accepting new connections and keeps existing connections. This function is asynchronous, the server is finally closed when all connections are ended and the server emits a 'close' event. Optionally, you can pass a callback to listen for the 'close' event."},maxConnections:{"!type":"number","!url":"https://nodejs.org/api/net.html#net_server_maxconnections","!doc":"Set this property to reject connections when the server's connection count gets high."},getConnections:{"!type":"fn(callback: fn(err: +Error, count: number))","!url":"https://nodejs.org/api/net.html#net_server_getconnections_callback","!doc":"Asynchronously get the number of concurrent connections on the server. Works when sockets were sent to forks."}},"!url":"https://nodejs.org/api/net.html#net_class_net_server","!doc":"This class is used to create a TCP or UNIX server. A server is a net.Socket that can listen for new incoming connections."},Socket:{"!type":"fn(options: ?)",prototype:{"!proto":"events.EventEmitter.prototype",connect:{"!type":"fn(port: number, host?: string, connectionListener?: fn())","!url":"https://nodejs.org/api/net.html#net_socket_connect_port_host_connectlistener","!doc":"Opens the connection for a given socket. If port and host are given, then the socket will be opened as a TCP socket, if host is omitted, localhost will be assumed. If a path is given, the socket will be opened as a unix socket to that path."},bufferSize:{"!type":"number","!url":"https://nodejs.org/api/net.html#net_socket_buffersize","!doc":"net.Socket has the property that socket.write() always works. This is to help users get up and running quickly. The computer cannot always keep up with the amount of data that is written to a socket - the network connection simply might be too slow. Node will internally queue up the data written to a socket and send it out over the wire when it is possible. (Internally it is polling on the socket's file descriptor for being writable)."},setEncoding:{"!type":"fn(encoding?: string)","!url":"https://nodejs.org/api/net.html#net_socket_setencoding_encoding","!doc":"Set the encoding for the socket as a Readable Stream."},write:{"!type":"fn(data: +Buffer, encoding?: string, callback?: fn())","!url":"https://nodejs.org/api/net.html#net_socket_write_data_encoding_callback","!doc":"Sends data on the socket. The second parameter specifies the encoding in the case of a string--it defaults to UTF8 encoding."},end:{"!type":"fn(data?: +Buffer, encoding?: string)","!url":"https://nodejs.org/api/net.html#net_socket_end_data_encoding","!doc":"Half-closes the socket. i.e., it sends a FIN packet. It is possible the server will still send some data."},destroy:{"!type":"fn()","!url":"https://nodejs.org/api/net.html#net_socket_destroy","!doc":"Ensures that no more I/O activity happens on this socket. Only necessary in case of errors (parse error or so)."},pause:{"!type":"fn()","!url":"https://nodejs.org/api/net.html#net_socket_pause","!doc":"Pauses the reading of data. That is, 'data' events will not be emitted. Useful to throttle back an upload."},resume:{"!type":"fn()","!url":"https://nodejs.org/api/net.html#net_socket_resume","!doc":"Resumes reading after a call to pause()."},setTimeout:{"!type":"fn(timeout: number, callback?: fn())","!url":"https://nodejs.org/api/net.html#net_socket_settimeout_timeout_callback","!doc":"Sets the socket to timeout after timeout milliseconds of inactivity on the socket. By default net.Socket do not have a timeout."},setKeepAlive:{"!type":"fn(enable?: bool, initialDelay?: number)","!url":"https://nodejs.org/api/net.html#net_socket_setkeepalive_enable_initialdelay","!doc":"Enable/disable keep-alive functionality, and optionally set the initial delay before the first keepalive probe is sent on an idle socket. enable defaults to false."},address:{"!type":"fn() -> net.address","!url":"https://nodejs.org/api/net.html#net_socket_address","!doc":"Returns the bound address, the address family name and port of the socket as reported by the operating system. Returns an object with three properties, e.g. { port: 12346, family: 'IPv4', address: '127.0.0.1' }"},unref:{"!type":"fn()","!url":"https://nodejs.org/api/net.html#net_socket_unref","!doc":"Calling unref on a socket will allow the program to exit if this is the only active socket in the event system. If the socket is already unrefd calling unref again will have no effect."},ref:{"!type":"fn()","!url":"https://nodejs.org/api/net.html#net_socket_ref","!doc":"Opposite of unref, calling ref on a previously unrefd socket will not let the program exit if it's the only socket left (the default behavior). If the socket is refd calling ref again will have no effect."},remoteAddress:{"!type":"string","!url":"https://nodejs.org/api/net.html#net_socket_remoteaddress","!doc":"The string representation of the remote IP address. For example, '74.125.127.100' or '2001:4860:a005::68'."},remotePort:{"!type":"number","!url":"https://nodejs.org/api/net.html#net_socket_remoteport","!doc":"The numeric representation of the remote port. For example, 80 or 21."},localPort:{"!type":"number","!url":"https://nodejs.org/api/net.html#net_socket_localport","!doc":"The numeric representation of the local port. For example, 80 or 21."},bytesRead:{"!type":"number","!url":"https://nodejs.org/api/net.html#net_socket_bytesread","!doc":"The amount of received bytes."},bytesWritten:{"!type":"number","!url":"https://nodejs.org/api/net.html#net_socket_byteswritten","!doc":"The amount of bytes sent."},setNoDelay:{"!type":"fn(noDelay?: fn())","!url":"https://nodejs.org/api/net.html#net_socket_setnodelay_nodelay","!doc":"Disables the Nagle algorithm. By default TCP connections use the Nagle algorithm, they buffer data before sending it off. Setting true for noDelay will immediately fire off data each time socket.write() is called. noDelay defaults to true."},localAddress:{"!type":"string","!url":"https://nodejs.org/api/net.html#net_socket_localaddress","!doc":"The string representation of the local IP address the remote client is connecting on. For example, if you are listening on '0.0.0.0' and the client connects on '192.168.1.1', the value would be '192.168.1.1'."}},"!url":"https://nodejs.org/api/net.html#net_class_net_socket","!doc":"This object is an abstraction of a TCP or UNIX socket. net.Socket instances implement a duplex Stream interface. They can be created by the user and used as a client (with connect()) or they can be created by Node and passed to the user through the 'connection' event of a server."},connect:{"!type":"fn(options: ?, connectionListener?: fn()) -> +net.Socket","!url":"https://nodejs.org/api/net.html#net_net_connect_options_connectionlistener","!doc":"Constructs a new socket object and opens the socket to the given location. When the socket is established, the 'connect' event will be emitted."},createConnection:{"!type":"fn(options: ?, connectionListener?: fn()) -> +net.Socket","!url":"https://nodejs.org/api/net.html#net_net_createconnection_options_connectionlistener","!doc":"Constructs a new socket object and opens the socket to the given location. When the socket is established, the 'connect' event will be emitted."},isIP:{"!type":"fn(input: string) -> number","!url":"https://nodejs.org/api/net.html#net_net_isip_input","!doc":"Tests if input is an IP address. Returns 0 for invalid strings, returns 4 for IP version 4 addresses, and returns 6 for IP version 6 addresses."},isIPv4:{"!type":"fn(input: string) -> bool","!url":"https://nodejs.org/api/net.html#net_net_isipv4_input","!doc":"Returns true if input is a version 4 IP address, otherwise returns false."},isIPv6:{"!type":"fn(input: string) -> bool","!url":"https://nodejs.org/api/net.html#net_net_isipv6_input","!doc":"Returns true if input is a version 6 IP address, otherwise returns false."}},dgram:{"!url":"https://nodejs.org/api/dgram.html","!doc":"UDP / Datagram Sockets",createSocket:{"!type":"fn(type: string, callback?: fn()) -> +dgram.Socket","!url":"https://nodejs.org/api/dgram.html#dgram_dgram_createsocket_type_callback","!doc":"Creates a datagram Socket of the specified types. Valid types are udp4 and udp6."},Socket:{"!type":"fn()",prototype:{"!proto":"events.EventEmitter.prototype",send:{"!type":"fn(buf: +Buffer, offset: number, length: number, port: number, address: string, callback?: fn())","!url":"https://nodejs.org/api/dgram.html#dgram_socket_send_buf_offset_length_port_address_callback","!doc":"For UDP sockets, the destination port and IP address must be specified. A string may be supplied for the address parameter, and it will be resolved with DNS. An optional callback may be specified to detect any DNS errors and when buf may be re-used. Note that DNS lookups will delay the time that a send takes place, at least until the next tick. The only way to know for sure that a send has taken place is to use the callback."},bind:{"!type":"fn(port: number, address?: string)","!url":"https://nodejs.org/api/dgram.html#dgram_socket_bind_port_address_callback","!doc":"For UDP sockets, listen for datagrams on a named port and optional address. If address is not specified, the OS will try to listen on all addresses."},close:{"!type":"fn()","!url":"https://nodejs.org/api/dgram.html#dgram_socket_close","!doc":"Close the underlying socket and stop listening for data on it."},address:{address:"string",family:"string",port:"number","!url":"https://nodejs.org/api/dgram.html#dgram_socket_address","!doc":"Returns an object containing the address information for a socket. For UDP sockets, this object will contain address , family and port."},setBroadcast:{"!type":"fn(flag: bool)","!url":"https://nodejs.org/api/dgram.html#dgram_socket_setbroadcast_flag","!doc":"Sets or clears the SO_BROADCAST socket option. When this option is set, UDP packets may be sent to a local interface's broadcast address."},setTTL:{"!type":"fn(ttl: number)","!url":"https://nodejs.org/api/dgram.html#dgram_socket_setttl_ttl","!doc":'Sets the IP_TTL socket option. TTL stands for "Time to Live," but in this context it specifies the number of IP hops that a packet is allowed to go through. Each router or gateway that forwards a packet decrements the TTL. If the TTL is decremented to 0 by a router, it will not be forwarded. Changing TTL values is typically done for network probes or when multicasting.'},setMulticastTTL:{"!type":"fn(ttl: number)","!url":"https://nodejs.org/api/dgram.html#dgram_socket_setmulticastttl_ttl","!doc":'Sets the IP_MULTICAST_TTL socket option. TTL stands for "Time to Live," but in this context it specifies the number of IP hops that a packet is allowed to go through, specifically for multicast traffic. Each router or gateway that forwards a packet decrements the TTL. If the TTL is decremented to 0 by a router, it will not be forwarded.'},setMulticastLoopback:{"!type":"fn(flag: bool)","!url":"https://nodejs.org/api/dgram.html#dgram_socket_setmulticastloopback_flag","!doc":"Sets or clears the IP_MULTICAST_LOOP socket option. When this option is set, multicast packets will also be received on the local interface."},addMembership:{"!type":"fn(multicastAddress: string, multicastInterface?: string)","!url":"https://nodejs.org/api/dgram.html#dgram_socket_addmembership_multicastaddress_multicastinterface","!doc":"Tells the kernel to join a multicast group with IP_ADD_MEMBERSHIP socket option."},dropMembership:{"!type":"fn(multicastAddress: string, multicastInterface?: string)","!url":"https://nodejs.org/api/dgram.html#dgram_socket_dropmembership_multicastaddress_multicastinterface","!doc":"Opposite of addMembership - tells the kernel to leave a multicast group with IP_DROP_MEMBERSHIP socket option. This is automatically called by the kernel when the socket is closed or process terminates, so most apps will never need to call this."}},"!url":"https://nodejs.org/api/dgram.html#dgram_class_dgram_socket","!doc":"The dgram Socket class encapsulates the datagram functionality. It should be created via dgram.createSocket(type, [callback])."}},fs:{"!url":"https://nodejs.org/api/fs.html","!doc":"File I/O is provided by simple wrappers around standard POSIX functions. To use this module do require('fs').\nAll the methods have asynchronous and synchronous forms.",rename:{"!type":"fn(oldPath: string, newPath: string, callback?: fn())","!url":"https://nodejs.org/api/fs.html#fs_fs_rename_oldpath_newpath_callback","!doc":"Asynchronous rename(2). No arguments other than a possible exception are given to the completion callback."},renameSync:{"!type":"fn(oldPath: string, newPath: string)","!url":"https://nodejs.org/api/fs.html#fs_fs_renamesync_oldpath_newpath","!doc":"Synchronous rename(2)."},ftruncate:{"!type":"fn(fd: number, len: number, callback?: fn())","!url":"https://nodejs.org/api/fs.html#fs_fs_ftruncate_fd_len_callback","!doc":"Asynchronous ftruncate(2). No arguments other than a possible exception are given to the completion callback."},ftruncateSync:{"!type":"fn(fd: number, len: number)","!url":"https://nodejs.org/api/fs.html#fs_fs_ftruncatesync_fd_len","!doc":"Synchronous ftruncate(2)."},truncate:{"!type":"fn(path: string, len: number, callback?: fn())","!url":"https://nodejs.org/api/fs.html#fs_fs_truncate_path_len_callback","!doc":"Asynchronous truncate(2). No arguments other than a possible exception are given to the completion callback."},truncateSync:{"!type":"fn(path: string, len: number)","!url":"https://nodejs.org/api/fs.html#fs_fs_truncatesync_path_len","!doc":"Synchronous truncate(2)."},chown:{"!type":"fn(path: string, uid: number, gid: number, callback?: fn())","!url":"https://nodejs.org/api/fs.html#fs_fs_chown_path_uid_gid_callback","!doc":"Asynchronous chown(2). No arguments other than a possible exception are given to the completion callback."},chownSync:{"!type":"fn(path: string, uid: number, gid: number)","!url":"https://nodejs.org/api/fs.html#fs_fs_chownsync_path_uid_gid","!doc":"Synchronous chown(2)."},fchown:{"!type":"fn(fd: number, uid: number, gid: number, callback?: fn())","!url":"https://nodejs.org/api/fs.html#fs_fs_fchown_fd_uid_gid_callback","!doc":"Asynchronous fchown(2). No arguments other than a possible exception are given to the completion callback."},fchownSync:{"!type":"fn(fd: number, uid: number, gid: number)","!url":"https://nodejs.org/api/fs.html#fs_fs_fchownsync_fd_uid_gid","!doc":"Synchronous fchown(2)."},lchown:{"!type":"fn(path: string, uid: number, gid: number, callback?: fn())","!url":"https://nodejs.org/api/fs.html#fs_fs_lchown_path_uid_gid_callback","!doc":"Asynchronous lchown(2). No arguments other than a possible exception are given to the completion callback."},lchownSync:{"!type":"fn(path: string, uid: number, gid: number)","!url":"https://nodejs.org/api/fs.html#fs_fs_lchownsync_path_uid_gid","!doc":"Synchronous lchown(2)."},chmod:{"!type":"fn(path: string, mode: string, callback?: fn())","!url":"https://nodejs.org/api/fs.html#fs_fs_chmod_path_mode_callback","!doc":"Asynchronous chmod(2). No arguments other than a possible exception are given to the completion callback."},chmodSync:{"!type":"fn(path: string, mode: string)","!url":"https://nodejs.org/api/fs.html#fs_fs_chmodsync_path_mode","!doc":"Synchronous chmod(2)."},fchmod:{"!type":"fn(fd: number, mode: string, callback?: fn())","!url":"https://nodejs.org/api/fs.html#fs_fs_fchmod_fd_mode_callback","!doc":"Asynchronous fchmod(2). No arguments other than a possible exception are given to the completion callback."},fchmodSync:{"!type":"fn(fd: number, mode: string)","!url":"https://nodejs.org/api/fs.html#fs_fs_fchmodsync_fd_mode","!doc":"Synchronous fchmod(2)."},lchmod:{"!type":"fn(path: string, mode: number, callback?: fn())","!url":"https://nodejs.org/api/fs.html#fs_fs_lchmod_path_mode_callback","!doc":"Asynchronous lchmod(2). No arguments other than a possible exception are given to the completion callback."},lchmodSync:{"!type":"fn(path: string, mode: string)","!url":"https://nodejs.org/api/fs.html#fs_fs_lchmodsync_path_mode","!doc":"Synchronous lchmod(2)."},stat:{"!type":"fn(path: string, callback?: fn(err: +Error, stats: +fs.Stats) -> ?) -> +fs.Stats","!url":"https://nodejs.org/api/fs.html#fs_fs_stat_path_callback","!doc":"Asynchronous stat(2). The callback gets two arguments (err, stats) where stats is a fs.Stats object."},lstat:{"!type":"fn(path: string, callback?: fn(err: +Error, stats: +fs.Stats) -> ?) -> +fs.Stats","!url":"https://nodejs.org/api/fs.html#fs_fs_lstat_path_callback","!doc":"Asynchronous lstat(2). The callback gets two arguments (err, stats) where stats is a fs.Stats object. lstat() is identical to stat(), except that if path is a symbolic link, then the link itself is stat-ed, not the file that it refers to."},fstat:{"!type":"fn(fd: number, callback?: fn(err: +Error, stats: +fs.Stats) -> ?) -> +fs.Stats","!url":"https://nodejs.org/api/fs.html#fs_fs_fstat_fd_callback","!doc":"Asynchronous fstat(2). The callback gets two arguments (err, stats) where stats is a fs.Stats object. fstat() is identical to stat(), except that the file to be stat-ed is specified by the file descriptor fd."},statSync:{"!type":"fn(path: string) -> +fs.Stats","!url":"https://nodejs.org/api/fs.html#fs_fs_statsync_path","!doc":"Synchronous stat(2). Returns an instance of fs.Stats."},lstatSync:{"!type":"fn(path: string) -> +fs.Stats","!url":"https://nodejs.org/api/fs.html#fs_fs_lstatsync_path","!doc":"Synchronous lstat(2). Returns an instance of fs.Stats."},fstatSync:{"!type":"fn(fd: number) -> +fs.Stats","!url":"https://nodejs.org/api/fs.html#fs_fs_fstatsync_fd","!doc":"Synchronous fstat(2). Returns an instance of fs.Stats."},link:{"!type":"fn(srcpath: string, dstpath: string, callback?: fn())","!url":"https://nodejs.org/api/fs.html#fs_fs_link_srcpath_dstpath_callback","!doc":"Asynchronous link(2). No arguments other than a possible exception are given to the completion callback."},linkSync:{"!type":"fn(srcpath: string, dstpath: string)","!url":"https://nodejs.org/api/fs.html#fs_fs_linksync_srcpath_dstpath","!doc":"Synchronous link(2)."},symlink:{"!type":"fn(srcpath: string, dstpath: string, type?: string, callback?: fn())","!url":"https://nodejs.org/api/fs.html#fs_fs_symlink_srcpath_dstpath_type_callback","!doc":"Asynchronous symlink(2). No arguments other than a possible exception are given to the completion callback. type argument can be either 'dir', 'file', or 'junction' (default is 'file'). It is only used on Windows (ignored on other platforms). Note that Windows junction points require the destination path to be absolute. When using 'junction', the destination argument will automatically be normalized to absolute path."},symlinkSync:{"!type":"fn(srcpath: string, dstpath: string, type?: string)","!url":"https://nodejs.org/api/fs.html#fs_fs_symlinksync_srcpath_dstpath_type","!doc":"Synchronous symlink(2)."},readlink:{"!type":"fn(path: string, callback?: fn(err: +Error, linkString: string))","!url":"https://nodejs.org/api/fs.html#fs_fs_readlink_path_callback","!doc":"Asynchronous readlink(2). The callback gets two arguments (err, linkString)."},readlinkSync:{"!type":"fn(path: string)","!url":"https://nodejs.org/api/fs.html#fs_fs_readlinksync_path","!doc":"Synchronous readlink(2). Returns the symbolic link's string value."},realpath:{"!type":"fn(path: string, cache: bool, callback: fn(err: +Error, resolvedPath: string))","!url":"https://nodejs.org/api/fs.html#fs_fs_realpath_path_cache_callback","!doc":"Asynchronous realpath(2). The callback gets two arguments (err, resolvedPath). May use process.cwd to resolve relative paths. cache is an object literal of mapped paths that can be used to force a specific path resolution or avoid additional fs.stat calls for known real paths."},realpathSync:{"!type":"fn(path: string, cache?: bool) -> string","!url":"https://nodejs.org/api/fs.html#fs_fs_realpathsync_path_cache","!doc":"Synchronous realpath(2). Returns the resolved path."},unlink:{"!type":"fn(path: string, callback?: fn())","!url":"https://nodejs.org/api/fs.html#fs_fs_unlink_path_callback","!doc":"Asynchronous unlink(2). No arguments other than a possible exception are given to the completion callback."},unlinkSync:{"!type":"fn(path: string)","!url":"https://nodejs.org/api/fs.html#fs_fs_unlinksync_path","!doc":"Synchronous unlink(2)."},rmdir:{"!type":"fn(path: string, callback?: fn())","!url":"https://nodejs.org/api/fs.html#fs_fs_rmdir_path_callback","!doc":"Asynchronous rmdir(2). No arguments other than a possible exception are given to the completion callback."},rmdirSync:{"!type":"fn(path: string)","!url":"https://nodejs.org/api/fs.html#fs_fs_rmdirsync_path","!doc":"Synchronous rmdir(2)."},mkdir:{"!type":"fn(path: string, mode?: ?, callback?: fn())","!url":"https://nodejs.org/api/fs.html#fs_fs_mkdir_path_mode_callback","!doc":"Asynchronous mkdir(2). No arguments other than a possible exception are given to the completion callback. mode defaults to 0777."},mkdirSync:{"!type":"fn(path: string, mode?: string)","!url":"https://nodejs.org/api/fs.html#fs_fs_mkdirsync_path_mode","!doc":"Synchronous mkdir(2)."},readdir:{"!type":"fn(path: string, callback?: fn(err: +Error, files: [string]))","!url":"https://nodejs.org/api/fs.html#fs_fs_readdir_path_callback","!doc":"Asynchronous readdir(3). Reads the contents of a directory. The callback gets two arguments (err, files) where files is an array of the names of the files in the directory excluding '.' and '..'."},readdirSync:{"!type":"fn(path: string) -> [string]","!url":"https://nodejs.org/api/fs.html#fs_fs_readdirsync_path","!doc":"Synchronous readdir(3). Returns an array of filenames excluding '.' and '..'."},close:{"!type":"fn(fd: number, callback?: fn())","!url":"https://nodejs.org/api/fs.html#fs_fs_close_fd_callback","!doc":"Asynchronous close(2). No arguments other than a possible exception are given to the completion callback."},closeSync:{"!type":"fn(fd: number)","!url":"https://nodejs.org/api/fs.html#fs_fs_closesync_fd","!doc":"Synchronous close(2)."},open:{"!type":"fn(path: string, flags: string, mode?: string, callback?: fn(err: +Error, fd: number))","!url":"https://nodejs.org/api/fs.html#fs_fs_open_path_flags_mode_callback","!doc":"Asynchronous file open."},openSync:{"!type":"fn(path: string, flags: string, mode?: string) -> number","!url":"https://nodejs.org/api/fs.html#fs_fs_opensync_path_flags_mode","!doc":"Synchronous open(2)."},utimes:{"!type":"fn(path: string, atime: number, mtime: number, callback?: fn())","!url":"https://nodejs.org/api/fs.html#fs_fs_utimes_path_atime_mtime_callback","!doc":"Change file timestamps of the file referenced by the supplied path."},utimesSync:{"!type":"fn(path: string, atime: number, mtime: number)","!url":"https://nodejs.org/api/fs.html#fs_fs_utimessync_path_atime_mtime","!doc":"Change file timestamps of the file referenced by the supplied path."},futimes:{"!type":"fn(fd: number, atime: number, mtime: number, callback?: fn())","!url":"https://nodejs.org/api/fs.html#fs_fs_futimes_fd_atime_mtime_callback","!doc":"Change the file timestamps of a file referenced by the supplied file descriptor."},futimesSync:{"!type":"fn(fd: number, atime: number, mtime: number)","!url":"https://nodejs.org/api/fs.html#fs_fs_futimessync_fd_atime_mtime","!doc":"Change the file timestamps of a file referenced by the supplied file descriptor."},fsync:{"!type":"fn(fd: number, callback?: fn())","!url":"https://nodejs.org/api/fs.html#fs_fs_fsync_fd_callback","!doc":"Asynchronous fsync(2). No arguments other than a possible exception are given to the completion callback."},fsyncSync:{"!type":"fn(fd: number)","!url":"https://nodejs.org/api/fs.html#fs_fs_fsyncsync_fd","!doc":"Synchronous fsync(2)."},write:{"!type":"fn(fd: number, buffer: +Buffer, offset: number, length: number, position: number, callback?: fn(err: +Error, written: number, buffer: +Buffer))","!url":"https://nodejs.org/api/fs.html#fs_fs_write_fd_buffer_offset_length_position_callback","!doc":"Write buffer to the file specified by fd."},writeSync:{"!type":"fn(fd: number, buffer: +Buffer, offset: number, length: number, position: number) -> number","!url":"https://nodejs.org/api/fs.html#fs_fs_writesync_fd_buffer_offset_length_position","!doc":"Synchronous version of fs.write(). Returns the number of bytes written."},read:{"!type":"fn(fd: number, buffer: +Buffer, offset: number, length: number, position: number, callback?: fn(err: +Error, bytesRead: number, buffer: +Buffer))","!url":"https://nodejs.org/api/fs.html#fs_fs_read_fd_buffer_offset_length_position_callback","!doc":"Read data from the file specified by fd."},readSync:{"!type":"fn(fd: number, buffer: +Buffer, offset: number, length: number, position: number) -> number","!url":"https://nodejs.org/api/fs.html#fs_fs_readsync_fd_buffer_offset_length_position","!doc":"Synchronous version of fs.read. Returns the number of bytesRead."},readFile:{"!type":"fn(filename: string, callback: fn(err: +Error, data: +Buffer))","!url":"https://nodejs.org/api/fs.html#fs_fs_readfile_filename_options_callback","!doc":"Asynchronously reads the entire contents of a file."},readFileSync:{"!type":"fn(filename: string, encoding: string) -> +Buffer","!url":"https://nodejs.org/api/fs.html#fs_fs_readfilesync_filename_options","!doc":"Synchronous version of fs.readFile. Returns the contents of the filename."},writeFile:{"!type":"fn(filename: string, data: string|+Buffer, encoding?: string, callback?: fn())","!url":"https://nodejs.org/api/fs.html#fs_fs_writefile_filename_data_options_callback","!doc":"Asynchronously writes data to a file, replacing the file if it already exists. data can be a string or a buffer."},writeFileSync:{"!type":"fn(filename: string, data: string|+Buffer, encoding?: string)","!url":"https://nodejs.org/api/fs.html#fs_fs_writefilesync_filename_data_options","!doc":"The synchronous version of fs.writeFile."},appendFile:{"!type":"fn(filename: string, data: string|+Buffer, encoding?: string, callback?: fn())","!url":"https://nodejs.org/api/fs.html#fs_fs_appendfile_filename_data_options_callback","!doc":"Asynchronously append data to a file, creating the file if it not yet exists. data can be a string or a buffer."},appendFileSync:{"!type":"fn(filename: string, data: string|+Buffer, encoding?: string)","!url":"https://nodejs.org/api/fs.html#fs_fs_appendfilesync_filename_data_options","!doc":"The synchronous version of fs.appendFile."},watchFile:{"!type":"fn(filename: string, options: ?, listener: fn(current: +fs.Stats, prev: +fs.Stats))","!url":"https://nodejs.org/api/fs.html#fs_fs_watchfile_filename_options_listener","!doc":"Watch for changes on filename. The callback listener will be called each time the file is accessed."},unwatchFile:{"!type":"fn(filename: string, listener?: fn())","!url":"https://nodejs.org/api/fs.html#fs_fs_unwatchfile_filename_listener","!doc":"Stop watching for changes on filename. If listener is specified, only that particular listener is removed. Otherwise, all listeners are removed and you have effectively stopped watching filename."},watch:{"!type":"fn(filename: string, options?: ?, listener?: fn(event: string, filename: string)) -> +fs.FSWatcher","!url":"https://nodejs.org/api/fs.html#fs_fs_watch_filename_options_listener","!doc":"Watch for changes on filename, where filename is either a file or a directory. The returned object is a fs.FSWatcher."},exists:{"!type":"fn(path: string, callback?: fn(exists: bool))","!url":"https://nodejs.org/api/fs.html#fs_fs_exists_path_callback","!doc":"Test whether or not the given path exists by checking with the file system. Then call the callback argument with either true or false."},existsSync:{"!type":"fn(path: string) -> bool","!url":"https://nodejs.org/api/fs.html#fs_fs_existssync_path","!doc":"Synchronous version of fs.exists."},Stats:{"!type":"fn()",prototype:{isFile:"fn() -> bool",isDirectory:"fn() -> bool",isBlockDevice:"fn() -> bool",isCharacterDevice:"fn() -> bool",isSymbolicLink:"fn() -> bool",isFIFO:"fn() -> bool",isSocket:"fn() -> bool",dev:"number",ino:"number",mode:"number",nlink:"number",uid:"number",gid:"number",rdev:"number",size:"number",blksize:"number",blocks:"number",atime:"+Date",mtime:"+Date",ctime:"+Date"},"!url":"https://nodejs.org/api/fs.html#fs_class_fs_stats","!doc":"Objects returned from fs.stat(), fs.lstat() and fs.fstat() and their synchronous counterparts are of this type."},createReadStream:{"!type":"fn(path: string, options?: ?) -> +stream.Readable","!url":"https://nodejs.org/api/fs.html#fs_fs_createreadstream_path_options","!doc":"Returns a new ReadStream object."},createWriteStream:{"!type":"fn(path: string, options?: ?) -> +stream.Writable","!url":"https://nodejs.org/api/fs.html#fs_fs_createwritestream_path_options","!doc":"Returns a new WriteStream object."},FSWatcher:{"!type":"fn()",prototype:{close:"fn()"},"!url":"https://nodejs.org/api/fs.html#fs_class_fs_fswatcher","!doc":"Objects returned from fs.watch() are of this type."}},path:{"!url":"https://nodejs.org/api/path.html","!doc":"This module contains utilities for handling and transforming file paths. Almost all these methods perform only string transformations. The file system is not consulted to check whether paths are valid.",normalize:{"!type":"fn(p: string) -> string","!url":"https://nodejs.org/api/path.html#path_path_normalize_p","!doc":"Normalize a string path, taking care of '..' and '.' parts."},join:{"!type":"fn() -> string","!url":"https://nodejs.org/api/path.html#path_path_join_path1_path2","!doc":"Join all arguments together and normalize the resulting path."},resolve:{"!type":"fn(from: string, from2: string, from3: string, from4: string, from5: string, to: string) -> string","!url":"https://nodejs.org/api/path.html#path_path_resolve_from_to","!doc":"Resolves to to an absolute path."},relative:{"!type":"fn(from: string, to: string) -> string","!url":"https://nodejs.org/api/path.html#path_path_relative_from_to","!doc":"Solve the relative path from from to to."},dirname:{"!type":"fn(p: string) -> string","!url":"https://nodejs.org/api/path.html#path_path_dirname_p","!doc":"Return the directory name of a path. Similar to the Unix dirname command."},basename:{"!type":"fn(p: string, ext?: string) -> string","!url":"https://nodejs.org/api/path.html#path_path_basename_p_ext","!doc":"Return the last portion of a path. Similar to the Unix basename command."},extname:{"!type":"fn(p: string) -> string","!url":"https://nodejs.org/api/path.html#path_path_extname_p","!doc":"Return the extension of the path, from the last '.' to end of string in the last portion of the path. If there is no '.' in the last portion of the path or the first character of it is '.', then it returns an empty string."},sep:{"!type":"string","!url":"https://nodejs.org/api/path.html#path_path_sep","!doc":"The platform-specific file separator. '\\\\' or '/'."},delimiter:{"!type":"string","!url":"https://nodejs.org/api/path.html#path_path_delimiter","!doc":"The platform-specific path delimiter, ; or ':'."}},string_decoder:{"!url":"https://nodejs.org/api/string_decoder.html","!doc":"StringDecoder decodes a buffer to a string. It is a simple interface to buffer.toString() but provides additional support for utf8.",StringDecoder:{"!type":"fn(encoding?: string)",prototype:{write:{"!type":"fn(buffer: +Buffer) -> string","!url":"https://nodejs.org/api/string_decoder.html#string_decoder_decoder_write_buffer","!doc":"Returns a decoded string."},end:{"!type":"fn()","!url":"https://nodejs.org/api/string_decoder.html#string_decoder_decoder_end","!doc":"Returns any trailing bytes that were left in the buffer."}},"!url":"https://nodejs.org/api/string_decoder.html#string_decoder_class_stringdecoder","!doc":"Accepts a single argument, encoding which defaults to utf8."}},tls:{"!url":"https://nodejs.org/api/tls.html","!doc":"The tls module uses OpenSSL to provide Transport Layer Security and/or Secure Socket Layer: encrypted stream communication.",CLIENT_RENEG_LIMIT:"number",CLIENT_RENEG_WINDOW:"number",SLAB_BUFFER_SIZE:"number",getCiphers:{"!type":"fn() -> [string]","!url":"https://nodejs.org/api/tls.html#tls_tls_getciphers","!doc":"Returns an array with the names of the supported SSL ciphers."},Server:{"!type":"fn()",prototype:{"!proto":"net.Server.prototype",listen:{"!type":"fn(port: number, host?: string, callback?: fn())","!url":"https://nodejs.org/api/tls.html#tls_server_listen_port_host_callback","!doc":"Begin accepting connections on the specified port and host. If the host is omitted, the server will accept connections directed to any IPv4 address (INADDR_ANY)."},close:{"!type":"fn()","!url":"https://nodejs.org/api/tls.html#tls_server_close","!doc":"Stops the server from accepting new connections. This function is asynchronous, the server is finally closed when the server emits a 'close' event."},addContext:{"!type":"fn(hostName: string, credentials: tls.Server.credentials)","!url":"https://nodejs.org/api/tls.html#tls_server_addcontext_hostname_credentials","!doc":"Add secure context that will be used if client request's SNI hostname is matching passed hostname (wildcards can be used). credentials can contain key, cert and ca."}},"!url":"https://nodejs.org/api/tls.html#tls_class_tls_server","!doc":"This class is a subclass of net.Server and has the same methods on it. Instead of accepting just raw TCP connections, this accepts encrypted connections using TLS or SSL."},createServer:{"!type":"fn(options?: ?, connectionListener?: fn(stream: +tls.CleartextStream)) -> +tls.Server","!url":"https://nodejs.org/api/tls.html#tls_tls_createserver_options_secureconnectionlistener","!doc":"Creates a new tls.Server. The connectionListener argument is automatically set as a listener for the secureConnection event."},CleartextStream:{"!type":"fn()",prototype:{"!proto":"stream.Duplex.prototype",authorized:{"!type":"bool","!url":"https://nodejs.org/api/tls.html#tls_cleartextstream_authorized","!doc":"A boolean that is true if the peer certificate was signed by one of the specified CAs, otherwise false"},authorizationError:{"!type":"+Error","!url":"https://nodejs.org/api/tls.html#tls_cleartextstream_authorizationerror","!doc":"The reason why the peer's certificate has not been verified. This property becomes available only when cleartextStream.authorized === false."},getPeerCertificate:{"!type":"fn() -> ?","!url":"https://nodejs.org/api/tls.html#tls_cleartextstream_getpeercertificate","!doc":"Returns an object representing the peer's certificate. The returned object has some properties corresponding to the field of the certificate."},getCipher:{"!type":"fn() -> tls.cipher","!url":"https://nodejs.org/api/tls.html#tls_cleartextstream_getcipher","!doc":"Returns an object representing the cipher name and the SSL/TLS protocol version of the current connection."},address:{"!type":"net.address","!url":"https://nodejs.org/api/tls.html#tls_cleartextstream_address","!doc":"Returns the bound address, the address family name and port of the underlying socket as reported by the operating system. Returns an object with three properties, e.g. { port: 12346, family: 'IPv4', address: '127.0.0.1' }"},remoteAddress:{"!type":"string","!url":"https://nodejs.org/api/tls.html#tls_cleartextstream_remoteaddress","!doc":"The string representation of the remote IP address. For example, '74.125.127.100' or '2001:4860:a005::68'."},remotePort:{"!type":"number","!url":"https://nodejs.org/api/tls.html#tls_cleartextstream_remoteport","!doc":"The numeric representation of the remote port. For example, 443."}},"!url":"https://nodejs.org/api/tls.html#tls_class_tls_cleartextstream","!doc":"This is a stream on top of the Encrypted stream that makes it possible to read/write an encrypted data as a cleartext data."},connect:{"!type":"fn(port: number, host?: string, options: ?, listener: fn()) -> +tls.CleartextStream","!url":"https://nodejs.org/api/tls.html#tls_tls_connect_options_callback","!doc":"Creates a new client connection to the given port and host (old API) or options.port and options.host. (If host is omitted, it defaults to localhost.)"},createSecurePair:{"!type":"fn(credentials?: crypto.credentials, isServer?: bool, requestCert?: bool, rejectUnauthorized?: bool) -> +tls.SecurePair","!url":"https://nodejs.org/api/tls.html#tls_tls_createsecurepair_credentials_isserver_requestcert_rejectunauthorized","!doc":"Creates a new secure pair object with two streams, one of which reads/writes encrypted data, and one reads/writes cleartext data. Generally the encrypted one is piped to/from an incoming encrypted data stream, and the cleartext one is used as a replacement for the initial encrypted stream."},SecurePair:{"!type":"fn()",prototype:{"!proto":"events.EventEmitter.prototype",cleartext:{"!type":"+tls.CleartextStream","!url":"https://nodejs.org/api/tls.html#tls_class_securepair","!doc":"Returned by tls.createSecurePair."},encrypted:{"!type":"+stream.Duplex","!url":"https://nodejs.org/api/tls.html#tls_class_securepair","!doc":"Returned by tls.createSecurePair."}},"!url":"https://nodejs.org/api/tls.html#tls_class_securepair","!doc":"Returned by tls.createSecurePair."}},crypto:{"!url":"https://nodejs.org/api/crypto.html","!doc":"The crypto module offers a way of encapsulating secure credentials to be used as part of a secure HTTPS net or http connection.\nIt also offers a set of wrappers for OpenSSL's hash, hmac, cipher, decipher, sign and verify methods.",getCiphers:{"!type":"fn() -> [string]","!url":"https://nodejs.org/api/crypto.html#crypto_crypto_getciphers","!doc":"Returns an array with the names of the supported ciphers."},getHashes:{"!type":"fn() -> [string]","!url":"https://nodejs.org/api/crypto.html#crypto_crypto_gethashes","!doc":"Returns an array with the names of the supported hash algorithms."},createCredentials:{"!type":"fn(details?: ?) -> crypto.credentials","!url":"https://nodejs.org/api/crypto.html#crypto_crypto_createcredentials_details","!doc":"Creates a credentials object."},createHash:{"!type":"fn(algorithm: string) -> +crypto.Hash","!url":"https://nodejs.org/api/crypto.html#crypto_crypto_createhash_algorithm","!doc":"Creates and returns a hash object, a cryptographic hash with the given algorithm which can be used to generate hash digests."},Hash:{"!type":"fn()",prototype:{"!proto":"stream.Duplex.prototype",update:{"!type":"fn(data: +Buffer, encoding?: string)","!url":"https://nodejs.org/api/crypto.html#crypto_hash_update_data_input_encoding","!doc":"Updates the hash content with the given data, the encoding of which is given in input_encoding and can be 'utf8', 'ascii' or 'binary'. If no encoding is provided, then a buffer is expected."},digest:{"!type":"fn(encoding?: string) -> +Buffer","!url":"https://nodejs.org/api/crypto.html#crypto_hash_digest_encoding","!doc":"Calculates the digest of all of the passed data to be hashed. The encoding can be 'hex', 'binary' or 'base64'. If no encoding is provided, then a buffer is returned."}},"!url":"https://nodejs.org/api/crypto.html#crypto_class_hash","!doc":"The class for creating hash digests of data."},createHmac:{"!type":"fn(algorithm: string, key: string) -> +crypto.Hmac","!url":"https://nodejs.org/api/crypto.html#crypto_crypto_createhmac_algorithm_key","!doc":"Creates and returns a hmac object, a cryptographic hmac with the given algorithm and key."},Hmac:{"!type":"fn()",prototype:{update:{"!type":"fn(data: +Buffer)","!url":"https://nodejs.org/api/crypto.html#crypto_hmac_update_data","!doc":"Update the hmac content with the given data. This can be called many times with new data as it is streamed."},digest:{"!type":"fn(encoding?: string) -> +Buffer","!url":"https://nodejs.org/api/crypto.html#crypto_hmac_digest_encoding","!doc":"Calculates the digest of all of the passed data to the hmac. The encoding can be 'hex', 'binary' or 'base64'. If no encoding is provided, then a buffer is returned."}},"!url":"https://nodejs.org/api/crypto.html#crypto_class_hmac","!doc":"Class for creating cryptographic hmac content."},createCipher:{"!type":"fn(algorithm: string, password: string) -> +crypto.Cipher","!url":"https://nodejs.org/api/crypto.html#crypto_crypto_createcipher_algorithm_password","!doc":"Creates and returns a cipher object, with the given algorithm and password."},createCipheriv:{"!type":"fn(algorithm: string, password: string, iv: string) -> +crypto.Cipher","!url":"https://nodejs.org/api/crypto.html#crypto_crypto_createcipheriv_algorithm_key_iv","!doc":"Creates and returns a cipher object, with the given algorithm, key and iv."},Cipher:{"!type":"fn()",prototype:{"!proto":"stream.Duplex.prototype",update:{"!type":"fn(data: +Buffer, input_encoding?: string, output_encoding?: string) -> +Buffer","!url":"https://nodejs.org/api/crypto.html#crypto_cipher_update_data_input_encoding_output_encoding","!doc":"Updates the cipher with data, the encoding of which is given in input_encoding and can be 'utf8', 'ascii' or 'binary'. If no encoding is provided, then a buffer is expected."},"final":{"!type":"fn(output_encoding?: string) -> +Buffer","!url":"https://nodejs.org/api/crypto.html#crypto_cipher_final_output_encoding","!doc":"Returns any remaining enciphered contents, with output_encoding being one of: 'binary', 'base64' or 'hex'. If no encoding is provided, then a buffer is returned."},setAutoPadding:{"!type":"fn(auto_padding: bool)","!url":"https://nodejs.org/api/crypto.html#crypto_cipher_setautopadding_auto_padding_true","!doc":"You can disable automatic padding of the input data to block size. If auto_padding is false, the length of the entire input data must be a multiple of the cipher's block size or final will fail. Useful for non-standard padding, e.g. using 0x0 instead of PKCS padding. You must call this before cipher.final."}},"!url":"https://nodejs.org/api/crypto.html#crypto_class_cipher","!doc":"Class for encrypting data."},createDecipher:{"!type":"fn(algorithm: string, password: string) -> +crypto.Decipher","!url":"https://nodejs.org/api/crypto.html#crypto_crypto_createdecipher_algorithm_password","!doc":"Creates and returns a decipher object, with the given algorithm and key. This is the mirror of the createCipher() above."},createDecipheriv:{"!type":"fn(algorithm: string, key: string, iv: string) -> +crypto.Decipher","!url":"https://nodejs.org/api/crypto.html#crypto_crypto_createdecipheriv_algorithm_key_iv","!doc":"Creates and returns a decipher object, with the given algorithm, key and iv. This is the mirror of the createCipheriv() above."},Decipher:{"!type":"fn()",prototype:{"!proto":"stream.Duplex.prototype",update:{"!type":"fn(data: +Buffer, input_encoding?: string, output_encoding?: string)","!url":"https://nodejs.org/api/crypto.html#crypto_decipher_update_data_input_encoding_output_encoding","!doc":"Updates the decipher with data, which is encoded in 'binary', 'base64' or 'hex'. If no encoding is provided, then a buffer is expected."},"final":{"!type":"fn(output_encoding?: string) -> +Buffer","!url":"https://nodejs.org/api/crypto.html#crypto_decipher_final_output_encoding","!doc":"Returns any remaining plaintext which is deciphered, with output_encoding being one of: 'binary', 'ascii' or 'utf8'. If no encoding is provided, then a buffer is returned."},setAutoPadding:{"!type":"fn(auto_padding: bool)","!url":"https://nodejs.org/api/crypto.html#crypto_decipher_setautopadding_auto_padding_true","!doc":"You can disable auto padding if the data has been encrypted without standard block padding to prevent decipher.final from checking and removing it. Can only work if the input data's length is a multiple of the ciphers block size. You must call this before streaming data to decipher.update."}},"!url":"https://nodejs.org/api/crypto.html#crypto_class_decipher","!doc":"Class for decrypting data."},createSign:{"!type":"fn(algorithm: string) -> +crypto.Sign","!url":"https://nodejs.org/api/crypto.html#crypto_crypto_createsign_algorithm","!doc":"Creates and returns a signing object, with the given algorithm. On recent OpenSSL releases, openssl list-public-key-algorithms will display the available signing algorithms. Examples are 'RSA-SHA256'."},Sign:{"!type":"fn()",prototype:{"!proto":"stream.Writable.prototype",update:{"!type":"fn(data: +Buffer)","!url":"https://nodejs.org/api/crypto.html#crypto_sign_update_data","!doc":"Updates the sign object with data. This can be called many times with new data as it is streamed."},sign:{"!type":"fn(private_key: string, output_format: string) -> +Buffer","!url":"https://nodejs.org/api/crypto.html#crypto_sign_sign_private_key_output_format","!doc":"Calculates the signature on all the updated data passed through the sign. private_key is a string containing the PEM encoded private key for signing."}},"!url":"https://nodejs.org/api/crypto.html#crypto_class_sign","!doc":"Class for generating signatures."},createVerify:{"!type":"fn(algorith: string) -> +crypto.Verify","!url":"https://nodejs.org/api/crypto.html#crypto_crypto_createverify_algorithm","!doc":"Creates and returns a verification object, with the given algorithm. This is the mirror of the signing object above."},Verify:{"!type":"fn()",prototype:{"!proto":"stream.Writable.prototype",update:{"!type":"fn(data: +Buffer)","!url":"https://nodejs.org/api/crypto.html#crypto_verifier_update_data","!doc":"Updates the verifier object with data. This can be called many times with new data as it is streamed."},verify:{"!type":"fn(object: string, signature: string, signature_format?: string) -> bool","!url":"https://nodejs.org/api/crypto.html#crypto_verifier_verify_object_signature_signature_format","!doc":"Verifies the signed data by using the object and signature. object is a string containing a PEM encoded object, which can be one of RSA public key, DSA public key, or X.509 certificate. signature is the previously calculated signature for the data, in the signature_format which can be 'binary', 'hex' or 'base64'. If no encoding is specified, then a buffer is expected."}},"!url":"https://nodejs.org/api/crypto.html#crypto_class_verify","!doc":"Class for verifying signatures."},createDiffieHellman:{"!type":"fn(prime: number, encoding?: string) -> +crypto.DiffieHellman","!url":"https://nodejs.org/api/crypto.html#crypto_crypto_creatediffiehellman_prime_length","!doc":"Creates a Diffie-Hellman key exchange object and generates a prime of the given bit length. The generator used is 2."},DiffieHellman:{"!type":"fn()",prototype:{generateKeys:{"!type":"fn(encoding?: string) -> +Buffer","!url":"https://nodejs.org/api/crypto.html#crypto_diffiehellman_generatekeys_encoding","!doc":"Generates private and public Diffie-Hellman key values, and returns the public key in the specified encoding. This key should be transferred to the other party. Encoding can be 'binary', 'hex', or 'base64'. If no encoding is provided, then a buffer is returned."},computeSecret:{"!type":"fn(other_public_key: +Buffer, input_encoding?: string, output_encoding?: string) -> +Buffer","!url":"https://nodejs.org/api/crypto.html#crypto_diffiehellman_computesecret_other_public_key_input_encoding_output_encoding","!doc":"Computes the shared secret using other_public_key as the other party's public key and returns the computed shared secret. Supplied key is interpreted using specified input_encoding, and secret is encoded using specified output_encoding. Encodings can be 'binary', 'hex', or 'base64'. If the input encoding is not provided, then a buffer is expected."},getPrime:{"!type":"fn(encoding?: string) -> +Buffer","!url":"https://nodejs.org/api/crypto.html#crypto_diffiehellman_getprime_encoding","!doc":"Returns the Diffie-Hellman prime in the specified encoding, which can be 'binary', 'hex', or 'base64'. If no encoding is provided, then a buffer is returned."},getGenerator:{"!type":"fn(encoding: string) -> +Buffer","!url":"https://nodejs.org/api/crypto.html#crypto_diffiehellman_getgenerator_encoding","!doc":"Returns the Diffie-Hellman prime in the specified encoding, which can be 'binary', 'hex', or 'base64'. If no encoding is provided, then a buffer is returned."},getPublicKey:{"!type":"fn(encoding?: string) -> +Buffer","!url":"https://nodejs.org/api/crypto.html#crypto_diffiehellman_getpublickey_encoding","!doc":"Returns the Diffie-Hellman public key in the specified encoding, which can be 'binary', 'hex', or 'base64'. If no encoding is provided, then a buffer is returned."},getPrivateKey:{"!type":"fn(encoding?: string) -> +Buffer","!url":"https://nodejs.org/api/crypto.html#crypto_diffiehellman_getprivatekey_encoding","!doc":"Returns the Diffie-Hellman private key in the specified encoding, which can be 'binary', 'hex', or 'base64'. If no encoding is provided, then a buffer is returned."},setPublicKey:{"!type":"fn(public_key: +Buffer, encoding?: string)","!url":"https://nodejs.org/api/crypto.html#crypto_diffiehellman_setpublickey_public_key_encoding","!doc":"Sets the Diffie-Hellman public key. Key encoding can be 'binary', 'hex' or 'base64'. If no encoding is provided, then a buffer is expected."},setPrivateKey:{"!type":"fn(public_key: +Buffer, encoding?: string)","!url":"https://nodejs.org/api/crypto.html#crypto_diffiehellman_setprivatekey_private_key_encoding","!doc":"Sets the Diffie-Hellman private key. Key encoding can be 'binary', 'hex' or 'base64'. If no encoding is provided, then a buffer is expected."}},"!url":"https://nodejs.org/api/crypto.html#crypto_class_diffiehellman","!doc":"The class for creating Diffie-Hellman key exchanges."},getDiffieHellman:{"!type":"fn(group_name: string) -> +crypto.DiffieHellman","!url":"https://nodejs.org/api/crypto.html#crypto_crypto_getdiffiehellman_group_name","!doc":"Creates a predefined Diffie-Hellman key exchange object. The supported groups are: 'modp1', 'modp2', 'modp5' (defined in RFC 2412) and 'modp14', 'modp15', 'modp16', 'modp17', 'modp18' (defined in RFC 3526). The returned object mimics the interface of objects created by crypto.createDiffieHellman() above, but will not allow to change the keys (with diffieHellman.setPublicKey() for example). The advantage of using this routine is that the parties don't have to generate nor exchange group modulus beforehand, saving both processor and communication time."},pbkdf2:{"!type":"fn(password: string, salt: string, iterations: number, keylen: number, callback: fn(err: +Error, derivedKey: string))","!url":"https://nodejs.org/api/crypto.html#crypto_crypto_pbkdf2_password_salt_iterations_keylen_callback","!doc":"Asynchronous PBKDF2 applies pseudorandom function HMAC-SHA1 to derive a key of given length from the given password, salt and iterations. The callback gets two arguments (err, derivedKey)."},pbkdf2Sync:{"!type":"fn(password: string, salt: string, iterations: number, keylen: number) -> string","!url":"https://nodejs.org/api/crypto.html#crypto_crypto_pbkdf2sync_password_salt_iterations_keylen","!doc":"Synchronous PBKDF2 function. Returns derivedKey or throws error."},randomBytes:{"!type":"fn(size: number, callback?: fn(err: +Error, buf: +Buffer))","!url":"https://nodejs.org/api/crypto.html#crypto_crypto_randombytes_size_callback","!doc":"Generates cryptographically strong pseudo-random data."},pseudoRandomBytes:{"!type":"fn(size: number, callback?: fn(err: +Error, buf: +Buffer))","!url":"https://nodejs.org/api/crypto.html#crypto_crypto_pseudorandombytes_size_callback","!doc":"Generates non-cryptographically strong pseudo-random data. The data returned will be unique if it is sufficiently long, but is not necessarily unpredictable. For this reason, the output of this function should never be used where unpredictability is important, such as in the generation of encryption keys."},DEFAULT_ENCODING:"string"},util:{"!url":"https://nodejs.org/api/util.html","!doc":"The util module is primarily designed to support the needs of Node's internal APIs. Many of these utilities are useful for your own programs. If you find that these functions are lacking for your purposes, however, you are encouraged to write your own utilities. We are not interested in any future additions to the util module that are unnecessary for Node's internal functionality.",format:{"!type":"fn(format: string) -> string","!url":"https://nodejs.org/api/util.html#util_util_format_format","!doc":"Returns a formatted string using the first argument as a printf-like format."},debug:{"!type":"fn(msg: string)","!url":"https://nodejs.org/api/util.html#util_util_debug_string","!doc":"A synchronous output function. Will block the process and output string immediately to stderr."},error:{"!type":"fn(msg: string)","!url":"https://nodejs.org/api/util.html#util_util_error","!doc":"Same as util.debug() except this will output all arguments immediately to stderr."},puts:{"!type":"fn(data: string)","!url":"https://nodejs.org/api/util.html#util_util_puts","!doc":"A synchronous output function. Will block the process and output all arguments to stdout with newlines after each argument."},print:{"!type":"fn(data: string)","!url":"https://nodejs.org/api/util.html#util_util_print","!doc":"A synchronous output function. Will block the process, cast each argument to a string then output to stdout. Does not place newlines after each argument."},log:{"!type":"fn(string: string)","!url":"https://nodejs.org/api/util.html#util_util_log_string","!doc":"Output with timestamp on stdout."},inspect:{"!type":"fn(object: ?, options: ?) -> string","!url":"https://nodejs.org/api/util.html#util_util_inspect_object_options","!doc":"Return a string representation of object, which is useful for debugging."},isArray:{"!type":"fn(object: ?) -> bool","!url":"https://nodejs.org/api/util.html#util_util_isarray_object","!doc":'Returns true if the given "object" is an Array. false otherwise.'},isRegExp:{"!type":"fn(object: ?) -> bool","!url":"https://nodejs.org/api/util.html#util_util_isregexp_object","!doc":'Returns true if the given "object" is a RegExp. false otherwise.'},isDate:{"!type":"fn(object: ?) -> bool","!url":"https://nodejs.org/api/util.html#util_util_isdate_object","!doc":'Returns true if the given "object" is a Date. false otherwise.'},isError:{"!type":"fn(object: ?) -> bool","!url":"https://nodejs.org/api/util.html#util_util_iserror_object","!doc":'Returns true if the given "object" is an Error. false otherwise.'},isBoolean:{"!type":"fn(object: ?) -> bool","!url":"https://nodejs.org/api/util.html#util_util_isboolean_object","!doc":'Returns true if the given "object" is a Boolean. false otherwise.'},isNull:{"!type":"fn(object: ?) -> bool","!url":"https://nodejs.org/api/util.html#util_util_isnull_object","!doc":'Returns true if the given "object" is strictly null. false otherwise.'},isNullOrUndefined:{"!type":"fn(object: ?) -> bool","!url":"https://nodejs.org/api/util.html#util_util_isnullorundefined_object","!doc":'Returns true if the given "object" is null or undefined. false otherwise.'},isNumber:{"!type":"fn(object: ?) -> bool","!url":"https://nodejs.org/api/util.html#util_util_isnumber_object","!doc":'Returns true if the given "object" is a Number. false otherwise.'},isString:{"!type":"fn(object: ?) -> bool","!url":"https://nodejs.org/api/util.html#util_util_isstring_object","!doc":'Returns true if the given "object" is a String. false otherwise.'},isSymbol:{"!type":"fn(object: ?) -> bool","!url":"https://nodejs.org/api/util.html#util_util_issymbol_object","!doc":'Returns true if the given "object" is a Symbol. false otherwise.'},isUndefined:{"!type":"fn(object: ?) -> bool","!url":"https://nodejs.org/api/util.html#util_util_isundefined_object","!doc":'Returns true if the given "object" is undefined. false otherwise.'},isObject:{"!type":"fn(object: ?) -> bool","!url":"https://nodejs.org/api/util.html#util_util_isobject_object","!doc":'Returns true if the given "object" is strictly an Object and not a Function. false otherwise.'},isFunction:{"!type":"fn(object: ?) -> bool","!url":"https://nodejs.org/api/util.html#util_util_isfunction_object","!doc":'Returns true if the given "object" is a Function. false otherwise.'},isPrimitive:{"!type":"fn(object: ?) -> bool","!url":"https://nodejs.org/api/util.html#util_util_isprimitive_object","!doc":'Returns true if the given "object" is a primitive type. false otherwise.'},isBuffer:{"!type":"fn(object: ?) -> bool","!url":"https://nodejs.org/api/util.html#util_util_isbuffer_object","!doc":'Returns true if the given "object" is a Buffer. false otherwise.'},inherits:{"!type":"fn(constructor: ?, superConstructor: ?)","!url":"https://nodejs.org/api/util.html#util_util_inherits_constructor_superconstructor","!doc":"Inherit the prototype methods from one constructor into another. The prototype of constructor will be set to a new object created from superConstructor."}},assert:{"!url":"https://nodejs.org/api/assert.html","!doc":"The assert module provides a simple set of assertion tests that can be used to test invariants. The module is intended for internal use by Node.js, but can be used in application code via require('assert'). However, assert is not a testing framework, and is not intended to be used as a general purpose assertion library.","!type":"fn(value: ?, message?: string)",ok:{"!type":"fn(value: ?, message?: string)","!url":"https://nodejs.org/api/assert.html#assert_assert_value_message_assert_ok_value_message","!doc":"Tests if value is truthy. It is equivalent to assert.equal(!!value, true, message)."},deepEqual:{"!type":"fn(actual: ?, expected: ?, message?: string)","!url":"https://nodejs.org/api/assert.html#assert_assert_deepequal_actual_expected_message","!doc":"Tests for deep equality between the actual and expected parameters. Primitive values are compared with the equal comparison operator ( == )."},deepStrictEqual:{"!type":"fn(actual: ?, expected: ?, message?: string)","!url":"https://nodejs.org/api/assert.html#assert_assert_deepstrictequal_actual_expected_message","!doc":"Generally identical to assert.deepEqual with the exception that primitive values are compared using the strict equality operator ( === )."},doesNotThrow:{"!type":"fn(block: fn(), error?: ?, message?: string)","!url":"https://nodejs.org/api/assert.html#assert_assert_doesnotthrow_block_error_message","!doc":"Asserts that the function block does not throw an error. See assert.throws() for more details."},equal:{"!type":"fn(actual: ?, expected: ?, message?: string)","!url":"https://nodejs.org/api/assert.html#assert_assert_equal_actual_expected_message","!doc":"Tests shallow, coercive equality between the actual and expected parameters using the equal comparison operator ( == )."},fail:{"!type":"fn(actual: ?, expected: ?, message: string, operator: string)","!url":"https://nodejs.org/api/assert.html#assert_assert_fail_actual_expected_message_operator","!doc":"Throws an AssertionError. If message is falsy, the error message is set as the values of actual and expected separated by the provided operator. Otherwise, the error message is the value of message."},ifError:{"!type":"fn(value: ?)","!url":"https://nodejs.org/api/assert.html#assert_assert_iferror_value","!doc":"Throws value if value is truthy. This is useful when testing the error argument in callbacks."},notDeepEqual:{"!type":"fn(actual: ?, expected: ?, message?: string)","!url":"https://nodejs.org/api/assert.html#assert_assert_notdeepequal_actual_expected_message","!doc":"Tests for any deep inequality. Opposite of assert.deepEqual."},notDeepStrictEqual:{"!type":"fn(actual: ?, expected: ?, message?: string)","!url":"https://nodejs.org/api/assert.html#assert_assert_notdeepstrictequal_actual_expected_message","!doc":"Tests for deep strict inequality. Opposite of assert.deepStrictEqual."},notEqual:{"!type":"fn(actual: ?, expected: ?, message?: string)","!url":"https://nodejs.org/api/assert.html#assert_assert_notequal_actual_expected_message","!doc":"Tests shallow, coercive inequality with the not equal comparison operator ( != )."},notStrictEqual:{"!type":"fn(actual: ?, expected: ?, message?: string)","!url":"https://nodejs.org/api/assert.html#assert_assert_notstrictequal_actual_expected_message","!doc":"Tests strict inequality as determined by the strict not equal operator ( !== )."},strictEqual:{"!type":"fn(actual: ?, expected: ?, message?: string)","!url":"https://nodejs.org/api/assert.html#assert_assert_strictequal_actual_expected_message","!doc":"Tests strict equality as determined by the strict equality operator ( === )."},"throws":{"!type":"fn(block: fn(), error?: ?, message?: string)","!url":"https://nodejs.org/api/assert.html#assert_assert_throws_block_error_message","!doc":"Expects the function block to throw an error. If specified, error can be a constructor, RegExp, or validation function."}},tty:{"!url":"https://nodejs.org/api/tty.html","!doc":"The tty module houses the tty.ReadStream and tty.WriteStream classes. In most cases, you will not need to use this module directly.",isatty:{"!type":"fn(fd: number) -> bool","!url":"https://nodejs.org/api/tty.html#tty_tty_isatty_fd","!doc":"Returns true or false depending on if the fd is associated with a terminal."}},domain:{"!url":"https://nodejs.org/api/domain.html","!doc":"Domains provide a way to handle multiple different IO operations as a single group. If any of the event emitters or callbacks registered to a domain emit an error event, or throw an error, then the domain object will be notified, rather than losing the context of the error in the process.on('uncaughtException') handler, or causing the program to exit immediately with an error code.",create:{"!type":"fn() -> +events.EventEmitter","!url":"https://nodejs.org/api/domain.html#domain_domain_create","!doc":"Returns a new Domain object."},Domain:{"!type":"fn()",prototype:{"!proto":"events.EventEmitter.prototype",run:{"!type":"fn(fn: fn())","!url":"https://nodejs.org/api/domain.html#domain_domain_run_fn","!doc":"Run the supplied function in the context of the domain, implicitly binding all event emitters, timers, and lowlevel requests that are created in that context."},members:{"!type":"[+events.EventEmitter]","!url":"https://nodejs.org/api/domain.html#domain_domain_members","!doc":"An array of timers and event emitters that have been explicitly added to the domain."},add:{"!type":"fn(emitter: +events.EventEmitter)","!url":"https://nodejs.org/api/domain.html#domain_domain_add_emitter","!doc":"Explicitly adds an emitter to the domain. If any event handlers called by the emitter throw an error, or if the emitter emits an error event, it will be routed to the domain's error event, just like with implicit binding."},remove:{"!type":"fn(emitter: +events.EventEmitter)","!url":"https://nodejs.org/api/domain.html#domain_domain_remove_emitter","!doc":"The opposite of domain.add(emitter). Removes domain handling from the specified emitter."},bind:{"!type":"fn(callback: fn(err: +Error, data: ?)) -> !0","!url":"https://nodejs.org/api/domain.html#domain_domain_bind_callback","!doc":"The returned function will be a wrapper around the supplied callback function. When the returned function is called, any errors that are thrown will be routed to the domain's error event."},intercept:{"!type":"fn(cb: fn(data: ?)) -> !0","!url":"https://nodejs.org/api/domain.html#domain_domain_intercept_callback","!doc":"This method is almost identical to domain.bind(callback). However, in addition to catching thrown errors, it will also intercept Error objects sent as the first argument to the function."},dispose:{"!type":"fn()","!url":"https://nodejs.org/api/domain.html#domain_domain_dispose","!doc":"The dispose method destroys a domain, and makes a best effort attempt to clean up any and all IO that is associated with the domain. Streams are aborted, ended, closed, and/or destroyed. Timers are cleared. Explicitly bound callbacks are no longer called. Any error events that are raised as a result of this are ignored."}},"!url":"https://nodejs.org/api/domain.html#domain_class_domain","!doc":"The Domain class encapsulates the functionality of routing errors and uncaught exceptions to the active Domain object."}},"os.cpuSpec":{model:"string",speed:"number",times:{user:"number",nice:"number",sys:"number",idle:"number",irq:"number"}},"process.memoryUsage.type":{rss:"number",heapTotal:"?",number:"?",heapUsed:"number"},"net.address":{port:"number",family:"string",address:"string"},"url.type":{href:"string",protocol:"string",auth:"string",hostname:"string",port:"string",host:"string",pathname:"string",search:"string",query:"string",slashes:"bool",hash:"string"},"tls.Server.credentials":{key:"string",cert:"string",ca:"string"},"tls.cipher":{name:"string",version:"string"},"crypto.credentials":{pfx:"string",key:"string",passphrase:"string",cert:"string",ca:"string",crl:"string",ciphers:"string"},buffer:{"!url":"https://nodejs.org/api/buffer.html","!doc":"Prior to the introduction of TypedArray in ECMAScript 2015 (ES6), the JavaScript language had no mechanism for reading or manipulating streams of binary data. The Buffer class was introduced as part of the Node.js API to make it possible to interact with octet streams in the context of things like TCP streams and file system operations.",Buffer:"Buffer",SlowBuffer:"Buffer",INSPECT_MAX_BYTES:{"!type":"number","!url":"https://nodejs.org/api/buffer.html#buffer_buffer_inspect_max_bytes","!doc":"Returns the maximum number of bytes that will be returned when buffer.inspect() is called. This can be overridden by user modules. See util.inspect() for more details on buffer.inspect() behavior."}},module:{},timers:{clearImmediate:{"!type":"fn(immediateObject: ?)","!url":"https://nodejs.org/api/timers.html#timers_clearimmediate_immediateobject","!doc":"Stops an immediate from triggering."},clearInterval:{"!type":"fn(intervalObject: timers.Timer)","!url":"https://nodejs.org/api/timers.html#timers_clearinterval_intervalobject","!doc":"Stops an interval from triggering."},clearTimeout:{"!type":"fn(timeoutObject: timers.Timer)","!url":"https://nodejs.org/api/timers.html#timers_cleartimeout_timeoutobject","!doc":"Prevents a timeout from triggering."},setImmediate:{"!type":"fn(callback: fn(), args?: ?) -> ?","!url":"https://nodejs.org/api/timers.html#timers_setimmediate_callback_arg","!doc":'To schedule the "immediate" execution of callback after I/O events callbacks and before setTimeout and setInterval. Returns an immediateObject for possible use with clearImmediate(). Optionally you can also pass arguments to the callback.'},setInterval:{"!type":"fn(callback: fn(), delay: number, args?: ?) -> timers.Timer","!url":"https://nodejs.org/api/timers.html#timers_setinterval_callback_delay_arg","!doc":"To schedule the repeated execution of callback every delay milliseconds. Returns a intervalObject for possible use with clearInterval(). Optionally you can also pass arguments to the callback."},setTimeout:{"!type":"fn(callback: fn(), delay: number, args?: ?) -> timers.Timer","!url":"https://nodejs.org/api/timers.html#timers_settimeout_callback_delay_arg","!doc":"To schedule execution of a one-time callback after delay milliseconds. Returns a timeoutObject for possible use with clearTimeout(). Optionally you can also pass arguments to the callback."},Timer:{ref:{"!type":"fn() -> timers.Timer","!url":"https://nodejs.org/api/timers.html#timers_ref","!doc":"If you had previously unref()d a timer you can call ref() to explicitly request the timer hold the program open. If the timer is already refd calling ref again will have no effect."},unref:{"!type":"fn() -> timers.Timer","!url":"https://nodejs.org/api/timers.html#timers_unref","!doc":"The opaque value returned by setTimeout and setInterval also has the method timer.unref() which will allow you to create a timer that is active but if it is the only item left in the event loop, it won't keep the program running. If the timer is already unrefd calling unref again will have no effect."}}}},process:{stdout:{"!type":"+stream.Writable","!url":"https://nodejs.org/api/process.html#process_process_stdout","!doc":"A Writable Stream to stdout."},stderr:{"!type":"+stream.Writable","!url":"https://nodejs.org/api/process.html#process_process_stderr","!doc":"A writable stream to stderr."},stdin:{"!type":"+stream.Readable","!url":"https://nodejs.org/api/process.html#process_process_stdin","!doc":"A Readable Stream for stdin. The stdin stream is paused by default, so one must call process.stdin.resume() to read from it."},argv:{"!type":"[string]","!url":"https://nodejs.org/api/process.html#process_process_argv","!doc":"An array containing the command line arguments. The first element will be 'node', the second element will be the name of the JavaScript file. The next elements will be any additional command line arguments."},execPath:{"!type":"string","!url":"https://nodejs.org/api/process.html#process_process_execpath","!doc":"This is the absolute pathname of the executable that started the process."},abort:{"!type":"fn()","!url":"https://nodejs.org/api/process.html#process_process_abort","!doc":"This causes node to emit an abort. This will cause node to exit and generate a core file."},chdir:{"!type":"fn(directory: string)","!url":"https://nodejs.org/api/process.html#process_process_chdir_directory","!doc":"Changes the current working directory of the process or throws an exception if that fails."},cwd:{"!type":"fn()","!url":"https://nodejs.org/api/process.html#process_process_cwd","!doc":"Returns the current working directory of the process."},env:{"!url":"https://nodejs.org/api/process.html#process_process_env","!doc":"An object containing the user environment."},exit:{"!type":"fn(code?: number)","!url":"https://nodejs.org/api/process.html#process_process_exit_code","!doc":"Ends the process with the specified code. If omitted, exit uses the 'success' code 0."},getgid:{"!type":"fn() -> number","!url":"https://nodejs.org/api/process.html#process_process_getgid","!doc":"Gets the group identity of the process. This is the numerical group id, not the group name."},setgid:{"!type":"fn(id: number)","!url":"https://nodejs.org/api/process.html#process_process_setgid_id","!doc":"Sets the group identity of the process. This accepts either a numerical ID or a groupname string. If a groupname is specified, this method blocks while resolving it to a numerical ID."},getuid:{"!type":"fn() -> number","!url":"https://nodejs.org/api/process.html#process_process_getuid","!doc":"Gets the user identity of the process. This is the numerical userid, not the username."},setuid:{"!type":"fn(id: number)","!url":"https://nodejs.org/api/process.html#process_process_setuid_id","!doc":"Sets the user identity of the process. This accepts either a numerical ID or a username string. If a username is specified, this method blocks while resolving it to a numerical ID."},version:{"!type":"string","!url":"https://nodejs.org/api/process.html#process_process_version","!doc":"A compiled-in property that exposes NODE_VERSION."},versions:{http_parser:"string",node:"string",v8:"string",ares:"string",uv:"string",zlib:"string",openssl:"string","!url":"https://nodejs.org/api/process.html#process_process_versions","!doc":"A property exposing version strings of node and its dependencies."},config:{target_defaults:{cflags:"[?]",default_configuration:"string",defines:"[string]",include_dirs:"[string]",libraries:"[string]"},variables:{clang:"number",host_arch:"string",node_install_npm:"bool",node_install_waf:"bool",node_prefix:"string",node_shared_openssl:"bool",node_shared_v8:"bool",node_shared_zlib:"bool",node_use_dtrace:"bool",node_use_etw:"bool",node_use_openssl:"bool",target_arch:"string",v8_no_strict_aliasing:"number",v8_use_snapshot:"bool",visibility:"string"},"!url":"https://nodejs.org/api/process.html#process_process_config","!doc":'An Object containing the JavaScript representation of the configure options that were used to compile the current node executable. This is the same as the "config.gypi" file that was produced when running the ./configure script.'},kill:{"!type":"fn(pid: number, signal?: string)","!url":"https://nodejs.org/api/process.html#process_process_kill_pid_signal","!doc":"Send a signal to a process. pid is the process id and signal is the string describing the signal to send. Signal names are strings like 'SIGINT' or 'SIGUSR1'. If omitted, the signal will be 'SIGTERM'."},pid:{"!type":"number","!url":"https://nodejs.org/api/process.html#process_process_pid","!doc":"The PID of the process."},title:{"!type":"string","!url":"https://nodejs.org/api/process.html#process_process_title","!doc":"Getter/setter to set what is displayed in 'ps'."},arch:{"!type":"string","!url":"https://nodejs.org/api/process.html#process_process_arch","!doc":"What processor architecture you're running on: 'arm', 'ia32', or 'x64'."},platform:{"!type":"string","!url":"https://nodejs.org/api/process.html#process_process_platform","!doc":"What platform you're running on: 'darwin', 'freebsd', 'linux', 'sunos' or 'win32'"},memoryUsage:{"!type":"fn() -> process.memoryUsage.type","!url":"https://nodejs.org/api/process.html#process_process_memoryusage","!doc":"Returns an object describing the memory usage of the Node process measured in bytes."},nextTick:{"!type":"fn(callback: fn())","!url":"https://nodejs.org/api/process.html#process_process_nexttick_callback","!doc":"On the next loop around the event loop call this callback. This is not a simple alias to setTimeout(fn, 0), it's much more efficient. It typically runs before any other I/O events fire, but there are some exceptions."},maxTickDepth:{"!type":"number","!url":"https://nodejs.org/api/process.html#process_process_maxtickdepth","!doc":"The maximum depth of nextTick-calling nextTick-callbacks that will be evaluated before allowing other forms of I/O to occur."},umask:{"!type":"fn(mask?: number) -> number","!url":"https://nodejs.org/api/process.html#process_process_umask_mask","!doc":"Sets or reads the process's file mode creation mask. Child processes inherit the mask from the parent process. Returns the old mask if mask argument is given, otherwise returns the current mask."},uptime:{"!type":"fn() -> number","!url":"https://nodejs.org/api/process.html#process_process_uptime","!doc":"Number of seconds Node has been running."},hrtime:{"!type":"fn() -> [number]","!url":"https://nodejs.org/api/process.html#process_process_hrtime","!doc":"Returns the current high-resolution real time in a [seconds, nanoseconds] tuple Array. It is relative to an arbitrary time in the past. It is not related to the time of day and therefore not subject to clock drift. The primary use is for measuring performance between intervals."},"!url":"https://nodejs.org/api/globals.html#globals_process","!doc":"The process object."},global:{"!type":"<top>","!url":"https://nodejs.org/api/globals.html#globals_global","!doc":"In browsers, the top-level scope is the global scope. That means that in browsers if you're in the global scope var something will define a global variable. In Node this is different. The top-level scope is not the global scope; var something inside a Node module will be local to that module."},console:{log:{"!type":"fn(text: string)","!url":"https://nodejs.org/api/stdio.html#stdio_console_log_data","!doc":"Prints to stdout with newline. This function can take multiple arguments in a printf()-like way."},info:{"!type":"fn(text: string)","!url":"https://nodejs.org/api/stdio.html#stdio_console_info_data","!doc":"Same as console.log."},error:{"!type":"fn(text: string)","!url":"https://nodejs.org/api/stdio.html#stdio_console_error_data","!doc":"Same as console.log but prints to stderr."},warn:{"!type":"fn(text: string)","!url":"https://nodejs.org/api/stdio.html#stdio_console_warn_data","!doc":"Same as console.error."},dir:{"!type":"fn(obj: ?)","!url":"https://nodejs.org/api/stdio.html#stdio_console_dir_obj","!doc":"Uses util.inspect on obj and prints resulting string to stdout."},time:{"!type":"fn(label: string)","!url":"https://nodejs.org/api/stdio.html#stdio_console_time_label","!doc":"Mark a time."},timeEnd:{"!type":"fn(label: string)","!url":"https://nodejs.org/api/stdio.html#stdio_console_timeend_label","!doc":"Finish timer, record output."},trace:{"!type":"fn(label: string)","!url":"https://nodejs.org/api/stdio.html#stdio_console_trace_label","!doc":"Print a stack trace to stderr of the current position."},assert:{"!type":"fn(expression: bool)","!url":"https://nodejs.org/api/stdio.html#stdio_console_assert_expression_message","!doc":"Same as assert.ok() where if the expression evaluates as false throw an AssertionError with message."},"!url":"https://nodejs.org/api/globals.html#globals_console","!doc":"Used to print to stdout and stderr."},__filename:{"!type":"string","!url":"https://nodejs.org/api/globals.html#globals_filename","!doc":"The filename of the code being executed. This is the resolved absolute path of this code file. For a main program this is not necessarily the same filename used in the command line. The value inside a module is the path to that module file."},__dirname:{"!type":"string","!url":"https://nodejs.org/api/globals.html#globals_dirname","!doc":"The name of the directory that the currently executing script resides in."},clearImmediate:"timers.clearImmediate",clearInterval:"timers.clearInterval",clearTimeout:"timers.clearTimeout",setImmediate:"timers.setImmediate",setInterval:"timers.setInterval",setTimeout:"timers.setTimeout",Buffer:{"!type":"fn() -> +Buffer","!url":"https://nodejs.org/api/buffer.html#buffer_class_buffer","!doc":"The Buffer class is a global type for dealing with binary data directly. It can be constructed in a variety of ways.",byteLength:{"!type":"fn(string: string, encoding?: string) -> number","!url":"https://nodejs.org/api/buffer.html#buffer_class_method_buffer_bytelength_string_encoding","!doc":"Returns the actual byte length of a string. This is not the same as String.prototype.length since that returns the number of characters in a string."},compare:{"!type":"fn(buf1: +Buffer, buf2: +Buffer) -> number","!url":"https://nodejs.org/api/buffer.html#buffer_class_method_buffer_compare_buf1_buf2","!doc":"Compares buf1 to buf2 typically for the purpose of sorting arrays of Buffers. This is equivalent is calling buf1.compare(buf2)."},concat:{"!type":"fn(list: ?, totalLength?: number) -> +Buffer","!url":"https://nodejs.org/api/buffer.html#buffer_class_method_buffer_concat_list_totallength","!doc":"Returns a new Buffer which is the result of concatenating all the Buffers in the list together."},isBuffer:{"!type":"fn(obj: ?) -> bool","!url":"https://nodejs.org/api/buffer.html#buffer_class_method_buffer_isbuffer_obj","!doc":"Returns 'true' if obj is a Buffer."},isEncoding:{"!type":"fn(encoding: string) -> bool","!url":"https://nodejs.org/api/buffer.html#buffer_class_method_buffer_isencoding_encoding","!doc":"Returns true if the encoding is a valid encoding argument, or false otherwise."},prototype:{"!proto":"Uint8Array.prototype",length:{"!type":"number","!url":"https://nodejs.org/api/buffer.html#buffer_buf_length","!doc":"Returns the amount of memory allocated for the Buffer in number of bytes. Note that this does not necessarily reflect the amount of usable data within the Buffer. For instance, in the example below, a Buffer with 1234 bytes is allocated, but only 11 ASCII bytes are written."},compare:{"!type":"fn(otherBuffer: +Buffer) -> number","!url":"https://nodejs.org/api/buffer.html#buffer_buf_compare_otherbuffer","!doc":"Compares two Buffer instances and returns a number indicating whether buf comes before, after, or is the same as the otherBuffer in sort order. Comparison is based on the actual sequence of bytes in each Buffer."},copy:{"!type":"fn(targetBuffer: +Buffer, targetStart?: number, sourceStart?: number, sourceEnd?: number) -> number","!url":"https://nodejs.org/api/buffer.html#buffer_buf_copy_targetbuffer_targetstart_sourcestart_sourceend","!doc":"Copies data from a region of this Buffer to a region in the target Buffer even if the target memory region overlaps with the source. If undefined, the targetStart and sourceStart parameters default to 0 while sourceEnd defaults to buffer.length."},entries:{"!type":"fn()","!url":"https://nodejs.org/api/buffer.html#buffer_buf_entries","!doc":"Creates and returns an iterator of [index, byte] pairs from the Buffer contents."},equals:{"!type":"fn(otherBuffer: +Buffer) -> bool","!url":"https://nodejs.org/api/buffer.html#buffer_buf_equals_otherbuffer","!doc":"Returns a boolean indicating whether this and otherBuffer have exactly the same bytes."},fill:{"!type":"fn(value: ?, offset?: number, end?: number)","!url":"https://nodejs.org/api/buffer.html#buffer_buf_fill_value_offset_end","!doc":"Fills the Buffer with the specified value. If the offset (defaults to 0) and end (defaults to buffer.length) are not given it will fill the entire Buffer. The method returns a reference to the Buffer so calls can be chained."},indexOf:{"!type":"fn(value: ?, byteOffset?: number, encoding?: string) -> number","!url":"https://nodejs.org/api/buffer.html#buffer_buf_indexof_value_byteoffset_encoding","!doc":"Operates similar to Array#indexOf() in that it returns either the starting index position of value in Buffer or -1 if the Buffer does not contain value. The value can be a String, Buffer or Number. Strings are by default interpreted as UTF8. Buffers will use the entire Buffer (to compare a partial Buffer use Buffer#slice()). Numbers can range from 0 to 255."},includes:{"!type":"fn(value: ?, byteOffset?: number, encoding?: string)","!url":"https://nodejs.org/api/buffer.html#buffer_buf_includes_value_byteoffset_encoding","!doc":"Operates similar to Array#includes(). The value can be a String, Buffer or Number. Strings are interpreted as UTF8 unless overridden with the encoding argument. Buffers will use the entire Buffer (to compare a partial Buffer use Buffer#slice()). Numbers can range from 0 to 255."},keys:{"!type":"fn()","!url":"https://nodejs.org/api/buffer.html#buffer_buf_keys","!doc":"Creates and returns an iterator of Buffer keys (indices)."},readDoubleBE:{"!type":"fn(offset: number, noAssert?: bool) -> number","!url":"https://nodejs.org/api/buffer.html#buffer_buf_readdoublebe_offset_noassert","!doc":"Reads a 64-bit double from the Buffer at the specified offset with specified endian format (readDoubleBE() returns big endian, readDoubleLE() returns little endian)."},readDoubleLE:{"!type":"fn(offset: number, noAssert?: bool) -> number","!url":"https://nodejs.org/api/buffer.html#buffer_buf_readdoublele_offset_noassert","!doc":"Reads a 64-bit double from the Buffer at the specified offset with specified endian format (readDoubleBE() returns big endian, readDoubleLE() returns little endian)."},readFloatBE:{"!type":"fn(offset: number, noAssert?: bool) -> number","!url":"https://nodejs.org/api/buffer.html#buffer_buf_readfloatbe_offset_noassert","!doc":"Reads a 32-bit float from the Buffer at the specified offset with specified endian format (readFloatBE() returns big endian, readFloatLE() returns little endian)."},readFloatLE:{"!type":"fn(offset: number, noAssert?: bool) -> number","!url":"https://nodejs.org/api/buffer.html#buffer_buf_readfloatle_offset_noassert","!doc":"Reads a 32-bit float from the Buffer at the specified offset with specified endian format (readFloatBE() returns big endian, readFloatLE() returns little endian)."},readInt8:{"!type":"fn(offset: number, noAssert?: bool) -> number","!url":"https://nodejs.org/api/buffer.html#buffer_buf_readint8_offset_noassert","!doc":"Reads a signed 8-bit integer from the Buffer at the specified offset."},readInt16BE:{"!type":"fn(offset: number, noAssert?: bool) -> number","!url":"https://nodejs.org/api/buffer.html#buffer_buf_readint16be_offset_noassert","!doc":"Reads a signed 16-bit integer from the Buffer at the specified offset with the specified endian format (readInt16BE() returns big endian, readInt16LE() returns little endian)."},readInt16LE:{"!type":"fn(offset: number, noAssert?: bool) -> number","!url":"https://nodejs.org/api/buffer.html#buffer_buf_readint16le_offset_noassert","!doc":"Reads a signed 16-bit integer from the Buffer at the specified offset with the specified endian format (readInt16BE() returns big endian, readInt16LE() returns little endian)."},readInt32BE:{"!type":"fn(offset: number, noAssert?: bool) -> number","!url":"https://nodejs.org/api/buffer.html#buffer_buf_readint32be_offset_noassert","!doc":"Reads a signed 32-bit integer from the Buffer at the specified offset with the specified endian format (readInt32BE() returns big endian, readInt32LE() returns little endian)."},readInt32LE:{"!type":"fn(offset: number, noAssert?: bool) -> number","!url":"https://nodejs.org/api/buffer.html#buffer_buf_readint32le_offset_noassert","!doc":"Reads a signed 32-bit integer from the Buffer at the specified offset with the specified endian format (readInt32BE() returns big endian, readInt32LE() returns little endian)."},readIntBE:{"!type":"fn(offset: number, byteLength: number, noAssert?: bool) -> number","!url":"https://nodejs.org/api/buffer.html#buffer_buf_readintbe_offset_bytelength_noassert","!doc":"Reads byteLength number of bytes from the Buffer at the specified offset and interprets the result as a two's complement signed value. Supports up to 48 bits of accuracy. For example:"},readIntLE:{"!type":"fn(offset: number, byteLength: number, noAssert?: bool) -> number","!url":"https://nodejs.org/api/buffer.html#buffer_buf_readintle_offset_bytelength_noassert","!doc":"Reads byteLength number of bytes from the Buffer at the specified offset and interprets the result as a two's complement signed value. Supports up to 48 bits of accuracy. For example:"},readUInt8:{"!type":"fn(offset: number, noAssert?: bool) -> number","!url":"https://nodejs.org/api/buffer.html#buffer_buf_readuint8_offset_noassert","!doc":"Reads an unsigned 8-bit integer from the Buffer at the specified offset."},readUInt16BE:{"!type":"fn(offset: number, noAssert?: bool) -> number","!url":"https://nodejs.org/api/buffer.html#buffer_buf_readuint16be_offset_noassert","!doc":"Reads an unsigned 16-bit integer from the Buffer at the specified offset with specified endian format (readInt32BE() returns big endian, readInt32LE() returns little endian)."},readUInt16LE:{"!type":"fn(offset: number, noAssert?: bool) -> number","!url":"https://nodejs.org/api/buffer.html#buffer_buf_readuint16le_offset_noassert","!doc":"Reads an unsigned 16-bit integer from the Buffer at the specified offset with specified endian format (readInt32BE() returns big endian, readInt32LE() returns little endian)."},readUInt32BE:{"!type":"fn(offset: number, noAssert?: bool) -> number","!url":"https://nodejs.org/api/buffer.html#buffer_buf_readuint32be_offset_noassert","!doc":"Reads an unsigned 32-bit integer from the Buffer at the specified offset with specified endian format (readInt32BE() returns big endian, readInt32LE() returns little endian)."},readUInt32LE:{"!type":"fn(offset: number, noAssert?: bool) -> number","!url":"https://nodejs.org/api/buffer.html#buffer_buf_readuint32le_offset_noassert","!doc":"Reads an unsigned 32-bit integer from the Buffer at the specified offset with specified endian format (readInt32BE() returns big endian, readInt32LE() returns little endian)."},readUIntBE:{"!type":"fn(offset: number, byteLength: number, noAssert?: bool) -> number","!url":"https://nodejs.org/api/buffer.html#buffer_buf_readuintbe_offset_bytelength_noassert","!doc":"Reads byteLength number of bytes from the Buffer at the specified offset and interprets the result as an unsigned integer. Supports up to 48 bits of accuracy. For example:"},readUIntLE:{"!type":"fn(offset: number, byteLength: number, noAssert?: bool) -> number","!url":"https://nodejs.org/api/buffer.html#buffer_buf_readuintle_offset_bytelength_noassert","!doc":"Reads byteLength number of bytes from the Buffer at the specified offset and interprets the result as an unsigned integer. Supports up to 48 bits of accuracy. For example:"},slice:{"!type":"fn(start: number, end?: number)","!url":"https://nodejs.org/api/buffer.html#buffer_buf_slice_start_end","!doc":"Returns a new Buffer that references the same memory as the original, but offset and cropped by the start (defaults to 0) and end (defaults to buffer.length) indexes."},toString:{"!type":"fn(encoding?: string, start?: number, end?: number) -> string","!url":"https://nodejs.org/api/buffer.html#buffer_buf_tostring_encoding_start_end","!doc":"Decodes and returns a string from the Buffer data using the specified character set encoding."},toJSON:{"!type":"fn()","!url":"https://nodejs.org/api/buffer.html#buffer_buf_tojson","!doc":"Returns a JSON representation of the Buffer instance. JSON.stringify implicitly calls this function when stringifying a Buffer instance."},values:{"!type":"fn()","!url":"https://nodejs.org/api/buffer.html#buffer_buf_values","!doc":"Creates and returns an iterator for Buffer values (bytes). This function is called automatically when the Buffer is used in a for..of statement."},write:{"!type":"fn(string: string, offset?: number, length?: number, encoding?: string) -> number","!url":"https://nodejs.org/api/buffer.html#buffer_buf_write_string_offset_length_encoding","!doc":"Writes string to the Buffer at offset using the given encoding. The length parameter is the number of bytes to write. If the Buffer did not contain enough space to fit the entire string, only a partial amount of the string will be written however, the will not write only partially encoded characters."},writeDoubleBE:{"!type":"fn(value: number, offset: number, noAssert?: bool) -> number","!url":"https://nodejs.org/api/buffer.html#buffer_buf_writedoublebe_value_offset_noassert","!doc":"Writes value to the Buffer at the specified offset with specified endian format (writeDoubleBE() writes big endian, writeDoubleLE() writes little endian). The value argument must be a valid 64-bit double."},writeDoubleLE:{"!type":"fn(value: number, offset: number, noAssert?: bool) -> number","!url":"https://nodejs.org/api/buffer.html#buffer_buf_writedoublele_value_offset_noassert","!doc":"Writes value to the Buffer at the specified offset with specified endian format (writeDoubleBE() writes big endian, writeDoubleLE() writes little endian). The value argument must be a valid 64-bit double."},writeFloatBE:{"!type":"fn(value: number, offset: number, noAssert?: bool) -> number","!url":"https://nodejs.org/api/buffer.html#buffer_buf_writefloatbe_value_offset_noassert","!doc":"Writes value to the Buffer at the specified offset with specified endian format (writeFloatBE() writes big endian, writeFloatLE() writes little endian). Behavior is unspecified if value is anything other than a 32-bit float."},writeFloatLE:{"!type":"fn(value: number, offset: number, noAssert?: bool) -> number","!url":"https://nodejs.org/api/buffer.html#buffer_buf_writefloatle_value_offset_noassert","!doc":"Writes value to the Buffer at the specified offset with specified endian format (writeFloatBE() writes big endian, writeFloatLE() writes little endian). Behavior is unspecified if value is anything other than a 32-bit float."},writeInt8:{"!type":"fn(value: number, offset: number, noAssert?: bool) -> number","!url":"https://nodejs.org/api/buffer.html#buffer_buf_writeint8_value_offset_noassert","!doc":"Writes value to the Buffer at the specified offset. The value must be a valid signed 8-bit integer."},writeInt16BE:{"!type":"fn(value: number, offset: number, noAssert?: bool) -> number","!url":"https://nodejs.org/api/buffer.html#buffer_buf_writeint16be_value_offset_noassert","!doc":"Writes value to the Buffer at the specified offset with specified endian format (writeInt16BE() writes big endian, writeInt16LE() writes little endian). The value must be a valid signed 16-bit integer."},writeInt16LE:{"!type":"fn(value: number, offset: number, noAssert?: bool) -> number","!url":"https://nodejs.org/api/buffer.html#buffer_buf_writeint16le_value_offset_noassert","!doc":"Writes value to the Buffer at the specified offset with specified endian format (writeInt16BE() writes big endian, writeInt16LE() writes little endian). The value must be a valid signed 16-bit integer."},writeInt32BE:{"!type":"fn(value: number, offset: number, noAssert?: bool) -> number","!url":"https://nodejs.org/api/buffer.html#buffer_buf_writeint32be_value_offset_noassert","!doc":"Writes value to the Buffer at the specified offset with specified endian format (writeInt32BE() writes big endian, writeInt32LE() writes little endian). The value must be a valid signed 32-bit integer."},writeInt32LE:{"!type":"fn(value: number, offset: number, noAssert?: bool) -> number","!url":"https://nodejs.org/api/buffer.html#buffer_buf_writeint32le_value_offset_noassert","!doc":"Writes value to the Buffer at the specified offset with specified endian format (writeInt32BE() writes big endian, writeInt32LE() writes little endian). The value must be a valid signed 32-bit integer."},writeIntBE:{"!type":"fn(value: number, offset: number, byteLength: number, noAssert?: bool) -> number","!url":"https://nodejs.org/api/buffer.html#buffer_buf_writeintbe_value_offset_bytelength_noassert","!doc":"Writes value to the Buffer at the specified offset and byteLength. Supports up to 48 bits of accuracy. For example:"},writeIntLE:{"!type":"fn(value: number, offset: number, byteLength: number, noAssert?: bool) -> number","!url":"https://nodejs.org/api/buffer.html#buffer_buf_writeintle_value_offset_bytelength_noassert","!doc":"Writes value to the Buffer at the specified offset and byteLength. Supports up to 48 bits of accuracy. For example:"},writeUInt8:{"!type":"fn(value: number, offset: number, noAssert?: bool) -> number","!url":"https://nodejs.org/api/buffer.html#buffer_buf_writeuint8_value_offset_noassert","!doc":"Writes value to the Buffer at the specified offset. The value must be a valid unsigned 8-bit integer."},writeUInt16BE:{"!type":"fn(value: number, offset: number, noAssert?: bool) -> number","!url":"https://nodejs.org/api/buffer.html#buffer_buf_writeuint16be_value_offset_noassert","!doc":"Writes value to the Buffer at the specified offset with specified endian format (writeUInt16BE() writes big endian, writeUInt16LE() writes little endian). The value must be a valid unsigned 16-bit integer."},writeUInt16LE:{"!type":"fn(value: number, offset: number, noAssert?: bool) -> number","!url":"https://nodejs.org/api/buffer.html#buffer_buf_writeuint16le_value_offset_noassert","!doc":"Writes value to the Buffer at the specified offset with specified endian format (writeUInt16BE() writes big endian, writeUInt16LE() writes little endian). The value must be a valid unsigned 16-bit integer."},writeUInt32BE:{"!type":"fn(value: number, offset: number, noAssert?: bool) -> number","!url":"https://nodejs.org/api/buffer.html#buffer_buf_writeuint32be_value_offset_noassert","!doc":"Writes value to the Buffer at the specified offset with specified endian format (writeUInt32BE() writes big endian, writeUInt32LE() writes little endian). The value must be a valid unsigned 32-bit integer."},writeUInt32LE:{"!type":"fn(value: number, offset: number, noAssert?: bool) -> number","!url":"https://nodejs.org/api/buffer.html#buffer_buf_writeuint32le_value_offset_noassert","!doc":"Writes value to the Buffer at the specified offset with specified endian format (writeUInt32BE() writes big endian, writeUInt32LE() writes little endian). The value must be a valid unsigned 32-bit integer."},writeUIntBE:{"!type":"fn(value: number, offset: number, byteLength: number, noAssert?: bool) -> number","!url":"https://nodejs.org/api/buffer.html#buffer_buf_writeuintbe_value_offset_bytelength_noassert","!doc":"Writes value to the Buffer at the specified offset and byteLength. Supports up to 48 bits of accuracy. For example:"},writeUIntLE:{"!type":"fn(value: number, offset: number, byteLength: number, noAssert?: bool) -> number","!url":"https://nodejs.org/api/buffer.html#buffer_buf_writeuintle_value_offset_bytelength_noassert","!doc":"Writes value to the Buffer at the specified offset and byteLength. Supports up to 48 bits of accuracy. For example:"}}}}
}),function(e){return"object"==typeof exports&&"object"==typeof module?e(require("../lib/infer"),require("../lib/tern"),require("./modules")):"function"==typeof define&&define.amd?define("tern/plugin/requirejs",["../lib/infer","../lib/tern","./modules"],e):void e(tern,tern)}(function(e,t){"use strict";function n(t){return t.require||(t.require=new e.Fn("require",e.ANull,[e.cx().str],["module"],new e.AVal),t.require.computeRet=function(n,r,o){return o.length&&"Literal"==o[0].type&&"string"==typeof o[0].value?s(d.join(d.dirname(t.currentFile),o[0].value),t):e.ANull}),t.require}function r(t,n){var r=new e.Obj(e.cx().definitions.requirejs.module,"module"),o=r.defProp("exports");return o.propagate(a(t.currentFile,t)),n.propagate(o,u),r}function o(t){var n=new e.Obj(!0,"exports");return a(t.currentFile,t).addType(n,u),n}function s(e,t){var n=e!==t.currentFile?t.currentFile:void 0,t=t.server.mod.modules.resolveModule(e,n);return t}function a(e,t){return t.server.mod.modules.get(e)}function i(t,a,i,l){function c(e){return"require"==e?n(f):"exports"==e?u||(u=o(f)):"module"==e?h||(h=r(f,u||(u=o(f)))):s(e,f)}var p,u,h,f=t.mod.requireJS,m=[];if(i&&a.length>1){var g=i[2==a.length?0:1],b=d.relative(t.projectDir,d.dirname(g.sourceFile.name));if("Literal"==g.type&&"string"==typeof g.value)g.required=c(d.join(b,g.value),f),m.push(g.required);else if("ArrayExpression"==g.type)for(var y=0;y<g.elements.length;++y){var v=g.elements[y];v&&"Literal"==v.type&&"string"==typeof v.value&&(v.required=c(d.join(b,v.value),f),m.push(v.required))}}else i&&1==a.length&&/FunctionExpression/.test(i[0].type)&&i[0].params.length&&(m.push(c("require",f),c("exports",f),c("module",f)),p=a[0]);return p||(p=a[Math.min(a.length-1,2)],p.isEmpty()||p.getFunctionType()||(p=null)),p?(p.propagate(new e.IsCallee(e.ANull,m,null,l||e.ANull)),l&&(l.originNode=p.originNode)):l&&a[0].propagate(l),e.ANull}function l(e){switch(e.type){case"ArrayExpression":return e.elements.map(l);case"Literal":return e.value;case"ObjectExpression":var t={};return e.properties.forEach(function(e){var n=e.key.name||e.key.value;t[n]=l(e.value)}),t}}function c(t){var n=t.sourceFile.ast;if(!n){var r=e.cx().parent;if(n=r.fileMap[t.sourceFile.name],!n)return;n=n.ast}return n}function p(t){if("Literal"==t.type&&"string"==typeof t.value){var n=e.findExpressionAround(c(t),null,t.end,null,"CallExpression");if(n){var r=n.node;if("Identifier"==r.callee.type&&("define"==r.callee.name||"require"==r.callee.name||"requirejs"==r.callee.name)&&!(r.arguments.length<1||"ArrayExpression"!=r.arguments[0].type&&(r.arguments.length<2||"ArrayExpression"!=r.arguments[1].type)))return t.value}}}var u=50,d={dirname:function(e){var t=e.lastIndexOf("/");return-1==t?"":e.slice(0,t)},relative:function(e,t){return 0==t.indexOf(e)?t.slice(e.length):t},join:function(e,t){return t?t:e&&t?e+"/"+t:(e||"")+(t||"")}};e.registerFunction("requirejs_define",function(t,n,r){if(!n.length)return e.ANull;var o=e.cx().parent,s=o.mod.requireJS;return i(e.cx().parent,n,r,a(s.currentFile,s))}),e.registerFunction("requirejs_require",function(t,n,r){return n.length?i(e.cx().parent,n,r):e.ANull}),e.registerFunction("requirejs_config",function(t,n,r){var o=e.cx().parent,s=o&&o.mod.requireJS;if(s&&r&&r.length&&"ObjectExpression"==r[0].type){var a=l(r[0]);for(var i in a)if(a.hasOwnProperty(i)){var c=a[i],p=s.options[i];if(p){if("paths"==i)for(var u in c)c.hasOwnProperty(u)&&!s.options.paths[u]&&(s.options.paths[u]=c[u])}else s.options[i]=c}}return e.ANull}),t.registerPlugin("requirejs",function(e,t){e.loadPlugin("modules"),e.mod.requireJS={interfaces:Object.create(null),options:t||{},currentFile:null,server:e},e.on("beforeLoad",function(e){this.mod.requireJS.currentFile=e.name}),e.on("reset",function(){this.mod.requireJS.require=null}),e.mod.modules.modNameTests.push(p),e.mod.modules.completableTypes.Identifier=!0,e.mod.modules.completableTypes.Literal=!0,e.addDefs(h)});var h={"!name":"requirejs","!define":{module:{id:"string",uri:"string",config:"fn() -> ?"},config:{"!url":"http://requirejs.org/docs/api.html#config",baseUrl:{"!type":"string","!doc":"the root path to use for all module lookups","!url":"http://requirejs.org/docs/api.html#config-baseUrl"},paths:{"!type":"?","!doc":"path mappings for module names not found directly under baseUrl. The path settings are assumed to be relative to baseUrl, unless the paths setting starts with a '/' or has a URL protocol in it ('like http:').","!url":"http://requirejs.org/docs/api.html#config-paths"},shim:{"!type":"?","!doc":"Configure the dependencies, exports, and custom initialization for older, traditional 'browser globals' scripts that do not use define() to declare the dependencies and set a module value.","!url":"http://requirejs.org/docs/api.html#config-shim"},map:{"!type":"?","!doc":"For the given module prefix, instead of loading the module with the given ID, substitute a different module ID.","!url":"http://requirejs.org/docs/api.html#config-map"},config:{"!type":"?","!doc":"There is a common need to pass configuration info to a module. That configuration info is usually known as part of the application, and there needs to be a way to pass that down to a module. In RequireJS, that is done with the config option for requirejs.config(). Modules can then read that info by asking for the special dependency 'module' and calling module.config().","!url":"http://requirejs.org/docs/api.html#config-moduleconfig"},packages:{"!type":"?","!doc":"configures loading modules from CommonJS packages. See the packages topic for more information.","!url":"http://requirejs.org/docs/api.html#config-packages"},nodeIdCompat:{"!type":"?","!doc":"Node treats module ID example.js and example the same. By default these are two different IDs in RequireJS. If you end up using modules installed from npm, then you may need to set this config value to true to avoid resolution issues.","!url":"http://requirejs.org/docs/api.html#config-nodeIdCompat"},waitSeconds:{"!type":"number","!doc":"The number of seconds to wait before giving up on loading a script. Setting it to 0 disables the timeout. The default is 7 seconds.","!url":"http://requirejs.org/docs/api.html#config-waitSeconds"},context:{"!type":"number","!doc":"A name to give to a loading context. This allows require.js to load multiple versions of modules in a page, as long as each top-level require call specifies a unique context string. To use it correctly, see the Multiversion Support section.","!url":"http://requirejs.org/docs/api.html#config-context"},deps:{"!type":"?","!doc":"An array of dependencies to load. Useful when require is defined as a config object before require.js is loaded, and you want to specify dependencies to load as soon as require() is defined. Using deps is just like doing a require([]) call, but done as soon as the loader has processed the configuration. It does not block any other require() calls from starting their requests for modules, it is just a way to specify some modules to load asynchronously as part of a config block.","!url":"http://requirejs.org/docs/api.html#config-deps"},callback:{"!type":"fn()","!doc":"A function to execute after deps have been loaded. Useful when require is defined as a config object before require.js is loaded, and you want to specify a function to require after the configuration's deps array has been loaded.","!url":"http://requirejs.org/docs/api.html#config-callback"},enforceDefine:{"!type":"bool","!doc":"If set to true, an error will be thrown if a script loads that does not call define() or have a shim exports string value that can be checked. See Catching load failures in IE for more information.","!url":"http://requirejs.org/docs/api.html#config-enforceDefine"},xhtml:{"!type":"bool","!doc":"If set to true, document.createElementNS() will be used to create script elements.","!url":"http://requirejs.org/docs/api.html#config-xhtml"},urlArgs:{"!type":"string","!doc":"Extra query string arguments appended to URLs that RequireJS uses to fetch resources. Most useful to cache bust when the browser or server is not configured correctly.","!url":"http://requirejs.org/docs/api.html#config-urlArgs"},scriptType:{"!type":"string","!doc":"Specify the value for the type='' attribute used for script tags inserted into the document by RequireJS. Default is 'text/javascript'. To use Firefox's JavaScript 1.8 features, use 'text/javascript;version=1.8'.","!url":"http://requirejs.org/docs/api.html#config-scriptType"},skipDataMain:{"!type":"bool","!doc":"Introduced in RequireJS 2.1.9: If set to true, skips the data-main attribute scanning done to start module loading. Useful if RequireJS is embedded in a utility library that may interact with other RequireJS library on the page, and the embedded version should not do data-main loading.","!url":"http://requirejs.org/docs/api.html#config-skipDataMain"}},RequireJSError:{prototype:{"!proto":"Error.prototype",requireType:{"!type":"string","!doc":"A string value with a general classification, like 'timeout', 'nodefine', 'scripterror'.","!url":"http://requirejs.org/docs/api.html#errors"},requireModules:{"!type":"[string]","!doc":"An array of module names/URLs that timed out.","!url":"http://requirejs.org/docs/api.html#errors"}}}},requirejs:{"!type":"fn(deps: [string], callback: fn(), errback?: fn(err: +RequireJSError)) -> !custom:requirejs_require",onError:{"!type":"fn(err: +RequireJSError)","!doc":"To detect errors that are not caught by local errbacks, you can override requirejs.onError()","!url":"http://requirejs.org/docs/api.html#requirejsonerror"},load:{"!type":"fn(context: ?, moduleName: string, url: string)"},config:"fn(config: config) -> !custom:requirejs_config",version:"string",isBrowser:"bool"},require:"requirejs",define:{"!type":"fn(deps: [string], callback: fn()) -> !custom:requirejs_define",amd:{jQuery:"bool"}}}}),function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define("estraverse/estraverse",[],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.estraverse=e()}}(function(){return function e(t,n,r){function o(a,i){if(!n[a]){if(!t[a]){var l="function"==typeof require&&require;if(!i&&l)return l(a,!0);if(s)return s(a,!0);var c=new Error("Cannot find module '"+a+"'");throw c.code="MODULE_NOT_FOUND",c}var p=n[a]={exports:{}};t[a][0].call(p.exports,function(e){var n=t[a][1][e];return o(n?n:e)},p,p.exports,e,t,n,r)}return n[a].exports}for(var s="function"==typeof require&&require,a=0;a<r.length;a++)o(r[a]);return o}({1:[function(e,t,n){!function r(t){"use strict";function n(){}function o(e){var t,n,r={};for(t in e)e.hasOwnProperty(t)&&(n=e[t],r[t]="object"==typeof n&&null!==n?o(n):n);return r}function s(e){var t,n={};for(t in e)e.hasOwnProperty(t)&&(n[t]=e[t]);return n}function a(e,t){var n,r,o,s;for(r=e.length,o=0;r;)n=r>>>1,s=o+n,t(e[s])?r=n:(o=s+1,r-=n+1);return o}function i(e,t){var n,r,o,s;for(r=e.length,o=0;r;)n=r>>>1,s=o+n,t(e[s])?(o=s+1,r-=n+1):r=n;return o}function l(e,t){var n,r,o,s=w(t);for(r=0,o=s.length;o>r;r+=1)n=s[r],e[n]=t[n];return e}function c(e,t){this.parent=e,this.key=t}function p(e,t,n,r){this.node=e,this.path=t,this.wrap=n,this.ref=r}function u(){}function d(e){return null==e?!1:"object"==typeof e&&"string"==typeof e.type}function h(e,t){return(e===y.ObjectExpression||e===y.ObjectPattern)&&"properties"===t}function f(e,t){var n=new u;return n.traverse(e,t)}function m(e,t){var n=new u;return n.replace(e,t)}function g(e,t){var n;return n=a(t,function(t){return t.range[0]>e.range[0]}),e.extendedRange=[e.range[0],e.range[1]],n!==t.length&&(e.extendedRange[1]=t[n].range[0]),n-=1,n>=0&&(e.extendedRange[0]=t[n].range[1]),e}function b(e,t,n){var r,s,a,i,l=[];if(!e.range)throw new Error("attachComments needs range information");if(!n.length){if(t.length){for(a=0,s=t.length;s>a;a+=1)r=o(t[a]),r.extendedRange=[0,e.range[0]],l.push(r);e.leadingComments=l}return e}for(a=0,s=t.length;s>a;a+=1)l.push(g(o(t[a]),n));return i=0,f(e,{enter:function(e){for(var t;i<l.length&&(t=l[i],!(t.extendedRange[1]>e.range[0]));)t.extendedRange[1]===e.range[0]?(e.leadingComments||(e.leadingComments=[]),e.leadingComments.push(t),l.splice(i,1)):i+=1;return i===l.length?x.Break:l[i].extendedRange[0]>e.range[1]?x.Skip:void 0}}),i=0,f(e,{leave:function(e){for(var t;i<l.length&&(t=l[i],!(e.range[1]<t.extendedRange[0]));)e.range[1]===t.extendedRange[0]?(e.trailingComments||(e.trailingComments=[]),e.trailingComments.push(t),l.splice(i,1)):i+=1;return i===l.length?x.Break:l[i].extendedRange[0]>e.range[1]?x.Skip:void 0}}),e}var y,v,x,_,S,w,k,E,j;return v=Array.isArray,v||(v=function(e){return"[object Array]"===Object.prototype.toString.call(e)}),n(s),n(i),S=Object.create||function(){function e(){}return function(t){return e.prototype=t,new e}}(),w=Object.keys||function(e){var t,n=[];for(t in e)n.push(t);return n},y={AssignmentExpression:"AssignmentExpression",AssignmentPattern:"AssignmentPattern",ArrayExpression:"ArrayExpression",ArrayPattern:"ArrayPattern",ArrowFunctionExpression:"ArrowFunctionExpression",AwaitExpression:"AwaitExpression",BlockStatement:"BlockStatement",BinaryExpression:"BinaryExpression",BreakStatement:"BreakStatement",CallExpression:"CallExpression",CatchClause:"CatchClause",ClassBody:"ClassBody",ClassDeclaration:"ClassDeclaration",ClassExpression:"ClassExpression",ComprehensionBlock:"ComprehensionBlock",ComprehensionExpression:"ComprehensionExpression",ConditionalExpression:"ConditionalExpression",ContinueStatement:"ContinueStatement",DebuggerStatement:"DebuggerStatement",DirectiveStatement:"DirectiveStatement",DoWhileStatement:"DoWhileStatement",EmptyStatement:"EmptyStatement",ExportAllDeclaration:"ExportAllDeclaration",ExportDefaultDeclaration:"ExportDefaultDeclaration",ExportNamedDeclaration:"ExportNamedDeclaration",ExportSpecifier:"ExportSpecifier",ExpressionStatement:"ExpressionStatement",ForStatement:"ForStatement",ForInStatement:"ForInStatement",ForOfStatement:"ForOfStatement",FunctionDeclaration:"FunctionDeclaration",FunctionExpression:"FunctionExpression",GeneratorExpression:"GeneratorExpression",Identifier:"Identifier",IfStatement:"IfStatement",ImportDeclaration:"ImportDeclaration",ImportDefaultSpecifier:"ImportDefaultSpecifier",ImportNamespaceSpecifier:"ImportNamespaceSpecifier",ImportSpecifier:"ImportSpecifier",Literal:"Literal",LabeledStatement:"LabeledStatement",LogicalExpression:"LogicalExpression",MemberExpression:"MemberExpression",MetaProperty:"MetaProperty",MethodDefinition:"MethodDefinition",ModuleSpecifier:"ModuleSpecifier",NewExpression:"NewExpression",ObjectExpression:"ObjectExpression",ObjectPattern:"ObjectPattern",Program:"Program",Property:"Property",RestElement:"RestElement",ReturnStatement:"ReturnStatement",SequenceExpression:"SequenceExpression",SpreadElement:"SpreadElement",Super:"Super",SwitchStatement:"SwitchStatement",SwitchCase:"SwitchCase",TaggedTemplateExpression:"TaggedTemplateExpression",TemplateElement:"TemplateElement",TemplateLiteral:"TemplateLiteral",ThisExpression:"ThisExpression",ThrowStatement:"ThrowStatement",TryStatement:"TryStatement",UnaryExpression:"UnaryExpression",UpdateExpression:"UpdateExpression",VariableDeclaration:"VariableDeclaration",VariableDeclarator:"VariableDeclarator",WhileStatement:"WhileStatement",WithStatement:"WithStatement",YieldExpression:"YieldExpression"},_={AssignmentExpression:["left","right"],AssignmentPattern:["left","right"],ArrayExpression:["elements"],ArrayPattern:["elements"],ArrowFunctionExpression:["params","body"],AwaitExpression:["argument"],BlockStatement:["body"],BinaryExpression:["left","right"],BreakStatement:["label"],CallExpression:["callee","arguments"],CatchClause:["param","body"],ClassBody:["body"],ClassDeclaration:["id","superClass","body"],ClassExpression:["id","superClass","body"],ComprehensionBlock:["left","right"],ComprehensionExpression:["blocks","filter","body"],ConditionalExpression:["test","consequent","alternate"],ContinueStatement:["label"],DebuggerStatement:[],DirectiveStatement:[],DoWhileStatement:["body","test"],EmptyStatement:[],ExportAllDeclaration:["source"],ExportDefaultDeclaration:["declaration"],ExportNamedDeclaration:["declaration","specifiers","source"],ExportSpecifier:["local","exported"],ExpressionStatement:["expression"],ForStatement:["init","test","update","body"],ForInStatement:["left","right","body"],ForOfStatement:["left","right","body"],FunctionDeclaration:["id","params","body"],FunctionExpression:["id","params","body"],GeneratorExpression:["blocks","filter","body"],Identifier:[],IfStatement:["test","consequent","alternate"],ImportDeclaration:["specifiers","source"],ImportDefaultSpecifier:["local"],ImportNamespaceSpecifier:["local"],ImportSpecifier:["imported","local"],Literal:[],LabeledStatement:["label","body"],LogicalExpression:["left","right"],MemberExpression:["object","property"],MetaProperty:["meta","property"],MethodDefinition:["key","value"],ModuleSpecifier:[],NewExpression:["callee","arguments"],ObjectExpression:["properties"],ObjectPattern:["properties"],Program:["body"],Property:["key","value"],RestElement:["argument"],ReturnStatement:["argument"],SequenceExpression:["expressions"],SpreadElement:["argument"],Super:[],SwitchStatement:["discriminant","cases"],SwitchCase:["test","consequent"],TaggedTemplateExpression:["tag","quasi"],TemplateElement:[],TemplateLiteral:["quasis","expressions"],ThisExpression:[],ThrowStatement:["argument"],TryStatement:["block","handler","finalizer"],UnaryExpression:["argument"],UpdateExpression:["argument"],VariableDeclaration:["declarations"],VariableDeclarator:["id","init"],WhileStatement:["test","body"],WithStatement:["object","body"],YieldExpression:["argument"]},k={},E={},j={},x={Break:k,Skip:E,Remove:j},c.prototype.replace=function(e){this.parent[this.key]=e},c.prototype.remove=function(){return v(this.parent)?(this.parent.splice(this.key,1),!0):(this.replace(null),!1)},u.prototype.path=function(){function e(e,t){if(v(t))for(r=0,o=t.length;o>r;++r)e.push(t[r]);else e.push(t)}var t,n,r,o,s,a;if(!this.__current.path)return null;for(s=[],t=2,n=this.__leavelist.length;n>t;++t)a=this.__leavelist[t],e(s,a.path);return e(s,this.__current.path),s},u.prototype.type=function(){var e=this.current();return e.type||this.__current.wrap},u.prototype.parents=function(){var e,t,n;for(n=[],e=1,t=this.__leavelist.length;t>e;++e)n.push(this.__leavelist[e].node);return n},u.prototype.current=function(){return this.__current.node},u.prototype.__execute=function(e,t){var n,r;return r=void 0,n=this.__current,this.__current=t,this.__state=null,e&&(r=e.call(this,t.node,this.__leavelist[this.__leavelist.length-1].node)),this.__current=n,r},u.prototype.notify=function(e){this.__state=e},u.prototype.skip=function(){this.notify(E)},u.prototype["break"]=function(){this.notify(k)},u.prototype.remove=function(){this.notify(j)},u.prototype.__initialize=function(e,t){this.visitor=t,this.root=e,this.__worklist=[],this.__leavelist=[],this.__current=null,this.__state=null,this.__fallback=null,"iteration"===t.fallback?this.__fallback=w:"function"==typeof t.fallback&&(this.__fallback=t.fallback),this.__keys=_,t.keys&&(this.__keys=l(S(this.__keys),t.keys))},u.prototype.traverse=function(e,t){var n,r,o,s,a,i,l,c,u,f,m,g;for(this.__initialize(e,t),g={},n=this.__worklist,r=this.__leavelist,n.push(new p(e,null,null,null)),r.push(new p(null,null,null,null));n.length;)if(o=n.pop(),o!==g){if(o.node){if(i=this.__execute(t.enter,o),this.__state===k||i===k)return;if(n.push(g),r.push(o),this.__state===E||i===E)continue;if(s=o.node,a=s.type||o.wrap,f=this.__keys[a],!f){if(!this.__fallback)throw new Error("Unknown node type "+a+".");f=this.__fallback(s)}for(c=f.length;(c-=1)>=0;)if(l=f[c],m=s[l])if(v(m)){for(u=m.length;(u-=1)>=0;)if(m[u]){if(h(a,f[c]))o=new p(m[u],[l,u],"Property",null);else{if(!d(m[u]))continue;o=new p(m[u],[l,u],null,null)}n.push(o)}}else d(m)&&n.push(new p(m,l,null,null))}}else if(o=r.pop(),i=this.__execute(t.leave,o),this.__state===k||i===k)return},u.prototype.replace=function(e,t){function n(e){var t,n,o,s;if(e.ref.remove())for(n=e.ref.key,s=e.ref.parent,t=r.length;t--;)if(o=r[t],o.ref&&o.ref.parent===s){if(o.ref.key<n)break;--o.ref.key}}var r,o,s,a,i,l,u,f,m,g,b,y,x;for(this.__initialize(e,t),b={},r=this.__worklist,o=this.__leavelist,y={root:e},l=new p(e,null,null,new c(y,"root")),r.push(l),o.push(l);r.length;)if(l=r.pop(),l!==b){if(i=this.__execute(t.enter,l),void 0!==i&&i!==k&&i!==E&&i!==j&&(l.ref.replace(i),l.node=i),(this.__state===j||i===j)&&(n(l),l.node=null),this.__state===k||i===k)return y.root;if(s=l.node,s&&(r.push(b),o.push(l),this.__state!==E&&i!==E)){if(a=s.type||l.wrap,m=this.__keys[a],!m){if(!this.__fallback)throw new Error("Unknown node type "+a+".");m=this.__fallback(s)}for(u=m.length;(u-=1)>=0;)if(x=m[u],g=s[x])if(v(g)){for(f=g.length;(f-=1)>=0;)if(g[f]){if(h(a,m[u]))l=new p(g[f],[x,f],"Property",new c(g,f));else{if(!d(g[f]))continue;l=new p(g[f],[x,f],null,new c(g,f))}r.push(l)}}else d(g)&&r.push(new p(g,x,null,new c(s,x)))}}else if(l=o.pop(),i=this.__execute(t.leave,l),void 0!==i&&i!==k&&i!==E&&i!==j&&l.ref.replace(i),(this.__state===j||i===j)&&n(l),this.__state===k||i===k)return y.root;return y.root},t.version=e("./package.json").version,t.Syntax=y,t.traverse=f,t.replace=m,t.attachComments=b,t.VisitorKeys=_,t.VisitorOption=x,t.Controller=u,t.cloneEnvironment=function(){return r({})},t}(n)},{"./package.json":2}],2:[function(e,t){t.exports={name:"estraverse",description:"ECMAScript JS AST traversal functions",homepage:"https://github.com/estools/estraverse",main:"estraverse.js",version:"4.2.0",engines:{node:">=0.10.0"},maintainers:[{name:"Yusuke Suzuki",email:"utatane.tea@gmail.com",web:"http://github.com/Constellation"}],repository:{type:"git",url:"http://github.com/estools/estraverse.git"},devDependencies:{"babel-preset-es2015":"^6.3.13","babel-register":"^6.3.13",chai:"^2.1.1",espree:"^1.11.0",gulp:"^3.8.10","gulp-bump":"^0.2.2","gulp-filter":"^2.0.0","gulp-git":"^1.0.1","gulp-tag-version":"^1.2.1",jshint:"^2.5.6",mocha:"^2.1.0"},license:"BSD-2-Clause",scripts:{test:"npm run-script lint && npm run-script unit-test",lint:"jshint estraverse.js","unit-test":"mocha --compilers js:babel-register"}}},{}]},{},[1])(1)}),define("eslint/conf/globals",[],function(){return{builtin:{Array:!1,ArrayBuffer:!1,Boolean:!1,constructor:!1,DataView:!1,Date:!1,decodeURI:!1,decodeURIComponent:!1,encodeURI:!1,encodeURIComponent:!1,Error:!1,escape:!1,eval:!1,EvalError:!1,Float32Array:!1,Float64Array:!1,Function:!1,hasOwnProperty:!1,Infinity:!1,Int16Array:!1,Int32Array:!1,Int8Array:!1,isFinite:!1,isNaN:!1,isPrototypeOf:!1,JSON:!1,Map:!1,Math:!1,NaN:!1,Number:!1,Object:!1,parseFloat:!1,parseInt:!1,Promise:!1,propertyIsEnumerable:!1,Proxy:!1,RangeError:!1,ReferenceError:!1,Reflect:!1,RegExp:!1,Set:!1,String:!1,Symbol:!1,SyntaxError:!1,System:!1,toLocaleString:!1,toString:!1,TypeError:!1,Uint16Array:!1,Uint32Array:!1,Uint8Array:!1,Uint8ClampedArray:!1,undefined:!1,unescape:!1,URIError:!1,valueOf:!1,WeakMap:!1,WeakSet:!1},es5:{Array:!1,Boolean:!1,constructor:!1,Date:!1,decodeURI:!1,decodeURIComponent:!1,encodeURI:!1,encodeURIComponent:!1,Error:!1,escape:!1,eval:!1,EvalError:!1,Function:!1,hasOwnProperty:!1,Infinity:!1,isFinite:!1,isNaN:!1,isPrototypeOf:!1,JSON:!1,Math:!1,NaN:!1,Number:!1,Object:!1,parseFloat:!1,parseInt:!1,propertyIsEnumerable:!1,RangeError:!1,ReferenceError:!1,RegExp:!1,String:!1,SyntaxError:!1,toLocaleString:!1,toString:!1,TypeError:!1,undefined:!1,unescape:!1,URIError:!1,valueOf:!1},es6:{Array:!1,ArrayBuffer:!1,Boolean:!1,constructor:!1,DataView:!1,Date:!1,decodeURI:!1,decodeURIComponent:!1,encodeURI:!1,encodeURIComponent:!1,Error:!1,escape:!1,eval:!1,EvalError:!1,Float32Array:!1,Float64Array:!1,Function:!1,hasOwnProperty:!1,Infinity:!1,Int16Array:!1,Int32Array:!1,Int8Array:!1,isFinite:!1,isNaN:!1,isPrototypeOf:!1,JSON:!1,Map:!1,Math:!1,NaN:!1,Number:!1,Object:!1,parseFloat:!1,parseInt:!1,Promise:!1,propertyIsEnumerable:!1,Proxy:!1,RangeError:!1,ReferenceError:!1,Reflect:!1,RegExp:!1,Set:!1,String:!1,Symbol:!1,SyntaxError:!1,System:!1,toLocaleString:!1,toString:!1,TypeError:!1,Uint16Array:!1,Uint32Array:!1,Uint8Array:!1,Uint8ClampedArray:!1,undefined:!1,unescape:!1,URIError:!1,valueOf:!1,WeakMap:!1,WeakSet:!1},browser:{addEventListener:!1,alert:!1,AnalyserNode:!1,Animation:!1,AnimationEffectReadOnly:!1,AnimationEffectTiming:!1,AnimationEffectTimingReadOnly:!1,AnimationEvent:!1,AnimationPlaybackEvent:!1,AnimationTimeline:!1,applicationCache:!1,ApplicationCache:!1,ApplicationCacheErrorEvent:!1,atob:!1,Attr:!1,Audio:!1,AudioBuffer:!1,AudioBufferSourceNode:!1,AudioContext:!1,AudioDestinationNode:!1,AudioListener:!1,AudioNode:!1,AudioParam:!1,AudioProcessingEvent:!1,AutocompleteErrorEvent:!1,BarProp:!1,BatteryManager:!1,BeforeUnloadEvent:!1,BiquadFilterNode:!1,Blob:!1,blur:!1,btoa:!1,Cache:!1,caches:!1,CacheStorage:!1,cancelAnimationFrame:!1,CanvasGradient:!1,CanvasPattern:!1,CanvasRenderingContext2D:!1,CDATASection:!1,ChannelMergerNode:!1,ChannelSplitterNode:!1,CharacterData:!1,clearInterval:!1,clearTimeout:!1,clientInformation:!1,ClientRect:!1,ClientRectList:!1,ClipboardEvent:!1,close:!1,closed:!1,CloseEvent:!1,Comment:!1,CompositionEvent:!1,confirm:!1,console:!1,ConvolverNode:!1,Credential:!1,CredentialsContainer:!1,crypto:!1,Crypto:!1,CryptoKey:!1,CSS:!1,CSSAnimation:!1,CSSFontFaceRule:!1,CSSImportRule:!1,CSSKeyframeRule:!1,CSSKeyframesRule:!1,CSSMediaRule:!1,CSSPageRule:!1,CSSRule:!1,CSSRuleList:!1,CSSStyleDeclaration:!1,CSSStyleRule:!1,CSSStyleSheet:!1,CSSSupportsRule:!1,CSSTransition:!1,CSSUnknownRule:!1,CSSViewportRule:!1,CustomEvent:!1,DataTransfer:!1,DataTransferItem:!1,DataTransferItemList:!1,Debug:!1,defaultStatus:!1,defaultstatus:!1,DelayNode:!1,DeviceMotionEvent:!1,DeviceOrientationEvent:!1,devicePixelRatio:!1,dispatchEvent:!1,document:!1,Document:!1,DocumentFragment:!1,DocumentTimeline:!1,DocumentType:!1,DOMError:!1,DOMException:!1,DOMImplementation:!1,DOMParser:!1,DOMSettableTokenList:!1,DOMStringList:!1,DOMStringMap:!1,DOMTokenList:!1,DragEvent:!1,DynamicsCompressorNode:!1,Element:!1,ElementTimeControl:!1,ErrorEvent:!1,event:!1,Event:!1,EventSource:!1,EventTarget:!1,external:!1,FederatedCredential:!1,fetch:!1,File:!1,FileError:!1,FileList:!1,FileReader:!1,find:!1,focus:!1,FocusEvent:!1,FontFace:!1,FormData:!1,frameElement:!1,frames:!1,GainNode:!1,Gamepad:!1,GamepadButton:!1,GamepadEvent:!1,getComputedStyle:!1,getSelection:!1,HashChangeEvent:!1,Headers:!1,history:!1,History:!1,HTMLAllCollection:!1,HTMLAnchorElement:!1,HTMLAppletElement:!1,HTMLAreaElement:!1,HTMLAudioElement:!1,HTMLBaseElement:!1,HTMLBlockquoteElement:!1,HTMLBodyElement:!1,HTMLBRElement:!1,HTMLButtonElement:!1,HTMLCanvasElement:!1,HTMLCollection:!1,HTMLContentElement:!1,HTMLDataListElement:!1,HTMLDetailsElement:!1,HTMLDialogElement:!1,HTMLDirectoryElement:!1,HTMLDivElement:!1,HTMLDListElement:!1,HTMLDocument:!1,HTMLElement:!1,HTMLEmbedElement:!1,HTMLFieldSetElement:!1,HTMLFontElement:!1,HTMLFormControlsCollection:!1,HTMLFormElement:!1,HTMLFrameElement:!1,HTMLFrameSetElement:!1,HTMLHeadElement:!1,HTMLHeadingElement:!1,HTMLHRElement:!1,HTMLHtmlElement:!1,HTMLIFrameElement:!1,HTMLImageElement:!1,HTMLInputElement:!1,HTMLIsIndexElement:!1,HTMLKeygenElement:!1,HTMLLabelElement:!1,HTMLLayerElement:!1,HTMLLegendElement:!1,HTMLLIElement:!1,HTMLLinkElement:!1,HTMLMapElement:!1,HTMLMarqueeElement:!1,HTMLMediaElement:!1,HTMLMenuElement:!1,HTMLMetaElement:!1,HTMLMeterElement:!1,HTMLModElement:!1,HTMLObjectElement:!1,HTMLOListElement:!1,HTMLOptGroupElement:!1,HTMLOptionElement:!1,HTMLOptionsCollection:!1,HTMLOutputElement:!1,HTMLParagraphElement:!1,HTMLParamElement:!1,HTMLPictureElement:!1,HTMLPreElement:!1,HTMLProgressElement:!1,HTMLQuoteElement:!1,HTMLScriptElement:!1,HTMLSelectElement:!1,HTMLShadowElement:!1,HTMLSourceElement:!1,HTMLSpanElement:!1,HTMLStyleElement:!1,HTMLTableCaptionElement:!1,HTMLTableCellElement:!1,HTMLTableColElement:!1,HTMLTableElement:!1,HTMLTableRowElement:!1,HTMLTableSectionElement:!1,HTMLTemplateElement:!1,HTMLTextAreaElement:!1,HTMLTitleElement:!1,HTMLTrackElement:!1,HTMLUListElement:!1,HTMLUnknownElement:!1,HTMLVideoElement:!1,IDBCursor:!1,IDBCursorWithValue:!1,IDBDatabase:!1,IDBEnvironment:!1,IDBFactory:!1,IDBIndex:!1,IDBKeyRange:!1,IDBObjectStore:!1,IDBOpenDBRequest:!1,IDBRequest:!1,IDBTransaction:!1,IDBVersionChangeEvent:!1,Image:!1,ImageBitmap:!1,ImageData:!1,indexedDB:!1,innerHeight:!1,innerWidth:!1,InputEvent:!1,InputMethodContext:!1,IntersectionObserver:!1,IntersectionObserverEntry:!1,Intl:!1,KeyboardEvent:!1,KeyframeEffect:!1,KeyframeEffectReadOnly:!1,length:!1,localStorage:!1,location:!1,Location:!1,locationbar:!1,matchMedia:!1,MediaElementAudioSourceNode:!1,MediaEncryptedEvent:!1,MediaError:!1,MediaKeyError:!1,MediaKeyEvent:!1,MediaKeyMessageEvent:!1,MediaKeys:!1,MediaKeySession:!1,MediaKeyStatusMap:!1,MediaKeySystemAccess:!1,MediaList:!1,MediaQueryList:!1,MediaQueryListEvent:!1,MediaSource:!1,MediaStream:!1,MediaStreamAudioDestinationNode:!1,MediaStreamAudioSourceNode:!1,MediaStreamEvent:!1,MediaStreamTrack:!1,menubar:!1,MessageChannel:!1,MessageEvent:!1,MessagePort:!1,MIDIAccess:!1,MIDIConnectionEvent:!1,MIDIInput:!1,MIDIInputMap:!1,MIDIMessageEvent:!1,MIDIOutput:!1,MIDIOutputMap:!1,MIDIPort:!1,MimeType:!1,MimeTypeArray:!1,MouseEvent:!1,moveBy:!1,moveTo:!1,MutationEvent:!1,MutationObserver:!1,MutationRecord:!1,name:!1,NamedNodeMap:!1,navigator:!1,Navigator:!1,Node:!1,NodeFilter:!1,NodeIterator:!1,NodeList:!1,Notification:!1,OfflineAudioCompletionEvent:!1,OfflineAudioContext:!1,offscreenBuffering:!1,onbeforeunload:!0,onblur:!0,onerror:!0,onfocus:!0,onload:!0,onresize:!0,onunload:!0,open:!1,openDatabase:!1,opener:!1,opera:!1,Option:!1,OscillatorNode:!1,outerHeight:!1,outerWidth:!1,PageTransitionEvent:!1,pageXOffset:!1,pageYOffset:!1,parent:!1,PasswordCredential:!1,Path2D:!1,performance:!1,Performance:!1,PerformanceEntry:!1,PerformanceMark:!1,PerformanceMeasure:!1,PerformanceNavigation:!1,PerformanceResourceTiming:!1,PerformanceTiming:!1,PeriodicWave:!1,Permissions:!1,PermissionStatus:!1,personalbar:!1,Plugin:!1,PluginArray:!1,PopStateEvent:!1,postMessage:!1,print:!1,ProcessingInstruction:!1,ProgressEvent:!1,prompt:!1,PushManager:!1,PushSubscription:!1,RadioNodeList:!1,Range:!1,ReadableByteStream:!1,ReadableStream:!1,removeEventListener:!1,Request:!1,requestAnimationFrame:!1,resizeBy:!1,resizeTo:!1,Response:!1,RTCIceCandidate:!1,RTCSessionDescription:!1,RTCPeerConnection:!1,screen:!1,Screen:!1,screenLeft:!1,ScreenOrientation:!1,screenTop:!1,screenX:!1,screenY:!1,ScriptProcessorNode:!1,scroll:!1,scrollbars:!1,scrollBy:!1,scrollTo:!1,scrollX:!1,scrollY:!1,SecurityPolicyViolationEvent:!1,Selection:!1,self:!1,ServiceWorker:!1,ServiceWorkerContainer:!1,ServiceWorkerRegistration:!1,sessionStorage:!1,setInterval:!1,setTimeout:!1,ShadowRoot:!1,SharedKeyframeList:!1,SharedWorker:!1,showModalDialog:!1,SiteBoundCredential:!1,speechSynthesis:!1,SpeechSynthesisEvent:!1,SpeechSynthesisUtterance:!1,status:!1,statusbar:!1,stop:!1,Storage:!1,StorageEvent:!1,styleMedia:!1,StyleSheet:!1,StyleSheetList:!1,SubtleCrypto:!1,SVGAElement:!1,SVGAltGlyphDefElement:!1,SVGAltGlyphElement:!1,SVGAltGlyphItemElement:!1,SVGAngle:!1,SVGAnimateColorElement:!1,SVGAnimatedAngle:!1,SVGAnimatedBoolean:!1,SVGAnimatedEnumeration:!1,SVGAnimatedInteger:!1,SVGAnimatedLength:!1,SVGAnimatedLengthList:!1,SVGAnimatedNumber:!1,SVGAnimatedNumberList:!1,SVGAnimatedPathData:!1,SVGAnimatedPoints:!1,SVGAnimatedPreserveAspectRatio:!1,SVGAnimatedRect:!1,SVGAnimatedString:!1,SVGAnimatedTransformList:!1,SVGAnimateElement:!1,SVGAnimateMotionElement:!1,SVGAnimateTransformElement:!1,SVGAnimationElement:!1,SVGCircleElement:!1,SVGClipPathElement:!1,SVGColor:!1,SVGColorProfileElement:!1,SVGColorProfileRule:!1,SVGComponentTransferFunctionElement:!1,SVGCSSRule:!1,SVGCursorElement:!1,SVGDefsElement:!1,SVGDescElement:!1,SVGDiscardElement:!1,SVGDocument:!1,SVGElement:!1,SVGElementInstance:!1,SVGElementInstanceList:!1,SVGEllipseElement:!1,SVGEvent:!1,SVGExternalResourcesRequired:!1,SVGFEBlendElement:!1,SVGFEColorMatrixElement:!1,SVGFEComponentTransferElement:!1,SVGFECompositeElement:!1,SVGFEConvolveMatrixElement:!1,SVGFEDiffuseLightingElement:!1,SVGFEDisplacementMapElement:!1,SVGFEDistantLightElement:!1,SVGFEDropShadowElement:!1,SVGFEFloodElement:!1,SVGFEFuncAElement:!1,SVGFEFuncBElement:!1,SVGFEFuncGElement:!1,SVGFEFuncRElement:!1,SVGFEGaussianBlurElement:!1,SVGFEImageElement:!1,SVGFEMergeElement:!1,SVGFEMergeNodeElement:!1,SVGFEMorphologyElement:!1,SVGFEOffsetElement:!1,SVGFEPointLightElement:!1,SVGFESpecularLightingElement:!1,SVGFESpotLightElement:!1,SVGFETileElement:!1,SVGFETurbulenceElement:!1,SVGFilterElement:!1,SVGFilterPrimitiveStandardAttributes:!1,SVGFitToViewBox:!1,SVGFontElement:!1,SVGFontFaceElement:!1,SVGFontFaceFormatElement:!1,SVGFontFaceNameElement:!1,SVGFontFaceSrcElement:!1,SVGFontFaceUriElement:!1,SVGForeignObjectElement:!1,SVGGElement:!1,SVGGeometryElement:!1,SVGGlyphElement:!1,SVGGlyphRefElement:!1,SVGGradientElement:!1,SVGGraphicsElement:!1,SVGHKernElement:!1,SVGICCColor:!1,SVGImageElement:!1,SVGLangSpace:!1,SVGLength:!1,SVGLengthList:!1,SVGLinearGradientElement:!1,SVGLineElement:!1,SVGLocatable:!1,SVGMarkerElement:!1,SVGMaskElement:!1,SVGMatrix:!1,SVGMetadataElement:!1,SVGMissingGlyphElement:!1,SVGMPathElement:!1,SVGNumber:!1,SVGNumberList:!1,SVGPaint:!1,SVGPathElement:!1,SVGPathSeg:!1,SVGPathSegArcAbs:!1,SVGPathSegArcRel:!1,SVGPathSegClosePath:!1,SVGPathSegCurvetoCubicAbs:!1,SVGPathSegCurvetoCubicRel:!1,SVGPathSegCurvetoCubicSmoothAbs:!1,SVGPathSegCurvetoCubicSmoothRel:!1,SVGPathSegCurvetoQuadraticAbs:!1,SVGPathSegCurvetoQuadraticRel:!1,SVGPathSegCurvetoQuadraticSmoothAbs:!1,SVGPathSegCurvetoQuadraticSmoothRel:!1,SVGPathSegLinetoAbs:!1,SVGPathSegLinetoHorizontalAbs:!1,SVGPathSegLinetoHorizontalRel:!1,SVGPathSegLinetoRel:!1,SVGPathSegLinetoVerticalAbs:!1,SVGPathSegLinetoVerticalRel:!1,SVGPathSegList:!1,SVGPathSegMovetoAbs:!1,SVGPathSegMovetoRel:!1,SVGPatternElement:!1,SVGPoint:!1,SVGPointList:!1,SVGPolygonElement:!1,SVGPolylineElement:!1,SVGPreserveAspectRatio:!1,SVGRadialGradientElement:!1,SVGRect:!1,SVGRectElement:!1,SVGRenderingIntent:!1,SVGScriptElement:!1,SVGSetElement:!1,SVGStopElement:!1,SVGStringList:!1,SVGStylable:!1,SVGStyleElement:!1,SVGSVGElement:!1,SVGSwitchElement:!1,SVGSymbolElement:!1,SVGTests:!1,SVGTextContentElement:!1,SVGTextElement:!1,SVGTextPathElement:!1,SVGTextPositioningElement:!1,SVGTitleElement:!1,SVGTransform:!1,SVGTransformable:!1,SVGTransformList:!1,SVGTRefElement:!1,SVGTSpanElement:!1,SVGUnitTypes:!1,SVGURIReference:!1,SVGUseElement:!1,SVGViewElement:!1,SVGViewSpec:!1,SVGVKernElement:!1,SVGZoomAndPan:!1,SVGZoomEvent:!1,Text:!1,TextDecoder:!1,TextEncoder:!1,TextEvent:!1,TextMetrics:!1,TextTrack:!1,TextTrackCue:!1,TextTrackCueList:!1,TextTrackList:!1,TimeEvent:!1,TimeRanges:!1,toolbar:!1,top:!1,Touch:!1,TouchEvent:!1,TouchList:!1,TrackEvent:!1,TransitionEvent:!1,TreeWalker:!1,UIEvent:!1,URL:!1,URLSearchParams:!1,ValidityState:!1,VTTCue:!1,WaveShaperNode:!1,WebGLActiveInfo:!1,WebGLBuffer:!1,WebGLContextEvent:!1,WebGLFramebuffer:!1,WebGLProgram:!1,WebGLRenderbuffer:!1,WebGLRenderingContext:!1,WebGLShader:!1,WebGLShaderPrecisionFormat:!1,WebGLTexture:!1,WebGLUniformLocation:!1,WebSocket:!1,WheelEvent:!1,window:!1,Window:!1,Worker:!1,XDomainRequest:!1,XMLDocument:!1,XMLHttpRequest:!1,XMLHttpRequestEventTarget:!1,XMLHttpRequestProgressEvent:!1,XMLHttpRequestUpload:!1,XMLSerializer:!1,XPathEvaluator:!1,XPathException:!1,XPathExpression:!1,XPathNamespace:!1,XPathNSResolver:!1,XPathResult:!1,XSLTProcessor:!1},worker:{applicationCache:!1,atob:!1,Blob:!1,BroadcastChannel:!1,btoa:!1,Cache:!1,caches:!1,clearInterval:!1,clearTimeout:!1,close:!0,console:!1,fetch:!1,FileReaderSync:!1,FormData:!1,Headers:!1,IDBCursor:!1,IDBCursorWithValue:!1,IDBDatabase:!1,IDBFactory:!1,IDBIndex:!1,IDBKeyRange:!1,IDBObjectStore:!1,IDBOpenDBRequest:!1,IDBRequest:!1,IDBTransaction:!1,IDBVersionChangeEvent:!1,ImageData:!1,importScripts:!0,indexedDB:!1,location:!1,MessageChannel:!1,MessagePort:!1,name:!1,navigator:!1,Notification:!1,onclose:!0,onconnect:!0,onerror:!0,onlanguagechange:!0,onmessage:!0,onoffline:!0,ononline:!0,onrejectionhandled:!0,onunhandledrejection:!0,performance:!1,Performance:!1,PerformanceEntry:!1,PerformanceMark:!1,PerformanceMeasure:!1,PerformanceNavigation:!1,PerformanceResourceTiming:!1,PerformanceTiming:!1,postMessage:!0,Promise:!1,Request:!1,Response:!1,self:!0,ServiceWorkerRegistration:!1,setInterval:!1,setTimeout:!1,TextDecoder:!1,TextEncoder:!1,URL:!1,URLSearchParams:!1,WebSocket:!1,Worker:!1,XMLHttpRequest:!1},node:{__dirname:!1,__filename:!1,arguments:!1,Buffer:!1,clearImmediate:!1,clearInterval:!1,clearTimeout:!1,console:!1,exports:!0,GLOBAL:!1,global:!1,Intl:!1,module:!1,process:!1,require:!1,root:!1,setImmediate:!1,setInterval:!1,setTimeout:!1},commonjs:{exports:!0,module:!1,require:!1,global:!1},amd:{define:!1,require:!1},mocha:{after:!1,afterEach:!1,before:!1,beforeEach:!1,context:!1,describe:!1,it:!1,mocha:!1,setup:!1,specify:!1,suite:!1,suiteSetup:!1,suiteTeardown:!1,teardown:!1,test:!1,xcontext:!1,xdescribe:!1,xit:!1,xspecify:!1},jasmine:{afterAll:!1,afterEach:!1,beforeAll:!1,beforeEach:!1,describe:!1,expect:!1,fail:!1,fdescribe:!1,fit:!1,it:!1,jasmine:!1,pending:!1,runs:!1,spyOn:!1,waits:!1,waitsFor:!1,xdescribe:!1,xit:!1},jest:{afterEach:!1,beforeEach:!1,check:!1,describe:!1,expect:!1,gen:!1,it:!1,fit:!1,jest:!1,pit:!1,require:!1,test:!1,xdescribe:!1,xit:!1},qunit:{asyncTest:!1,deepEqual:!1,equal:!1,expect:!1,module:!1,notDeepEqual:!1,notEqual:!1,notOk:!1,notPropEqual:!1,notStrictEqual:!1,ok:!1,propEqual:!1,QUnit:!1,raises:!1,start:!1,stop:!1,strictEqual:!1,test:!1,"throws":!1},phantomjs:{console:!0,exports:!0,phantom:!0,require:!0,WebPage:!0},couch:{emit:!1,exports:!1,getRow:!1,log:!1,module:!1,provides:!1,require:!1,respond:!1,send:!1,start:!1,sum:!1},rhino:{defineClass:!1,deserialize:!1,gc:!1,help:!1,importClass:!1,importPackage:!1,java:!1,load:!1,loadClass:!1,Packages:!1,print:!1,quit:!1,readFile:!1,readUrl:!1,runCommand:!1,seal:!1,serialize:!1,spawn:!1,sync:!1,toint32:!1,version:!1},nashorn:{__DIR__:!1,__FILE__:!1,__LINE__:!1,com:!1,edu:!1,exit:!1,Java:!1,java:!1,javafx:!1,JavaImporter:!1,javax:!1,JSAdapter:!1,load:!1,loadWithNewGlobal:!1,org:!1,Packages:!1,print:!1,quit:!1},wsh:{ActiveXObject:!0,Enumerator:!0,GetObject:!0,ScriptEngine:!0,ScriptEngineBuildVersion:!0,ScriptEngineMajorVersion:!0,ScriptEngineMinorVersion:!0,VBArray:!0,WScript:!0,WSH:!0,XDomainRequest:!0},jquery:{$:!1,jQuery:!1},yui:{Y:!1,YUI:!1,YUI_config:!1},shelljs:{cat:!1,cd:!1,chmod:!1,config:!1,cp:!1,dirs:!1,echo:!1,env:!1,error:!1,exec:!1,exit:!1,find:!1,grep:!1,ls:!1,ln:!1,mkdir:!1,mv:!1,popd:!1,pushd:!1,pwd:!1,rm:!1,sed:!1,target:!1,tempdir:!1,test:!1,which:!1},prototypejs:{$:!1,$$:!1,$A:!1,$break:!1,$continue:!1,$F:!1,$H:!1,$R:!1,$w:!1,Abstract:!1,Ajax:!1,Autocompleter:!1,Builder:!1,Class:!1,Control:!1,Draggable:!1,Draggables:!1,Droppables:!1,Effect:!1,Element:!1,Enumerable:!1,Event:!1,Field:!1,Form:!1,Hash:!1,Insertion:!1,ObjectRange:!1,PeriodicalExecuter:!1,Position:!1,Prototype:!1,Scriptaculous:!1,Selector:!1,Sortable:!1,SortableObserver:!1,Sound:!1,Template:!1,Toggle:!1,Try:!1},meteor:{$:!1,_:!1,Accounts:!1,AccountsClient:!1,AccountsServer:!1,AccountsCommon:!1,App:!1,Assets:!1,Blaze:!1,check:!1,Cordova:!1,DDP:!1,DDPServer:!1,DDPRateLimiter:!1,Deps:!1,EJSON:!1,Email:!1,HTTP:!1,Log:!1,Match:!1,Meteor:!1,Mongo:!1,MongoInternals:!1,Npm:!1,Package:!1,Plugin:!1,process:!1,Random:!1,ReactiveDict:!1,ReactiveVar:!1,Router:!1,ServiceConfiguration:!1,Session:!1,share:!1,Spacebars:!1,Template:!1,Tinytest:!1,Tracker:!1,UI:!1,Utils:!1,WebApp:!1,WebAppInternals:!1},mongo:{_isWindows:!1,_rand:!1,BulkWriteResult:!1,cat:!1,cd:!1,connect:!1,db:!1,getHostName:!1,getMemInfo:!1,hostname:!1,ISODate:!1,listFiles:!1,load:!1,ls:!1,md5sumFile:!1,mkdir:!1,Mongo:!1,NumberInt:!1,NumberLong:!1,ObjectId:!1,PlanCache:!1,print:!1,printjson:!1,pwd:!1,quit:!1,removeFile:!1,rs:!1,sh:!1,UUID:!1,version:!1,WriteResult:!1},applescript:{$:!1,Application:!1,Automation:!1,console:!1,delay:!1,Library:!1,ObjC:!1,ObjectSpecifier:!1,Path:!1,Progress:!1,Ref:!1},serviceworker:{caches:!1,Cache:!1,CacheStorage:!1,Client:!1,clients:!1,Clients:!1,ExtendableEvent:!1,ExtendableMessageEvent:!1,FetchEvent:!1,importScripts:!1,registration:!1,self:!1,ServiceWorker:!1,ServiceWorkerContainer:!1,ServiceWorkerGlobalScope:!1,ServiceWorkerMessageEvent:!1,ServiceWorkerRegistration:!1,skipWaiting:!1,WindowClient:!1},atomtest:{advanceClock:!1,fakeClearInterval:!1,fakeClearTimeout:!1,fakeSetInterval:!1,fakeSetTimeout:!1,resetTimeouts:!1,waitsForPromise:!1},embertest:{andThen:!1,click:!1,currentPath:!1,currentRouteName:!1,currentURL:!1,fillIn:!1,find:!1,findWithAssert:!1,keyEvent:!1,pauseTest:!1,triggerEvent:!1,visit:!1},protractor:{$:!1,$$:!1,browser:!1,By:!1,by:!1,DartObject:!1,element:!1,protractor:!1},"shared-node-browser":{clearInterval:!1,clearTimeout:!1,console:!1,setInterval:!1,setTimeout:!1},webextensions:{browser:!1,chrome:!1,opr:!1},greasemonkey:{GM_addStyle:!1,GM_deleteValue:!1,GM_getResourceText:!1,GM_getResourceURL:!1,GM_getValue:!1,GM_info:!1,GM_listValues:!1,GM_log:!1,GM_openInTab:!1,GM_registerMenuCommand:!1,GM_setClipboard:!1,GM_setValue:!1,GM_xmlhttpRequest:!1,unsafeWindow:!1}}
}),define("eslint/conf/environments",["./globals"],function(e){var t={builtin:e.es5,browser:{globals:e.browser},node:{globals:e.node,parserOptions:{ecmaFeatures:{globalReturn:!0}}},commonjs:{globals:e.commonjs,parserOptions:{ecmaFeatures:{globalReturn:!0}}},"shared-node-browser":{globals:e["shared-node-browser"]},worker:{globals:e.worker},amd:{globals:e.amd},mocha:{globals:e.mocha},jasmine:{globals:e.jasmine},jest:{globals:e.jest},phantomjs:{globals:e.phantomjs},jquery:{globals:e.jquery},qunit:{globals:e.qunit},prototypejs:{globals:e.prototypejs},shelljs:{globals:e.shelljs},meteor:{globals:e.meteor},mongo:{globals:e.mongo},protractor:{globals:e.protractor},applescript:{globals:e.applescript},nashorn:{globals:e.nashorn},serviceworker:{globals:e.serviceworker},atomtest:{globals:e.atomtest},embertest:{globals:e.embertest},webextensions:{globals:e.webextensions},es6:{globals:e.es6,parserOptions:{ecmaVersion:6}},greasemonkey:{globals:e.greasemonkey}};return t}),define("javascript/finder",["estraverse/estraverse","eslint/conf/environments"],function(e,t){var n={visitor:null,punc:"\n	\r (){}[]:;,.+=-*^&@!%~`'\"/\\",findWord:function(e,t){if(e&&t>-1){for(var n=this.punc.indexOf(e.charAt(t))>-1,r=n&&t>0?t-1:t;r>=0&&!(this.punc.indexOf(e.charAt(r))>-1);)r--;var o=r;for(r=t;r<=e.length&&!(this.punc.indexOf(e.charAt(r))>-1);)r++;return(o===t||n&&o===t-1)&&r===t?null:o===t?e.substring(o,r):e.substring(o+1,r)}return null},findNode:function(t,n,r){var o=null,s=r&&r.parents?[]:null,a=r&&r.next?r.next:!1;if("number"==typeof t&&t>-1&&n&&e.traverse(n,{enter:function(n){if(n.type&&n.range){if(!a&&n.type===e.Syntax.Program&&t<n.range[0])return e.VisitorOption.Break;var r=!1;if((n.range[0]===t&&o&&o.range[1]===t&&"ClassBody"===n.type||"FunctionExpression"===n.type&&o&&"Identifier"===o.type)&&(r=!0),!r&&n.range[0]<=t||r&&n.range[0]<t)o=n,s&&s.push(n);else if(a&&(o=n,s&&s.push(n)),o.type!==e.Syntax.Program)return e.VisitorOption.Break}},leave:function(e){s&&t>e.range[1]&&s.pop()}}),o&&s&&s.length>0){var i=s[s.length-1];"Program"!==i.type&&i.range[0]===o.range[0]&&i.range[1]===o.range[1]&&s.pop(),o.parents=s}return o},findNodeAfterComment:function(t,n){var r=null,o=[];if(Array.isArray(t.range)&&n){var s=t.range[1];e.traverse(n,{enter:function(t,n){if(t.type&&t.range)if(n&&o.push(n),s>t.range[0])r=t;else if(r=t,t.type!==e.Syntax.Program)return e.VisitorOption.Break}})}return r&&(r.parents=o),r},findNodesForRange:function(t,n,r){var o=[];return t&&e.traverse(t,{enter:function(t){return t.range[0]>=n&&t.range[0]<r&&o.push(t),t.range[0]>=r?e.VisitorOption.BREAK:void 0}}),o},findToken:function(e,t){if("number"==typeof e&&e>-1&&t&&t.length>0){var n,r=0,o=t.length-1,s=0;if(n=t[0],e>=n.range[0]&&e<n.range[1])return n.index=0,n;if(n=t[o],e>=n.range[0])return n.index=o,n;for(n=null;o>=r;){if(s=Math.floor((r+o)/2),n=t[s],e<n.range[0])o=s-1;else if(e>n.range[1])r=s+1;else if(e===n.range[1]){var a=t[s+1];if(a.range[0]!==n.range[1])return n.index=s,n;r=s+1}else if(e>=n.range[0]&&e<n.range[1])return n.index=s,n;if(r===o)return n=t[r],e>=n.range[0]&&e<=n.range[1]?(n.index=r,n):null}}return null},findComment:function(e,t){if(t.comments){for(var n=t.comments,r=n.length,o=0;r>o;o++){var s=n[o];if(s.range[0]<e&&s.range[1]>=e)return s;if(e===t.range[1]&&e===s.range[1])return s;if(e>t.range[1]&&e<=s.range[1])return s;if(s.range[0]>e)return null}return null}},findScriptBlocks:function(e,t){var n=[],r=null,o=/<\s*script([^>]*)(?:\/>|>((?:.|\r?\n)*?)<\s*\/script[^<>]*>)/gi,s=/(type|language)\s*=\s*"([^"]*)"/i,a=/src\s*=\s*"([^"]*)"/i,i=this.findHtmlCommentBlocks(e,t);e:for(;null!==(r=o.exec(e));){var l=r[1],c=r[2],p=null;if(l){var u=s.exec(l);if(u&&u[2]){var d=u[2];if("language"===u[1]&&(d="text/"+d),!/^(application|text)\/(ecmascript|javascript(\d.\d)?|livescript|jscript|x\-ecmascript|x\-javascript)$/gi.test(d))continue}var h=a.exec(l);h&&(p=h[1])}if(c||!p){if(void 0!==c){var f=r.index+r[0].indexOf(">")+1;if("number"!=typeof t||t>=f&&f+c.length>=t){for(var m=0;m<i.length;m++)if(i[m].start<=f&&i[m].end>=f)continue e;n.push({text:c,offset:f,dependencies:p})}}}else n.push({text:"",offset:0,dependencies:p})}var g={blur:!0,change:!0,click:!0,dblclick:!0,focus:!0,keydown:!0,keypress:!0,keyup:!0,load:!0,mousedown:!0,mousemove:!0,mouseout:!0,mouseover:!0,mouseup:!0,reset:!0,select:!0,submit:!0,unload:!0},b=/(\s+)on(\w*)(\s*=\s*")([^"]*)"/gi,y=0;e:for(;null!==(r=b.exec(e));){y++;var v=r[1],x=r[2],_=r[3];if(c=r[4],x&&x.toLowerCase()in g&&(c||(c=""),f=r.index+v.length+2+x.length+_.length,"number"!=typeof t||t>=f&&f+c.length>=t)){for(var S=0;S<i.length;S++)if(i[S].start<=f&&i[S].end>=f)continue e;n.push({text:c,offset:f,isWrappedFunctionCall:!0})}}return n},findHtmlCommentBlocks:function(e,t){for(var n=[],r=null,o=/<!--((?:.|\r?\n)*?)-->/gi;null!=(r=o.exec(e));){var s=r[1];s.length<1||("number"!=typeof t||r.index<=t&&r.index+s.length>=r.index)&&n.push({text:s,start:r.index,end:r.index+s.length})}return n},findESLintEnvForMember:function(e){var n=Object.keys(t);if(n)for(var r=n.length,o=0;r>o;o++){var s=t[n[o]];if("undefined"!=typeof s[e])return n[o];var a=s.globals;if(a&&"undefined"!=typeof a[e])return n[o]}return null},findDirective:function(e,t){if(e&&"undefined"!=typeof t)for(var n=e.comments.length,r=0;n>r;r++){var o=/^\s*(eslint-\w+|eslint|globals?)(\s|$)/.exec(e.comments[r].value);if(null!==o&&"undefined"!=typeof o&&o[1]===t)return e.comments[r]}return null},findDirectives:function(e,t){var n=[];if(e&&"undefined"!=typeof t)for(var r=e.comments.length,o=0;r>o;o++){var s=/^\s*(eslint-\w+|eslint|globals?)(\s|$)/.exec(e.comments[o].value);null!==s&&"undefined"!=typeof s&&s[1]===t&&n.push(e.comments[o])}return n},findProgramStartRange:function(e){return e.tokens&&e.tokens.length>0?e.tokens[0].range:e.comments&&e.comments.length>0?[e.comments[0].range[0],e.comments[0].range[0]+1]:"number"==typeof e.end?[e.end,e.end]:[0,0]},findCommentForNode:function r(e){var t=e.leadingComments,n=null;if(t&&t.length>0){if(n=t[t.length-1],"Block"===n.type)return n.node=e,n}else if("Property"===e.type){if(n=r(e.key))return n.node=e,n}else if("FunctionDeclaration"===e.type&&(n=r(e.id)))return n.node=e,n;return n=Object.create(null),n.node=e,n.value="",n},findParentFunction:function(e){if(e)if(e.parents)for(var t=e.parents,n=t.pop();n;){if("FunctionDeclaration"===n.type||"FunctionExpression"===n.type)return n;n=t.pop()}else if(e.parent)for(n=e.parent;n;){if("FunctionDeclaration"===n.type||"FunctionExpression"===n.type)return n;n=n.parent}return null},findCompletionKind:function(e,t){var r=this.findNode(t,e,{parents:!0});if(r){if("Literal"===r.type)switch(typeof r.value){case"boolean":case"number":if(t>r.range[0]&&t<=r.range[1])return{kind:"unknown"};break;case"string":if(t>r.range[0]&&t<r.range[1])return{kind:"string"};break;case"object":if(r.regex&&t>r.range[0]&&t<=r.range[1])return{kind:"regex"}}if(r.parents&&r.parents.length>0){var o=r.parents.pop();switch(o.type){case"MemberExpression":return{kind:"member"};case"Program":case"BlockStatement":break;case"VariableDeclarator":if(!o.init||t<o.init.range[0])return{kind:"unknown"};break;case"FunctionDeclaration":case"FunctionExpression":if(t<o.body.range[0])return{kind:"unknown"};break;case"Property":return t-1>=o.value.range[0]&&t-1<=o.value.range[1]?{kind:"prop"}:{kind:"unknown"};case"SwitchStatement":return{kind:"swtch"}}}}return r=n.findComment(t,e),r?{kind:"doc",node:r}:{kind:"top"}},findTemplatesForKind:function(e,t,n){for(var r=[],o=0,s=e.length;s>o;o++){var a=e[o];a.nodes&&a.nodes[t]&&(a.ecma<=n||void 0===a.ecma)&&r.push(a)}return r}};return n}),define("javascript/ternPlugins/amqp",["tern/lib/tern","javascript/finder","i18n!javascript/nls/messages"],function(e,t,n){var r,o=[{name:"amqp",nodes:{top:!0,member:!1,prop:!1},template:"var amqp = require('amqp');\n",doc:n.amqpRequire,url:"https://www.npmjs.com/package/amqp"},{name:"amqp connection",nodes:{top:!0,member:!1,prop:!1},template:"var amqp = require('amqp');\nvar ${connection} = amqp.createConnection({\n	host: ${host},\n	port: ${port},\n	login: ${login},\n	password: ${password}\n});\n",doc:n.amqpConnection,url:"https://www.npmjs.com/package/amqp"},{name:"amqp on",nodes:{top:!0,member:!1,prop:!1},template:"${connection}.on(${event}, function() {\n	${cursor}\n});\n",doc:n.amqpOn,url:"https://www.npmjs.com/package/amqp"},{name:"amqp queue",nodes:{top:!0,member:!1,prop:!1},template:"${connection}.queue(${id}, function(queue) {\n	queue.bind('#'); //catch all messages\n	queue.subscribe(function (message, headers, deliveryInfo) {\n		// Receive messages\n	});\n	${cursor}\n});\n",doc:n.amqpQueue,url:"https://www.npmjs.com/package/amqp"},{name:"amqp exchange",nodes:{top:!0,member:!1,prop:!1},template:"var exchange = ${connection}.exchange(${id}, {type: 'topic'}, function(exchange) {\n	${cursor}\n});\n",doc:n.amqpExchange,url:"https://www.npmjs.com/package/amqp"}];e.registerPlugin("amqp",function(){return{defs:s,passes:{completion:function(e,t){r=t},variableCompletion:function(e,n,s,a){if(r.includeTemplates||void 0===r.includeTemplates){var i=t.findCompletionKind(e.ast,s);if(i&&i.kind){var l=t.findTemplatesForKind(o,i.kind,r.ecma?r.ecma:6);l.forEach(function(e){a(e.name,null,0,function(t){t.template=e.template,t.doc=e.doc,t.url=e.url,t.type="template",t.ecma=e.ecma,t.origin="amqp",t.overwrite=!0})})}}}}}});var s={"!name":"amqp","!define":{"!known_modules":{amqp:{Connection:"Connection",createConnection:"fn(options: Object, implOptions: Object, readyCallback: fn()) -> +Connection"}},"Message.!1":{parseError:"+Error",rawData:"string"},"serializer.serializeFields.!2":{reserved1:"number",routingKey:"string",noWait:"bool"},"Exchange.!3":{type:"string"},"Queue.prototype.subscribeRaw.!0":{state:"string"},"Connection.prototype._bodyToBuffer.!ret":"[Connection.prototype._bodyToBuffer.!ret.<i>]","Connection.prototype._bodyToBuffer.!ret.<i>":{contentType:"string"},"Connection.prototype._parseURLOptions.!ret":{ssl:{enabled:"bool"}},"createExchangeErrorHandlerFor.!ret":"fn(err: ?)","parseTable.!ret":{"!doc":"XXX check if bitIndex greater than 7?"},"parseFields.!1":"[?]","parseFields.!ret":{}},Message:{prototype:{acknowledge:{"!type":"fn(all: ?)","!doc":"Acknowledge receipt of message.\nSet first arg to 'true' to acknowledge this and all previous messages\nreceived on this queue."},reject:{"!type":"fn(requeue: ?)","!doc":"Reject an incoming message.\nSet first arg to 'true' to requeue the message."}},"!type":"fn(queue: +Queue, args: ?)","!doc":"Properties:\n- routingKey\n- size\n- deliveryTag\n\n- contentType (default 'application/octet-stream')\n- contentEncoding\n- headers\n- deliveryMode\n- priority (0-9)\n- correlationId\n- replyTo\n- experation\n- messageId\n- timestamp\n- userId\n- appId\n- clusterId",queue:"+Queue",read:"number",size:"number"},serializer:{serializeFloat:"fn(b: ?, size: number, value: ?, bigEndian: ?)",serializeInt:"fn(b: ?, size: number, int: number)",serializeShortString:"fn(b: ?, string: ?)",serializeLongString:"fn(b: ?, string: ?)",serializeDate:"fn(b: ?, date: ?)",serializeBuffer:"fn(b: ?, buffer: ?)",serializeBase64:"fn(b: ?, buffer: ?)",isBigInt:"fn(value: ?) -> bool",getCode:"fn(dec: ?) -> string",isFloat:"fn(value: ?) -> bool",serializeValue:"fn(b: ?, value: ?)",serializeTable:"fn(b: ?, object: ?)",serializeArray:"fn(b: ?, arr: ?)",serializeFields:"fn(buffer: ?, fields: ?, args: ?, strict: bool)"},methods:{"<i>":{"!doc":"debug(name);"},"!doc":"methods keyed on their name"},methodTable:{"<i>":{"<i>":"methods.<i>"},"!doc":"a look up table for methods recieved\nindexed on class id, method id"},classes:{"!doc":"classes keyed on their index"},Exchange:{prototype:{_onMethod:"fn(channel: ?, method: ?, args: ?) -> bool",publish:{"!type":"fn(routingKey: ?, data: ?, options: ?, callback: ?)","!doc":"exchange.publish('routing.key', 'body');\n\nthe third argument can specify additional options\n- mandatory (boolean, default false)\n- immediate (boolean, default false)\n- contentType (default 'application/octet-stream')\n- contentEncoding\n- headers\n- deliveryMode\n- priority (0-9)\n- correlationId\n- replyTo\n- expiration\n- messageId\n- timestamp\n- userId\n- appId\n- clusterId\n\nthe callback is optional and is only used when confirm is turned on for the exchange"},_awaitConfirm:{"!type":"fn(task: ?, callback: ?)","!doc":"registers tasks for confirms"},cleanup:{"!type":"fn()","!doc":"do any necessary cleanups eg. after queue destruction"},destroy:"fn(ifUnused: ?)",unbind:"fn()",bind:"fn()",bind_headers:"fn()"},"!type":"fn(connection: +Connection, channel: number, name: ?, options: Exchange.!3, openCallback: ?)",binds:"number",exchangeBinds:"number",sourceExchanges:{"<i>":"+Exchange"},_sequence:"number",_unAcked:{},_addedExchangeErrorHandler:"bool",state:"string",channel:"number",connection:"+Connection",_tasks:"[?]"},Queue:{prototype:{subscribeRaw:"fn(options: Queue.consumerTagListeners.<i>, messageListener: Queue.consumerTagListeners.<i>)",unsubscribe:"fn(consumerTag: ?)",subscribe:"fn(options: ?, messageListener: ?)",shift:{"!type":"fn(reject: ?, requeue: ?)","!doc":"Acknowledges the last message"},bind:"fn(exchange: string, routingKey: string, callback: string)",unbind:"fn(exchange: string, routingKey: string)",bind_headers:"fn()",unbind_headers:"fn()",destroy:"fn(options: ?)",purge:"fn()",_onMethod:"fn(channel: ?, method: ?, args: ?)",_onContentHeader:"fn(channel: number, classInfo: ?, weight: number, properties: parseFields.!ret, size: number)",_onContent:"fn(channel: number, data: ?)",flow:"fn(active: ?)",subscribeJSON:"Queue.prototype.subscribe"},"!type":"fn(connection: +Connection, channel: number, name: ?, options: ?, callback: ?)",name:"string",_bindings:{"<i>":{"<i>":"number"}},consumerTagListeners:{"<i>":{state:"string"}},consumerTagOptions:{"<i>":"Queue.consumerTagListeners.<i>"},options:{autoDelete:"bool",closeChannelOnUnsubscribe:"bool"},state:"string",_bindCallback:"string",_sequence:"number",confirm:"bool",currentMessage:"+Message"},AMQPParser:{prototype:{throwError:{"!type":"fn(error: string)","!doc":"If there's an error in the parser, call the onError handler or throw"},execute:{"!type":"fn(data: ?)","!doc":"Everytime data is recieved on the socket, pass it to this function for\nparsing."},_parseMethodFrame:"fn(channel: number, buffer: ?)",_parseHeaderFrame:"fn(channel: number, buffer: ?)"},"!type":"fn(version: string, type: string)","!doc":"An interruptible AMQP parser.\n\ntype is either 'server' or 'client'\nversion is '0-9-1'.\n\nInstances of this class have several callbacks\n- onMethod(channel, method, args);\n- onHeartBeat()\n- onContent(channel, buffer);\n- onContentHeader(channel, class, weight, properties, size);\n\nThis class does not subclass EventEmitter, in order to reduce the speed\nof emitting the callbacks. Since this is an internal class, that should\nbe fine.",isClient:"bool",state:"string",parse:"fn(data: ?) -> AMQPParser.parse",onMethod:"fn(channel: number, method: methods.<i>, args: parseFields.!ret)",onContent:"fn(channel: number, data: ?)",onContentHeader:"fn(channel: number, classInfo: ?, weight: number, properties: parseFields.!ret, size: number)",onHeartBeat:"fn()",onError:"fn(e: string)"},maxFrameBuffer:{"!type":"number","!doc":"parser"},channelMax:{"!type":"number","!doc":"copying qpid)"},defaultPorts:{amqp:"number",amqps:"number"},defaultOptions:{host:"string",port:"number",login:"string",password:"string",authMechanism:"string",vhost:"string",connectionTimeout:"number",ssl:{enabled:"bool"}},defaultSslOptions:{port:"number",ssl:{rejectUnauthorized:"bool"}},defaultImplOptions:{defaultExchangeName:"string",reconnect:"bool",reconnectBackoffStrategy:"string",reconnectExponentialLimit:"number",reconnectBackoffTime:"number"},defaultClientProperties:{platform:"string",product:"string"},Connection:{prototype:{setOptions:"fn(options: ?)",setImplOptions:"fn(options: ?)",connect:"fn()",reconnect:"fn()",disconnect:"fn()",addAllListeners:"fn()",on:"fn(event: string, action: fn())",heartbeat:"fn()",exchange:{"!type":"fn(name: ?, options: Exchange.!3, openCallback: ?) -> +Exchange","!doc":"connection.exchange('my-exchange', { type: 'topic' });\nOptions\n- type 'fanout', 'direct', or 'topic' (default)\n- passive (boolean)\n- durable (boolean)\n- autoDelete (boolean, default true)"},exchangeClosed:{"!type":"fn(name: ?)","!doc":"remove an exchange when it's closed (called from Exchange)"},queue:{"!type":"fn(name: ?) -> +Queue","!doc":"Options\n- passive (boolean)\n- durable (boolean)\n- exclusive (boolean)\n- autoDelete (boolean, default true)"},queueClosed:{"!type":"fn(name: ?)","!doc":"remove a queue when it's closed (called from Queue)"},publish:{"!type":"fn(routingKey: ?, body: ?, options: ?, callback: ?)","!doc":"Publishes a message to the default exchange."},_bodyToBuffer:"fn(body: ?) -> [?]",_inboundHeartbeatTimerReset:"fn()",_outboundHeartbeatTimerReset:"fn()",_saslResponse:"fn() -> ?|string",_onMethod:"fn(channel: number, method: methods.<i>, args: parseFields.!ret)",_parseURLOptions:{"!type":"fn(connectionString: ?) -> Connection.prototype._parseURLOptions.!ret","!doc":"Generate connection options from URI string formatted with amqp scheme."},_chooseHost:{"!type":"fn() -> !this.options.host","!doc":"If you pass a array of hosts, lets choose a random host or the preferred host number, or then next one."},_createSocket:"fn()",end:"fn()",_getSSLOptions:"fn() -> !this.sslConnectionOptions",_startHandshake:{"!type":"fn()","!doc":"Time to start the AMQP 7-way connection initialization handshake!\n1. The client sends the server a version string"},_sendBody:{"!type":"fn(channel: number, body: ?, properties: ?)","!doc":"Parse helpers"},_sendHeader:{"!type":"fn(channel: number, size: ?, properties: ?)","!doc":"connection: the connection\nchannel: the channel to send this on\nsize: size in bytes of the following message\nproperties: an object containing any of the following:\n- contentType (default 'application/octet-stream')\n- contentEncoding\n- headers\n- deliveryMode\n- priority (0-9)\n- correlationId\n- replyTo\n- expiration\n- messageId\n- timestamp\n- userId\n- appId\n- clusterId"},_sendMethod:"fn(channel: number, method: ?, args: ?)",generateChannelId:{"!type":"fn() -> !this.channelCounter","!doc":"tries to find the next available id slot for a channel"}},"!type":"fn(connectionArgs: ?, options: ?, readyCallback: ?)",connectionAttemptScheduled:{"!type":"bool","!doc":"Set to false, so that if we fail in the reconnect attempt, we can\nschedule another one."},_defaultExchange:"+Exchange",channelCounter:"number",_blocked:"bool",channels:{"!doc":"In the case where this is a reconnection, do not trample on the existing\nchannels.\nFor your reference, channel 0 is the control channel.","<i>":"+Queue"},exchanges:{"<i>":"+Exchange"},parser:{"!type":"+AMQPParser","!doc":"Reset parser state"},readyEmitted:{"!type":"bool","!doc":"Set 'ready' flag for auth failure detection."},_inboundHeartbeatTimer:"number",_outboundHeartbeatTimer:"number",hosti:{"!type":"number","!doc":"If this is already set, it looks like we want to choose another one.\nAdd one to hosti but don't overflow it."},"<i>":"fn()",sslConnectionOptions:{}},Channel:{prototype:{closeOK:"fn()",reconnect:"fn()",_taskPush:"fn(reply: ?, cb: ?)",_tasksFlush:"fn()",_handleTaskReply:"fn(channel: ?, method: ?, args: ?) -> bool",_onChannelMethod:"fn(channel: ?, method: ?, args: ?)",close:"fn(reason: ?)"},"!type":"fn(connection: +Connection, channel: number)","!doc":"This class is not exposed to the user. Queue and Exchange are subclasses\nof Channel. This just provides a task queue."},createExchangeErrorHandlerFor:{"!type":"fn(exchange: +Exchange) -> fn(err: ?)","!doc":"creates an error handler scoped to the given `exchange`"},parseShortString:"fn(buffer: ?)",parseLongString:"fn(buffer: ?)",parseSignedInteger:"fn(buffer: ?) -> !0.<i>",parseValue:"fn(buffer: ?) -> !0.<i>",parseTable:"fn(buffer: ?) -> parseTable.!ret",parseFields:"fn(buffer: ?, fields: [?]) -> parseFields.!ret",i:"number",o:"number",bigEndian:"bool",match:"[string]",Error:{name:"string"}}}),define("javascript/util",[],function(){function e(e){return e.length<1?!1:isNaN(e.charCodeAt(0))?!1:e.toLocaleUpperCase().charAt(0)===e.charAt(0)}function t(e,t){if("string"!=typeof e||"string"!=typeof t)return!1;if(0===e.length)return!0;if(e.charAt(0).toLowerCase()!==t.charAt(0).toLowerCase())return!1;if(n(t,e))return!0;var o=t.toLowerCase();if(n(o,e))return!0;var s=e.toLowerCase(),a=e.indexOf("=");if(-1!==a&&n(t,e.substring(0,a)))return!0;if(e===s)return!1;if(n(o,s))return!0;var i=r(e),l=r(t);if(i.length>l.length)return!1;for(var c=0;c<i.length;++c)if(!n(l[c],i[c]))return!1;return!0}function n(e,t){return e.slice(0,t.length)===t}function r(t){for(var n=[],r=t.length-1;r>=0;--r)e(t.charAt(r))&&(n.push(t.substring(r)),t=t.substring(0,r));return 0!==t.length&&n.push(t),n.reverse()}function o(e,t,n){var r=a;return r.range[1]="string"==typeof n?n.length:0,r.loc.start.line=e.lineNumber,r.loc.start.column=0,r.loc.end.line=e.lineNumber,r.loc.end.column=e.column,r.errors=[e],r.sourceFile=Object.create(null),r.sourceFile.text=n,r.sourceFile.name=t,r}function s(e){var t=[];return e&&e.errors&&e.errors.forEach(function(e){var n=e?JSON.parse(JSON.stringify(e)):e;e instanceof Error&&(n.__isError=!0,n.lineNumber="number"==typeof n.lineNumber?n.lineNumber:e.lineNumber,n.message=n.message||e.message,n.name=n.name||e.name,n.stack=n.stack||e.stack);var r=e.message;n.message=r=r.replace(/^Line \d+: /,""),t.push(n)}),t}var a={type:"Program",body:[],comments:[],tokens:[],range:[0,0],loc:{start:{},end:{}}};return{isUpperCase:e,looselyMatches:t,startsWith:n,toCamelCaseParts:r,errorAST:o,serializeAstErrors:s}}),define("javascript/orionAcorn",["javascript/util"],function(e){function t(){this.dependencies={},this.environments={},this.comments=[],this.tokens=[],this.leadingCommentsIndex=0,this.trailingCommentsIndex=0,this.errors=[],this.needReset=!0,this.currentOptions={}}function n(e,t,n,s){var a=t.length;if(0!==a)if("importScripts"===e.name)o(t,s,"browser");else if("Worker"===e.name)r(t[0],s,"browser");else if("require"===e.name){var i=t[0];"ObjectExpression"===i.type&&(n.amd=!0),"ArrayExpression"===i.type?(n.amd=!0,o(i.elements,s,"amd")):"Literal"===i.type&&(n.node=!0,r(i,s,"node")),a>1&&(i=t[1],"ArrayExpression"===i.type&&(n.node=!0,o(i.elements,s,"node")))}else"requirejs"===e.name?(i=t[0],"ArrayExpression"===i.type&&(n.amd=!0,o(i.elements,s,"amd"))):"define"===e.name&&a>0&&(i=t[0],"Literal"===i.type&&a>1&&(i=t[1]),"ArrayExpression"===i.type?(n.amd=!0,o(i.elements,s,"amd")):"FunctionExpression"===i.type?(n.amd=!0,i.params&&i.params.length>0&&"require"===i.params[0].name&&(n.simplifiedCommonJS=!0)):"ObjectExpression"===i.type&&(n.amd=!0))}function r(e,t,n){e&&"Literal"===e.type&&(t[e.value]||(t[e.value]={value:e.value,env:n}))}function o(e,t,n){for(var o=e.length,s=0;o>s;s++)r(e[s],t,n)}return t.prototype.reset=function(){this.comments=[],this.tokens=[],this.leadingCommentsIndex=0,this.trailingCommentsIndex=0},t.prototype.initialize=function(){this.dependencies={},this.environments={},this.reset(),this.errors=[],this.needReset=!0,this.currentOptions={}},t.prototype.onToken=function(e){var t="Punctuator",n=e.type.label,r=!1,o=e.value;switch(n){case"num":t="Numeric";break;case"regexp":t="RegularExpression",e.value="/"+o.pattern+"/"+(o.flags?o.flags:"");break;case"string":t="String";break;case"name":t="Identifier";break;case"eof":r=!0;break;default:var s=e.type.keyword;if(s)switch(s){case"null":t="Null";break;case"true":case"false":t="Boolean";break;default:t="Keyword"}}if(!r){var a=e.start,i=e.end;if(a>=i)return;var l=Object.create(null);l.type=t,l.index=this.tokens.length,e.range&&(l.range=e.range),e.loc&&(l.loc=e.loc),l.start=a,l.end=i,l.value="undefined"==typeof o?n:e.value,this.tokens.push(l)}},t.prototype.onComment=function(e,t,n,r,o,s){var a={type:e?"Block":"Line",value:t,start:n,end:r};this.currentOptions.locations&&(a.loc={start:o,end:s}),this.currentOptions.ranges&&(a.range=[n,r]),this.comments.push(a)},t.prototype.acornPlugin=function(e,t){function o(e){var t,n,r={};for(t in e)e.hasOwnProperty(t)&&(n=e[t],r[t]="object"==typeof n&&null!==n?o(n):n);return r}if(t){var s=this;e.extend("raise",function(e){function t(e,t){for(var n=e.length,r=0;n>r;r++){var o=e[r];if(o.index===t.index&&o.message===t.message)return}e.push(t)}return function(n,r){try{return e.call(this,n,r)}catch(o){throw o instanceof SyntaxError&&s.needReset&&(s.reset(),s.needReset=!1),o.index=n,o.start=n,o.end=this.input.length>=n+1?n+1:this.input.length,t(s.errors,o),o}}}),e.extend("startNode",function(e){return function(){var t=e.call(this),n=s.comments.length;if(n!==s.leadingCommentsIndex){var r=s.leadingCommentsIndex;e:for(;n>r;r++){var a=s.comments[r];if(!(t.range[0]>=a.range[1]))break e;t.leadingComments||(t.leadingComments=[]),t.leadingComments.push(o(s.comments[r]))}s.leadingCommentsIndex=r}return t}}),e.extend("finishNode",function(e){return function(t,a){"CallExpression"===a||"NewExpression"===a?n(t.callee,t.arguments,s.environments,s.dependencies):"ImportDeclaration"===a?(r(t.source,s.dependencies,"es_modules"),s.environments.es_modules=!0):"ExportNamedDeclaration"===a||"ExportDefaultDeclaration"===a||"ExportAllDeclaration"===a?s.environments.es_modules=!0:"MemberExpression"===a&&"exports"===t.property.name&&"module"===t.object.name&&(s.environments.node=!0);var i=e.call(this,t,a),l=s.comments.length;if(l!==s.trailingCommentsIndex){for(var c=s.trailingCommentsIndex;l>c;c++){var p=s.comments[c];i.range[1]<=p.range[0]&&(i.trailingComments||(i.trailingComments=[]),i.trailingComments.push(o(s.comments[c])))}s.trailingCommentsIndex=c}if(i.sourceFile=s.sourceFile,i.end>s.sourceFile.text.length){var u=s.sourceFile.text.length;i.end=u,i.range&&(i.range[1]=u)}return i}}),e.extend("skipBlockComment",function(e){return function(){var t=/\r\n?|\n|\u2028|\u2029/,n=new RegExp(t.source,"g"),r=this.curPosition(),o=this.pos,s=this.input.indexOf("*/",this.pos+=2);if(-1!==s)return this.pos-=2,e.call(this);if(this.pos+=2,this.options.locations){n.lastIndex=o;for(var a;(a=n.exec(this.input))&&a.index<this.pos;)++this.curLine,this.lineStart=a.index+a[0].length}if(this.options.onComment){var i=this.input.length;this.pos=i,this.options.onComment(!0,this.input.slice(o+2,i),o,i,r,this.curPosition())}return this.pos=o,e.call(this)}})}},t.prototype.preParse=function(e,t,n,r,o){this.initialize(),n.plugins||(n.plugins=Object.create(null)),n.plugins.acornPlugin=this.acornPlugin.bind(this),t.plugins={acornPlugin:!0},r.pluginsLoose||(r.pluginsLoose=Object.create(null)),r.pluginsLoose.acornPlugin=this.acornPlugin.bind(this),t.pluginsLoose={acornPlugin:!0},t.onToken=this.onToken.bind(this),t.onComment=this.onComment.bind(this),t.locations=!0,t.ranges=!0,t.sourceFile=!1,t.allowImportExportEverywhere=!1,t.sourceType||(t.sourceType="script"),t.allowHashBang=!0,("number"!=typeof t.ecmaVersion||t.ecmaVersion<3||t.ecmaVersion>7)&&(t.ecmaVersion=7),!t.directSourceFile&&o&&(t.directSourceFile={name:o,text:e}),this.sourceFile=t.directSourceFile,this.currentOptions={locations:t.locations,sourceFile:t.sourceFile,ranges:t.ranges}},t.prototype.postParse=function(t){Array.isArray(this.errors)&&0!==this.errors.length&&(t.errors?t.errors.concat(this.errors):t.errors=this.errors),t.comments=this.comments,t.tokens=this.tokens,t.dependencies||(t.dependencies=[]),Object.keys(this.dependencies).forEach(function(e){var n=this.dependencies[e];(this.environments.amd&&"node"===n.env||this.environments.node&&"amd"===n.env)&&(n.env="commonjs"),t.dependencies.push(n)}.bind(this)),t.environments=this.environments,t.errors=e.serializeAstErrors(t)},t}),define("javascript/ternPlugins/ast",["tern/lib/tern","javascript/orionAcorn"],function(e,t){var n=new t;e.registerPlugin("ast",function(e){return e.on("reset",function(){n.initialize()}),{passes:{parseOptions:n.preParse.bind(n),postParse:n.postParse.bind(n)}}})}),define("eslint/lib/utils/traverser",["estraverse/estraverse"],function(e){"use strict";function t(){var n=Object.create(new e.Controller),r=n.traverse;return n.traverse=function(e,n){return n.fallback=t.getKeys,r.call(this,e,n)},n}var n=["parent","leadingComments","trailingComments"];return t.getKeys=function(e){return Object.keys(e).filter(function(e){return-1===n.indexOf(e)})},t}),define("orion/objects",[],function(){function e(e){for(var t=Object.prototype.hasOwnProperty,n=1,r=arguments.length;r>n;n++){var o=arguments[n];for(var s in o)t.call(o,s)&&(e[s]=o[s])}return e}return{clone:function(t){if(Array.isArray(t))return Array.prototype.slice.call(t);var n=Object.create(Object.getPrototypeOf(t));return e(n,t),n},mixin:e,toArray:function(e){return Array.isArray(e)?e:[e]}}}),define("esrecurse/esrecurse",["estraverse/estraverse","orion/objects"],function(e,t){"use strict";function n(e){return null===e?!1:"object"==typeof e&&"string"==typeof e.type}function r(t,n){return(t===e.Syntax.ObjectExpression||t===e.Syntax.ObjectPattern)&&"properties"===n}function o(n,r){r=r||{},this.__visitor=n||this,this.__childVisitorKeys=r.childVisitorKeys?t.mixin({},e.VisitorKeys,r.childVisitorKeys):e.VisitorKeys,"iteration"===r.fallback?this.__fallback=a:"function"==typeof r.fallback&&(this.__fallback=r.fallback)}var s,a;return s=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)},a=Object.keys||function(e){var t,n=[];for(t in e)n.push(t);return n},o.prototype.visitChildren=function(t){var o,a,i,l,c,p,u;if(null!==t){if(o=t.type||e.Syntax.Property,a=this.__childVisitorKeys[o],!a){if(!this.__fallback)throw new Error("Unknown node type "+o+".");a=this.__fallback(t)}for(i=0,l=a.length;l>i;++i)if(u=t[a[i]])if(s(u))for(c=0,p=u.length;p>c;++c)u[c]&&(n(u[c])||r(o,a[i]))&&this.visit(u[c]);else n(u)&&this.visit(u)}},o.prototype.visit=function(t){var n;if(null!==t)return n=t.type||e.Syntax.Property,this.__visitor[n]?void this.__visitor[n].call(this,t):void this.visitChildren(t)},{version:"4.1.0",Visitor:o,visit:function(e,t,n){var r=new o(t,n);r.visit(e)}}}),function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("estraverse/estraverse"),require("esrecurse/esrecurse")):"function"==typeof define&&define.amd?define("escope/escope",["exports","estraverse/estraverse","esrecurse/esrecurse"],t):t(e.escope=e.escope||{},e.estraverse,e.esrecurse)}(this,function(e,t,n){"use strict";function r(e,n,r,o){var s,a,i,l,c;if(e.upper&&e.upper.isStrict)return!0;if(n.type===t.Syntax.ArrowFunctionExpression)return!0;if(r)return!0;if("class"===e.type||"module"===e.type)return!0;if("block"===e.type||"switch"===e.type)return!1;if("function"===e.type)s=n.type===t.Syntax.Program?n:n.body;else{if("global"!==e.type)return!1;s=n}if(o){for(a=0,i=s.body.length;i>a&&(l=s.body[a],l.type===t.Syntax.DirectiveStatement);++a)if('"use strict"'===l.raw||"'use strict'"===l.raw)return!0}else for(a=0,i=s.body.length;i>a&&(l=s.body[a],l.type===t.Syntax.ExpressionStatement)&&(c=l.expression,c.type===t.Syntax.Literal&&"string"==typeof c.value);++a)if(null!==c.raw){if('"use strict"'===c.raw||"'use strict'"===c.raw)return!0}else if("use strict"===c.value)return!0;return!1}function o(e,t){var n;e.scopes.push(t),n=e.__nodeToScope.get(t.block),n?n.push(t):e.__nodeToScope.set(t.block,[t])}function s(e){return e.type===m.ClassName||e.type===m.Variable&&"var"!==e.parent.kind}function a(e){return e[e.length-1]||null}function i(e,t,n,r){var o=new A(e,t,r);o.visit(t),null!=n&&o.rightHandNodes.forEach(n.visit,n)}function l(){return{optimistic:!1,directive:!1,nodejsScope:!1,impliedStrict:!1,sourceType:"script",ecmaVersion:5,childVisitorKeys:null,fallback:"iteration"}}function c(e,t){function n(e){return"object"==typeof e&&e instanceof Object&&!(e instanceof Array)&&!(e instanceof RegExp)}var r,o;for(r in t)t.hasOwnProperty(r)&&(o=t[r],n(o)?n(e[r])?c(e[r],o):e[r]=c({},o):e[r]=o);return e}function p(e,t){var n,r,o;if(o=c(l(),t),n=new R(o),r=new M(o,n),r.visit(e),null!==n.__currentScope)throw new Error("currentScope should be null.");return n}n="default"in n?n["default"]:n;
var u=1,d=2,h=u|d,f=function(e,t,n,r,o,s,a){this.identifier=e,this.from=t,this.tainted=!1,this.resolved=null,this.flag=n,this.isWrite()&&(this.writeExpr=r,this.partial=s,this.init=a),this.__maybeImplicitGlobal=o};f.prototype.isStatic=function(){return!this.tainted&&this.resolved&&this.resolved.scope.isStatic()},f.prototype.isWrite=function(){return!!(this.flag&f.WRITE)},f.prototype.isRead=function(){return!!(this.flag&f.READ)},f.prototype.isReadOnly=function(){return this.flag===f.READ},f.prototype.isWriteOnly=function(){return this.flag===f.WRITE},f.prototype.isReadWrite=function(){return this.flag===f.RW},f.READ=u,f.WRITE=d,f.RW=h;var m=function(e,t){this.name=e,this.identifiers=[],this.references=[],this.defs=[],this.tainted=!1,this.stack=!0,this.scope=t};m.CatchClause="CatchClause",m.Parameter="Parameter",m.FunctionName="FunctionName",m.ClassName="ClassName",m.Variable="Variable",m.ImportBinding="ImportBinding",m.TDZ="TDZ",m.ImplicitGlobalVariable="ImplicitGlobalVariable";var g=function(e,t,n,r,o,s){this.type=e,this.name=t,this.node=n,this.parent=r,this.index=o,this.kind=s},b=function(e){function t(t,n,r,o){e.call(this,m.Parameter,t,n,null,r,null),this.rest=o}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t}(g),y=function(e,t,n,s,a){this.type=t,this.set=new Map,this.taints=new Map,this.dynamic="global"===this.type||"with"===this.type,this.block=s,this.through=[],this.variables=[],this.references=[],this.variableScope="global"===this.type||"function"===this.type||"module"===this.type?this:n.variableScope,this.functionExpressionScope=!1,this.directCallToEvalScope=!1,this.thisFound=!1,this.__left=[],this.upper=n,this.isStrict=r(this,s,a,e.__useDirective()),this.childScopes=[],this.upper&&this.upper.childScopes.push(this),this.__declaredVariables=e.__declaredVariables,o(e,this)};y.prototype.__shouldStaticallyClose=function(e){return!this.dynamic||e.__isOptimistic()},y.prototype.__shouldStaticallyCloseForGlobal=function(e){var t=e.identifier.name;if(!this.set.has(t))return!1;var n=this.set.get(t),r=n.defs;return r.length>0&&r.every(s)},y.prototype.__staticCloseRef=function(e){this.__resolve(e)||this.__delegateToUpperScope(e)},y.prototype.__dynamicCloseRef=function(e){var t=this;do t.through.push(e),t=t.upper;while(t)},y.prototype.__globalCloseRef=function(e){this.__shouldStaticallyCloseForGlobal(e)?this.__staticCloseRef(e):this.__dynamicCloseRef(e)},y.prototype.__close=function(e){var t,n=this;t=this.__shouldStaticallyClose(e)?this.__staticCloseRef:"global"!==this.type?this.__dynamicCloseRef:this.__globalCloseRef;for(var r=0,o=this.__left.length;o>r;++r){var s=n.__left[r];t.call(n,s)}return this.__left=null,this.upper},y.prototype.__resolve=function(e){var t,n;return n=e.identifier.name,this.set.has(n)?(t=this.set.get(n),t.references.push(e),t.stack=t.stack&&e.from.variableScope===this.variableScope,e.tainted&&(t.tainted=!0,this.taints.set(t.name,!0)),e.resolved=t,!0):!1},y.prototype.__delegateToUpperScope=function(e){this.upper&&this.upper.__left.push(e),this.through.push(e)},y.prototype.__addDeclaredVariablesOfNode=function(e,t){if(t){var n=this.__declaredVariables.get(t);Array.isArray(n)||(n=[],this.__declaredVariables.set(t,n)),-1===n.indexOf(e)&&n.push(e)}},y.prototype.__defineGeneric=function(e,t,n,r,o){var s;s=t.get(e),s||(s=new m(e,this),t.set(e,s),n.push(s)),o&&(s.defs.push(o),o.type!==m.TDZ&&(this.__addDeclaredVariablesOfNode(s,o.node),this.__addDeclaredVariablesOfNode(s,o.parent))),r&&s.identifiers.push(r)},y.prototype.__define=function(e,n){e&&e.type===t.Syntax.Identifier&&this.__defineGeneric(e.name,this.set,this.variables,e,n)},y.prototype.__referencing=function(e,n,r,o,s,a){if(e&&e.type===t.Syntax.Identifier&&"super"!==e.name){var i=new f(e,this,n||f.READ,r,o,!!s,!!a);this.references.push(i),this.__left.push(i)}},y.prototype.__detectEval=function(){var e;e=this,this.directCallToEvalScope=!0;do e.dynamic=!0,e=e.upper;while(e)},y.prototype.__detectThis=function(){this.thisFound=!0},y.prototype.__isClosed=function(){return null===this.__left},y.prototype.resolve=function(e){var n,r,o,s=this;if(!this.__isClosed())throw new Error("Scope should be closed.");if(e.type!==t.Syntax.Identifier)throw new Error("Target should be identifier.");for(r=0,o=this.references.length;o>r;++r)if(n=s.references[r],n.identifier===e)return n;return null},y.prototype.isStatic=function(){return!this.dynamic},y.prototype.isArgumentsMaterialized=function(){return!0},y.prototype.isThisMaterialized=function(){return!0},y.prototype.isUsedName=function(e){var t=this;if(this.set.has(e))return!0;for(var n=0,r=this.through.length;r>n;++n)if(t.through[n].identifier.name===e)return!0;return!1};var v=function(e){function n(t,n){e.call(this,t,"global",null,n,!1),this.implicit={set:new Map,variables:[],left:[]}}return e&&(n.__proto__=e),n.prototype=Object.create(e&&e.prototype),n.prototype.constructor=n,n.prototype.__close=function(t){for(var n=this,r=[],o=0,s=this.__left.length;s>o;++o){var a=n.__left[o];a.__maybeImplicitGlobal&&!n.set.has(a.identifier.name)&&r.push(a.__maybeImplicitGlobal)}for(var i=0,l=r.length;l>i;++i){var c=r[i];n.__defineImplicit(c.pattern,new g(m.ImplicitGlobalVariable,c.pattern,c.node,null,null,null))}return this.implicit.left=this.__left,e.prototype.__close.call(this,t)},n.prototype.__defineImplicit=function(e,n){e&&e.type===t.Syntax.Identifier&&this.__defineGeneric(e.name,this.implicit.set,this.implicit.variables,e,n)},n}(y),x=function(e){function t(t,n,r){e.call(this,t,"module",n,r,!1)}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t}(y),_=function(e){function t(t,n,r){e.call(this,t,"function-expression-name",n,r,!1),this.__define(r.id,new g(m.FunctionName,r.id,r,null,null,null)),this.functionExpressionScope=!0}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t}(y),S=function(e){function t(t,n,r){e.call(this,t,"catch",n,r,!1)}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t}(y),w=function(e){function t(t,n,r){e.call(this,t,"with",n,r,!1)}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t.prototype.__close=function(t){var n=this;if(this.__shouldStaticallyClose(t))return e.prototype.__close.call(this,t);for(var r=0,o=this.__left.length;o>r;++r){var s=n.__left[r];s.tainted=!0,n.__delegateToUpperScope(s)}return this.__left=null,this.upper},t}(y),k=function(e){function t(t,n,r){e.call(this,t,"TDZ",n,r,!1)}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t}(y),E=function(e){function t(t,n,r){e.call(this,t,"block",n,r,!1)}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t}(y),j=function(e){function t(t,n,r){e.call(this,t,"switch",n,r,!1)}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t}(y),T=function(e){function n(n,r,o,s){e.call(this,n,"function",r,o,s),this.block.type!==t.Syntax.ArrowFunctionExpression&&this.__defineArguments()}return e&&(n.__proto__=e),n.prototype=Object.create(e&&e.prototype),n.prototype.constructor=n,n.prototype.isArgumentsMaterialized=function(){if(this.block.type===t.Syntax.ArrowFunctionExpression)return!1;if(!this.isStatic())return!0;var e=this.set.get("arguments");if(!e)throw new Error("Always have arguments variable.");return e.tainted||0!==e.references.length},n.prototype.isThisMaterialized=function(){return this.isStatic()?this.thisFound:!0},n.prototype.__defineArguments=function(){this.__defineGeneric("arguments",this.set,this.variables,null,null),this.taints.set("arguments",!0)},n}(y),O=function(e){function t(t,n,r){e.call(this,t,"for",n,r,!1)}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t}(y),C=function(e){function t(t,n,r){e.call(this,t,"class",n,r,!1)}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t}(y),R=function(e){this.scopes=[],this.globalScope=null,this.__nodeToScope=new WeakMap,this.__currentScope=null,this.__options=e,this.__declaredVariables=new WeakMap};R.prototype.__useDirective=function(){return this.__options.directive},R.prototype.__isOptimistic=function(){return this.__options.optimistic},R.prototype.__ignoreEval=function(){return this.__options.ignoreEval},R.prototype.__isNodejsScope=function(){return this.__options.nodejsScope},R.prototype.isModule=function(){return"module"===this.__options.sourceType},R.prototype.isImpliedStrict=function(){return this.__options.impliedStrict},R.prototype.isStrictModeSupported=function(){return this.__options.ecmaVersion>=5},R.prototype.__get=function(e){return this.__nodeToScope.get(e)},R.prototype.getDeclaredVariables=function(e){return this.__declaredVariables.get(e)||[]},R.prototype.acquire=function(e,t){function n(e){return"function"===e.type&&e.functionExpressionScope?!1:"TDZ"===e.type?!1:!0}var r,o,s,a;if(r=this.__get(e),!r||0===r.length)return null;if(1===r.length)return r[0];if(t){for(s=r.length-1;s>=0;--s)if(o=r[s],n(o))return o}else for(s=0,a=r.length;a>s;++s)if(o=r[s],n(o))return o;return null},R.prototype.acquireAll=function(e){return this.__get(e)},R.prototype.release=function(e,t){var n,r;return n=this.__get(e),n&&n.length?(r=n[0].upper,r?this.acquire(r.block,t):null):null},R.prototype.attach=function(){},R.prototype.detach=function(){},R.prototype.__nestScope=function(e){if(e instanceof v){if(null!==this.__currentScope)throw new Error("_currentScope is not null trying to nest scopes.");this.globalScope=e}return this.__currentScope=e,e},R.prototype.__nestGlobalScope=function(e){return this.__nestScope(new v(this,e))},R.prototype.__nestBlockScope=function(e){return this.__nestScope(new E(this,this.__currentScope,e))},R.prototype.__nestFunctionScope=function(e,t){return this.__nestScope(new T(this,this.__currentScope,e,t))},R.prototype.__nestForScope=function(e){return this.__nestScope(new O(this,this.__currentScope,e))},R.prototype.__nestCatchScope=function(e){return this.__nestScope(new S(this,this.__currentScope,e))},R.prototype.__nestWithScope=function(e){return this.__nestScope(new w(this,this.__currentScope,e))},R.prototype.__nestClassScope=function(e){return this.__nestScope(new C(this,this.__currentScope,e))},R.prototype.__nestSwitchScope=function(e){return this.__nestScope(new j(this,this.__currentScope,e))},R.prototype.__nestModuleScope=function(e){return this.__nestScope(new x(this,this.__currentScope,e))},R.prototype.__nestTDZScope=function(e){return this.__nestScope(new k(this,this.__currentScope,e))},R.prototype.__nestFunctionExpressionNameScope=function(e){return this.__nestScope(new _(this,this.__currentScope,e))},R.prototype.__isES6=function(){return this.__options.ecmaVersion>=6};var A=function(e){function n(t,n,r){e.call(this,null,t),this.rootPattern=n,this.callback=r,this.assignments=[],this.rightHandNodes=[],this.restElements=[]}return e&&(n.__proto__=e),n.prototype=Object.create(e&&e.prototype),n.prototype.constructor=n,n.isPattern=function(e){var n=e.type;return n===t.Syntax.Identifier||n===t.Syntax.ObjectPattern||n===t.Syntax.ArrayPattern||n===t.Syntax.SpreadElement||n===t.Syntax.RestElement||n===t.Syntax.AssignmentPattern},n.prototype.Identifier=function(e){var t=a(this.restElements);this.callback(e,{topLevel:e===this.rootPattern,rest:null!=t&&t.argument===e,assignments:this.assignments})},n.prototype.Property=function(e){e.computed&&this.rightHandNodes.push(e.key),this.visit(e.value)},n.prototype.ArrayPattern=function(e){var t,n,r,o=this;for(t=0,n=e.elements.length;n>t;++t)r=e.elements[t],o.visit(r)},n.prototype.AssignmentPattern=function(e){this.assignments.push(e),this.visit(e.left),this.rightHandNodes.push(e.right),this.assignments.pop()},n.prototype.RestElement=function(e){this.restElements.push(e),this.visit(e.argument),this.restElements.pop()},n.prototype.MemberExpression=function(e){e.computed&&this.rightHandNodes.push(e.property),this.rightHandNodes.push(e.object)},n.prototype.SpreadElement=function(e){this.visit(e.argument)},n.prototype.ArrayExpression=function(e){e.elements.forEach(this.visit,this)},n.prototype.AssignmentExpression=function(e){this.assignments.push(e),this.visit(e.left),this.rightHandNodes.push(e.right),this.assignments.pop()},n.prototype.CallExpression=function(e){var t=this;e.arguments.forEach(function(e){t.rightHandNodes.push(e)}),this.visit(e.callee)},n}(n.Visitor),D=function(e){function t(t,n){e.call(this,null,n.options),this.declaration=t,this.referencer=n}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t.prototype.visitImport=function(e,t){var n=this;this.referencer.visitPattern(e,function(e){n.referencer.currentScope().__define(e,new g(m.ImportBinding,e,t,n.declaration,null,null))})},t.prototype.ImportNamespaceSpecifier=function(e){var t=e.local||e.id;t&&this.visitImport(t,e)},t.prototype.ImportDefaultSpecifier=function(e){var t=e.local||e.id;this.visitImport(t,e)},t.prototype.ImportSpecifier=function(e){var t=e.local||e.id;e.name?this.visitImport(e.name,e):this.visitImport(t,e)},t}(n.Visitor),M=function(e){function n(t,n){e.call(this,null,t),this.options=t,this.scopeManager=n,this.parent=null,this.isInnerMethodDefinition=!1}return e&&(n.__proto__=e),n.prototype=Object.create(e&&e.prototype),n.prototype.constructor=n,n.prototype.currentScope=function(){return this.scopeManager.__currentScope},n.prototype.close=function(e){for(var t=this;this.currentScope()&&e===this.currentScope().block;)t.scopeManager.__currentScope=t.currentScope().__close(t.scopeManager)},n.prototype.pushInnerMethodDefinition=function(e){var t=this.isInnerMethodDefinition;return this.isInnerMethodDefinition=e,t},n.prototype.popInnerMethodDefinition=function(e){this.isInnerMethodDefinition=e},n.prototype.materializeTDZScope=function(e,t){this.scopeManager.__nestTDZScope(e,t),this.visitVariableDeclaration(this.currentScope(),m.TDZ,t.left,0,!0)},n.prototype.materializeIterationScope=function(e){var t,n=this;this.scopeManager.__nestForScope(e),t=e.left,this.visitVariableDeclaration(this.currentScope(),m.Variable,t,0),this.visitPattern(t.declarations[0].id,function(t){n.currentScope().__referencing(t,f.WRITE,e.right,null,!0,!0)})},n.prototype.referencingDefaultValue=function(e,t,n,r){var o=this.currentScope();t.forEach(function(t){o.__referencing(e,f.WRITE,t.right,n,e!==t.left,r)})},n.prototype.visitPattern=function(e,t,n){"function"==typeof t&&(n=t,t={processRightHandNodes:!1}),i(this.options,e,t.processRightHandNodes?this:null,n)},n.prototype.visitFunction=function(e){var n,r,o=this;for(e.type===t.Syntax.FunctionDeclaration&&this.currentScope().__define(e.id,new g(m.FunctionName,e.id,e,null,null,null)),e.type===t.Syntax.FunctionExpression&&e.id&&this.scopeManager.__nestFunctionExpressionNameScope(e),this.scopeManager.__nestFunctionScope(e,this.isInnerMethodDefinition),n=0,r=e.params.length;r>n;++n)o.visitPattern(e.params[n],{processRightHandNodes:!0},function(t,r){o.currentScope().__define(t,new b(t,e,n,r.rest)),o.referencingDefaultValue(t,r.assignments,null,!0)});e.rest&&this.visitPattern({type:"RestElement",argument:e.rest},function(t){o.currentScope().__define(t,new b(t,e,e.params.length,!0))}),e.body.type===t.Syntax.BlockStatement?this.visitChildren(e.body):this.visit(e.body),this.close(e)},n.prototype.visitClass=function(e){e.type===t.Syntax.ClassDeclaration&&this.currentScope().__define(e.id,new g(m.ClassName,e.id,e,null,null,null)),this.visit(e.superClass),this.scopeManager.__nestClassScope(e),e.id&&this.currentScope().__define(e.id,new g(m.ClassName,e.id,e)),this.visit(e.body),this.close(e)},n.prototype.visitProperty=function(e){var n,r;e.computed&&this.visit(e.key),r=e.type===t.Syntax.MethodDefinition,r&&(n=this.pushInnerMethodDefinition(!0)),this.visit(e.value),r&&this.popInnerMethodDefinition(n)},n.prototype.visitForIn=function(e){var n=this;e.left.type===t.Syntax.VariableDeclaration&&"var"!==e.left.kind?(this.materializeTDZScope(e.right,e),this.visit(e.right),this.close(e.right),this.materializeIterationScope(e),this.visit(e.body),this.close(e)):(e.left.type===t.Syntax.VariableDeclaration?(this.visit(e.left),this.visitPattern(e.left.declarations[0].id,function(t){n.currentScope().__referencing(t,f.WRITE,e.right,null,!0,!0)})):this.visitPattern(e.left,{processRightHandNodes:!0},function(t,r){var o=null;n.currentScope().isStrict||(o={pattern:t,node:e}),n.referencingDefaultValue(t,r.assignments,o,!1),n.currentScope().__referencing(t,f.WRITE,e.right,o,!0,!1)}),this.visit(e.right),this.visit(e.body))},n.prototype.visitVariableDeclaration=function(e,t,n,r,o){var s,a,i=this;s=n.declarations[r],a=s.init,this.visitPattern(s.id,{processRightHandNodes:!o},function(l,c){e.__define(l,new g(t,l,s,n,r,n.kind)),o||i.referencingDefaultValue(l,c.assignments,null,!0),a&&i.currentScope().__referencing(l,f.WRITE,a,null,!c.topLevel,!0)})},n.prototype.AssignmentExpression=function(e){var t=this;A.isPattern(e.left)?"="===e.operator?this.visitPattern(e.left,{processRightHandNodes:!0},function(n,r){var o=null;t.currentScope().isStrict||(o={pattern:n,node:e}),t.referencingDefaultValue(n,r.assignments,o,!1),t.currentScope().__referencing(n,f.WRITE,e.right,o,!r.topLevel,!1)}):this.currentScope().__referencing(e.left,f.RW,e.right):this.visit(e.left),this.visit(e.right)},n.prototype.CatchClause=function(e){var t=this;this.scopeManager.__nestCatchScope(e),this.visitPattern(e.param,{processRightHandNodes:!0},function(n,r){t.currentScope().__define(n,new g(m.CatchClause,e.param,e,null,null,null)),t.referencingDefaultValue(n,r.assignments,null,!0)}),this.visit(e.body),this.close(e)},n.prototype.Program=function(e){this.scopeManager.__nestGlobalScope(e),this.scopeManager.__isNodejsScope()&&(this.currentScope().isStrict=!1,this.scopeManager.__nestFunctionScope(e,!1)),this.scopeManager.__isES6()&&this.scopeManager.isModule()&&this.scopeManager.__nestModuleScope(e),this.scopeManager.isStrictModeSupported()&&this.scopeManager.isImpliedStrict()&&(this.currentScope().isStrict=!0),this.visitChildren(e),this.close(e)},n.prototype.Identifier=function(e){this.currentScope().__referencing(e)},n.prototype.UpdateExpression=function(e){A.isPattern(e.argument)?this.currentScope().__referencing(e.argument,f.RW,null):this.visitChildren(e)},n.prototype.MemberExpression=function(e){this.visit(e.object),e.computed&&this.visit(e.property)},n.prototype.Property=function(e){this.visitProperty(e)},n.prototype.MethodDefinition=function(e){this.visitProperty(e)},n.prototype.BreakStatement=function(){},n.prototype.ContinueStatement=function(){},n.prototype.LabeledStatement=function(e){this.visit(e.body)},n.prototype.ForStatement=function(e){e.init&&e.init.type===t.Syntax.VariableDeclaration&&"var"!==e.init.kind&&this.scopeManager.__nestForScope(e),this.visitChildren(e),this.close(e)},n.prototype.ClassExpression=function(e){this.visitClass(e)},n.prototype.ClassDeclaration=function(e){this.visitClass(e)},n.prototype.CallExpression=function(e){this.scopeManager.__ignoreEval()||e.callee.type!==t.Syntax.Identifier||"eval"!==e.callee.name||this.currentScope().variableScope.__detectEval(),this.visitChildren(e)},n.prototype.BlockStatement=function(e){this.scopeManager.__isES6()&&this.scopeManager.__nestBlockScope(e),this.visitChildren(e),this.close(e)},n.prototype.ThisExpression=function(){this.currentScope().variableScope.__detectThis()},n.prototype.WithStatement=function(e){this.visit(e.object),this.scopeManager.__nestWithScope(e),this.visit(e.body),this.close(e)},n.prototype.VariableDeclaration=function(e){var t,n,r,o,s=this;for(t="var"===e.kind?this.currentScope().variableScope:this.currentScope(),n=0,r=e.declarations.length;r>n;++n)o=e.declarations[n],s.visitVariableDeclaration(t,m.Variable,e,n),o.init&&s.visit(o.init)},n.prototype.SwitchStatement=function(e){var t,n,r=this;for(this.visit(e.discriminant),this.scopeManager.__isES6()&&this.scopeManager.__nestSwitchScope(e),t=0,n=e.cases.length;n>t;++t)r.visit(e.cases[t]);this.close(e)},n.prototype.FunctionDeclaration=function(e){this.visitFunction(e)},n.prototype.FunctionExpression=function(e){this.visitFunction(e)},n.prototype.ForOfStatement=function(e){this.visitForIn(e)},n.prototype.ForInStatement=function(e){this.visitForIn(e)},n.prototype.ArrowFunctionExpression=function(e){this.visitFunction(e)},n.prototype.ImportDeclaration=function(e){var t;!this.scopeManager.__isES6()||!this.scopeManager.isModule(),t=new D(e,this),t.visit(e)},n.prototype.visitExportDeclaration=function(e){return e.source?void 0:e.declaration?void this.visit(e.declaration):void this.visitChildren(e)},n.prototype.ExportDeclaration=function(e){this.visitExportDeclaration(e)},n.prototype.ExportNamedDeclaration=function(e){this.visitExportDeclaration(e)},n.prototype.ExportSpecifier=function(e){var t=e.id||e.local;this.visit(t)},n.prototype.MetaProperty=function(){},n}(n.Visitor),P="3.6.0";e.analyze=p,e.version=P,e.Reference=f,e.Variable=m,e.Scope=y,e.ScopeManager=R,Object.defineProperty(e,"__esModule",{value:!0})}),define("eslint/lib/config/environments",["eslint/conf/environments","module"],function(e,t){"use strict";function n(){Object.keys(e).forEach(function(t){r[t]=e[t]})}var r=Object.create(null);return n(),t.exports={load:n,get:function(e){return r[e]||null},define:function(e,t){r[e]=t},importPlugin:function(e,t){e.environments&&Object.keys(e.environments).forEach(function(n){this.define(t+"/"+n,e.environments[n])},this)},testReset:function(){r=Object.create(null),n()}},t.exports}),define("eslint/lib/utils/util",["exports"],function(e){var t="eslint-plugin-",n=/^(?:(?:Do)?While|For(?:In|Of)?|Switch)Statement$/;return e.mixin=function(e,t){Object.keys(t).forEach(function(n){e[n]=t[n]})},e.mergeConfigs=function r(e,t){return Object.keys(t).forEach(function(n){var o=t[n];return"plugins"===n?(e[n]||(e[n]=[]),void o.forEach(function(t){-1===e[n].indexOf(t)&&e[n].push(t)})):Array.isArray(e[n])&&!Array.isArray(o)&&"number"==typeof o?void(e[n][0]=t[n]):void(e[n]="object"!=typeof o||Array.isArray(o)?t[n]:r(e[n]||{},t[n]))}),e},e.removePluginPrefix=function(e){var n;return n=0===e.indexOf(t)?e.substring(t.length):e},e.PLUGIN_NAME_PREFIX=t,e.getDeclaration=function(e,t){for(var n=t;!0;){if(!n)return null;var r,o=e.name?e.name:e.identifier.name;if(n.variables.some(function(e){return e.name===o?(r=e,!0):!1}),r)return r;n=n.upper}},e.returnableStatement=function(e){switch(e.type){case"ReturnStatement":case"ThrowStatement":case"ContinueStatement":case"BreakStatement":return!0}return!1},e.getLabel=function(e){return"LabeledStatement"===e.parent.type?e.parent.label.name:null},e.isBreakableStatement=function(e){return n.test(e.type)},e}),define("javascript/nls/problems",{root:!0}),define("javascript/nls/root/problems",{eslintValidationFailure:"ESLint failed to validate this file because an error occurred: ${0}","check-tern-plugin":"To work in the '${0}' environment, the '${1}' plugin must be running.","check-tern-lib":"To work in the '${0}' environment, the '${1}' library must be running.",curly:"Statement should be enclosed in braces.","curly-description":"Require curly braces for all control statements.",eqeqeq:"Expected '${0}' and instead saw '${1}'.","eqeqeq-description":"Require the use of === and !==.","missing-doc":"Missing documentation for function '${0}'.","missing-doc-description":"Require JSDoc for all functions.","missing-nls":"Non-externalized string literal '${0}'.","missing-nls-description":"Disallow non-externalized string literals.","new-parens":"Missing parentheses invoking constructor.","new-parens-description":"Require parenthesis for constructors.","no-caller":"'arguments.${0}' is deprecated.","no-caller-description":"Warn on use of arguments.callee or arguments.caller.","no-comma-dangle":"Trailing commas in object expressions are discouraged.","no-comma-dangle-description":"Report extra trailing comma in object expressions.","no-cond-assign":"Expected a conditional expression and instead saw an assignment.","no-cond-assign-description":"Disallow assignment statements in control statements like if-else, do-while, while and for statements.","no-console":"Discouraged use of console in browser-based code.","no-console-description":"Disallow the use of 'console' in browser-run code.","no-constant-condition":"Discouraged use of constant as a conditional expression.","no-constant-condition-description":"Disallow use of a constant value as a conditional expression.","no-debugger":"'debugger' statement use is discouraged.","no-debugger-description":"Disallow use of the debugger keyword.","no-dupe-keys":"Duplicate object key '${0}'.","no-dupe-keys-description":"Warn when object contains duplicate keys.","no-empty-block":"Empty block should be removed or commented.","no-empty-block-description":"Warn when a code block is empty.","no-eval":"${0} function calls are discouraged.","no-eval-description":"Disallow use of eval function.","no-extra-semi":"Unnecessary semicolon.","no-extra-semi-description":"Warn about extraneous semi colons.","no-fallthrough":"Switch case may be entered by falling through the previous case.","no-fallthrough-description":"Warn when a switch case falls through.","no-implied-eval":"${0} function calls are discouraged.","no-implied-eval-description":"Disallow use of implied eval function.","no-iterator":"Discouraged __iterator__ property use.","no-iterator-description":"Warn when the __iterator__ property is used.","no-proto":"Discouraged __proto__ property use.","no-proto-description":"Warn when the __proto__ property is used.","no-jslint":"The '${0}' directive is unsupported, please use eslint-env.","no-jslint-description":"Warn when the jslint/jshint directive is used.","no-mixed-spaces-and-tabs":"Mixed spaces and tabs.","no-mixed-spaces-and-tabs-description":"Warn about mixed spaces and tabs.","no-new-array":"Use the array literal notation '[]'.","no-new-array-description":"Disallow use of the Array constructor.","no-new-func":"The Function constructor is eval.","no-new-func-description":"Disallow use of the Function constructor.","no-new-object":"Use the object literal notation '{}' or Object.create(null).","no-new-object-description":"Disallow use of the Object constructor.","no-new-wrappers":"Do not use '${0}' as a constructor.","no-new-wrappers-description":"Disallow creating new String, Number or Boolean via their constructor.","no-redeclare":"'${0}' is already defined.","no-redeclare-description":"Warn when variable or function is redeclared.","no-regex-spaces":"Avoid multiple spaces in regular expressions. Use ' {${0}}' instead.","no-regex-spaces-description":"Warn when multiple spaces are used in regular expressions.","no-reserved-keys":"Reserved words should not be used as property keys.","no-reserved-keys-description":"Warn when a reserved word is used as a property key.","no-shadow":"'${0}' is already declared in the upper scope.","no-shadow-description":"Warn when shadowing variable from upper scope.","no-shadow-global":"Variable '${0}' shadows a global member.","no-shadow-global-description":"Warn when a variable or parameter shadows a member from the global environment.","no-shadow-global-param":"Parameter '${0}' shadows a global member.","no-sparse-arrays":"Sparse array declarations should be avoided.","no-sparse-arrays-description":"Warn when sparse arrays are defined.","no-throw-literal":"Throw an Error instead.","no-throw-literal-description":"Warn when a Literal is used in a throw statement.","no-undef-defined":"'${0}' is undefined.","no-undef-expression-defined":"'${0}' is undefined.","no-undef-expression-defined-object":"'${0}' is undefined for '${1}' in ${2}.","no-undef-expression-defined-index":"'${0}' is undefined for '${1}' in ${2}.","no-undef-init":"Avoid explicitly initializing variables to 'undefined'.","no-undef-init-description":"Warn when variables are explicitly initialized to undefined.","no-undef-description":"Warn when used variable or function has not been defined.","no-unreachable":"Unreachable code.","no-unreachable-description":"Warn when code is not reachable.","no-unused-params":"Parameter '${0}' is never used.","no-unused-params-description":"Warn when function parameters are not used.","no-unused-vars-unused":"'${0}' is unused.","no-unused-vars-unused-funcdecl":"Function '${0}' is unused.","no-unused-vars-unread":"'${0}' is unread.","no-unused-vars-description":"Warn when declared variables are not used.","no-use-before-define":"'${0}' was used before it was defined.","no-use-before-define-description":"Warn when a variable, function or class is used before it is defined.","no-with":"Discouraged use of 'with' statement.","no-with-description":"Warn when the with statement is used.",radix:"Missing radix parameter.","unknown-require":"This library could not be found, type information for it will be incomplete.","unknown-require-plugin":"This library is available in a Tern plugin that is not currently loaded.","unknown-require-not-running":"Type information for this library might be available, but requires the '${0}' plug-in to be running.","missing-requirejs":"To use AMD, the 'requirejs' plug-in needs to be running.","radix-description":"Warn when parseInt() is called without the 'radix' parameter.","semi-missing":"Missing semicolon.","semi-extra":"Extra semicolon.","semi-description":"Warn about missing or extra semicolons.","unnecessary-nls":"Unnecessary $NON-NLS$ tag.","unnecessary-nls-description":"Disallow unnecessary non-NLS comments.","use-isnan":"Use the isNaN function to compare with NaN.","use-isnan-description":"Disallow comparison to the value NaN.","valid-typeof":"Invalid typeof comparison.","valid-typeof-description":"Warn when incorrectly comparing the result of a typeof expression.",noErrorDetailed:"Unknown error occurred","esmodules-not-running":"import/export declarations require the 'es_modules' plug-in to be running.",accessorPairGetter:"Getter is not present",accessorPairSetter:"Setter is not present","accessor-pairs-description":"Report when accessors don't come in pairs (getter, setter)",noControlRegex:"Unexpected control character in regular expression.","no-control-regex-description":"Disallow control characters in regular expressions",noConstantAssign:"'{{name}}' is constant.","no-const-assign-description":"Disallow modifying variables that are declared using const",noDuplicateCase:"Duplicate case label.","no-duplicate-case-description":"Disallow a duplicate case label",NoNegatedInLhs:"The 'in' expression's left operand is negated","no-negated-in-lhs-description":"Disallow negated left operand of in operator",noObjCalls:"'{{name}}' is not a function.","no-obj-calls-description":"Disallow global object as function calls",noElseReturn:"Unnecessary 'else' after 'return'.","no-else-return-description":"Report else after return",noEmptyCharacterClass:"Empty class.","no-empty-character-class-description":"Disallow empty character classes",noEmptyLabel:'Unexpected label "{{l}}"',"no-empty-label-description":"No empty labels",noEqNull:"Use '{{op}}=' to compare with 'null'.","no-eq-null-description":"Disallow null comparisons",noExtendNative:"{{builtin}} prototype is read only, properties should not be added.","no-extend-native-description":"Disallow extending of native objects",noExtraBind:"The function binding is unnecessary.","no-extra-bind-description":"Disallow unnecessary function binding.",noExtraBooleanCastIfStatement:"Redundant double negation in an if statement condition.",noExtraBooleanCastDoWhileStatement:"Redundant double negation in a do while loop condition.",noExtraBooleanCastWhileStatement:"Redundant double negation in a while loop condition.",noExtraBooleanCastConditionalExpression:"Redundant double negation in a ternary condition.",noExtraBooleanCastForStatement:"Redundant double negation in a for loop condition.",noExtraBooleanCastUnaryExpression:"Redundant multiple negation.",noExtraBooleanCastToBoolean:"Redundant double negation in call to Boolean().",noExtraBooleanCastConstructorCall:"Redundant double negation in Boolean constructor call.","no-extra-boolean-cast-description":"Discourage redundant double negation",noExtraParens:"Gratuitous parentheses around expression.","no-extra-parens-description":"Discourage redundant parentheses",noInvalidRegexp:"Invalid flags supplied to RegExp constructor '{{arg}}'","no-invalid-regexp-description":"Report invalid regular expressions",noSelfCompare:"Comparing to itself is potentially pointless.","no-self-compare-description":"Disallow self compare",noIrregularWhitespaces:"Irregular whitespace not allowed","no-irregular-whitespace-description":"No irregular whitespace:","no-self-assign-description":"Disallow self assignment","no-self-assign":"'${0}' is assigned to itself.","type-checked-consistent-return-description":"Detect inconsistent return values","inconsistent-return":"Inconsistent return types: '{{type1}}', '{{type2}}'","no-void":"Expected 'undefined' and instead saw 'void'.","no-void-description":"Disallow use of the void operator.",noImplicitCoercionBoolean:"use 'Boolean({{code}})' instead.",noImplicitCoercionIndexOf:"use '{{code}} !== -1' instead.",noImplicitCoercionNumber:"use 'Number({{code}})' instead.",noImplicitCoercionString:"use 'String({{code}})' instead.",noImplicitCoercionString2:"use '{{code}} = String({{code}})' instead.","no-implicit-coercion-description":"Disallow the type conversion with shorter notations.",noLoneBlock:"Block is redundant.",noLoneNestedBlock:"Nested block is redundant.","no-lone-blocks-description":"Disallow unecessary nested blocks",doublequote:'Strings must use double quotes (").',singlequote:"Strings must use single quotes (').",backtick:"Strings must use backtick quotes (`).","quotes-description":"Enforce quote style",yodaLeft:"Expected literal to be on the left side of {{operator}}.",yodaRight:"Expected literal to be on the right side of {{operator}}.","yoda-description":"Require or disallow Yoda conditions",noParamReassign:"Assignment to function parameter '{{name}}'.",noParamPropertyReassign:"Assignment to property of function parameter '{{name}}'.","no-param-reassign-description":"Disallow reassignment of function parameters",noNativeReassign:"Read-only global '{{name}}' should not be modified.","no-native-reassign-description":"Disallow reassignment of native objects",noUnusedExpression:"Expected an assignment or function call and instead saw an expression.","no-unused-expressions-description":"Disallow unused expressions",noInvalidThis:"Unexpected 'this'.","no-invalid-this-description":"Disallow this keywords outside of classes or class-like objects.","check-tern-plugin-description":"Check missing tern plugins.","missing-requirejs-description":"Check missing require libraries.","no-undef-expression-description":"Report undefined expressions.","unknown-require-description":"Report missing libraries or missing tern plugins.",noTrailingSpaces:"Trailing spaces not allowed.","no-trailing-spaces-description":"Disallow trailing whitespace at the end of lines.",notNum:"'${0}' must be a number",notArray:"'${0}' must be an array of strings",notEmpty:"'${0}' should not be empty",onlyStrings:"'${0}' entries can only be strings",notObject:"'${0}' must be an object",pluginNotObject:"plugin '${0}' must be an object",noDupes:"Duplicate entries are not allowed",problemInFile:"There is a problem with your .tern-project-file.",openFile:"Open the .tern-project file",errorParsing:"There was an error parsing the JSON in your .tern-project file",multiAttrProblems:"Multiple problems were found with attributes in your .tern-project file.",attrProblem:"A problem with one of the attributes in your .tern-project file was found.",multipleFileMatchesProblem:"Multiple file matches found for: ${0}. Defaulting to: ${1}.",noFileMatchProblem:"No file match found for: ${0}.",tooManyFileMatchProblems:"... (${0} more)",fileMatchProblems:"Problems found in the loadEagerly attribute of your .tern-project file.",fileMatchProgress:"Validating loadEagerly paths in your .tern-project file.",failedWrite:"There was a problem writing to your .tern-project file."}),define("orion/editor/stylers/lib/syntax",[],function(){return{id:"orion.lib",grammars:[{id:"orion.lib",repository:{brace_open:{match:"{",name:"punctuation.section.block.begin"},brace_close:{match:"}",name:"punctuation.section.block.end"},bracket_open:{match:"\\[",name:"punctuation.section.bracket.begin"},bracket_close:{match:"\\]",name:"punctuation.section.bracket.end"},parenthesis_open:{match:"\\(",name:"punctuation.section.parens.begin"},parenthesis_close:{match:"\\)",name:"punctuation.section.parens.end"},operator:{match:"(\\+|-|!|=|>|<|&|(\\|\\|))+",name:"punctuation.operator"},doc_block:{begin:"/\\*\\*",end:"\\*/",name:"comment.block.documentation",beginCaptures:{0:{name:"comment.block.documentation.start"}},endCaptures:{0:{name:"comment.block.documentation.end"}},patterns:[{match:"@(?:(?!\\*/)\\S)*",name:"meta.documentation.annotation"},{match:"<[^\\s>]*>",name:"meta.documentation.tag"},{match:"(\\b)(TODO)(\\b)(((?!\\*/).)*)",name:"meta.annotation.task.todo",captures:{2:{name:"keyword.other.documentation.task"},4:{name:"comment.block"}}}]},number_decimal:{match:"\\b-?(?:\\.\\d+|\\d+\\.?\\d*)(?:[eE][+-]?\\d+)?\\b",name:"constant.numeric.number"},number_hex:{match:"\\b0[xX][0-9A-Fa-f]+\\b",name:"constant.numeric.hex"},string_doubleQuote:{match:'"(?:\\\\.|[^"])*"?',name:"string.quoted.double"},string_singleQuote:{match:"'(?:\\\\.|[^'])*'?",name:"string.quoted.single"},todo_comment_singleLine:{match:"(\\b)(TODO)(\\b)(.*)",name:"meta.annotation.task.todo",captures:{2:{name:"keyword.other.documentation.task"},4:{name:"comment.line"}}}}},{id:"orion.c-like",repository:{comment_singleLine:{match:{match:"(//).*",literal:"//"},name:"comment.line.double-slash",captures:{1:{name:"comment.line.double-slash.start"}},patterns:[{include:"orion.lib#todo_comment_singleLine"}]},comment_block:{begin:{match:"/\\*",literal:"/*"},end:{match:"\\*/",literal:"*/"},name:"comment.block",beginCaptures:{0:{name:"comment.block.start"}},endCaptures:{0:{name:"comment.block.end"}},patterns:[{match:"(\\b)(TODO)(\\b)(((?!\\*/).)*)",name:"meta.annotation.task.todo",captures:{2:{name:"keyword.other.documentation.task"},4:{name:"comment.block"}}}]}}}],keywords:[]}
}),define("orion/editor/stylers/application_javascript/syntax",["orion/editor/stylers/lib/syntax"],function(e){var t=["class","const","debugger","delete","enum","export","extends","function","implements","import","in","instanceof","interface","let","new","package","private","protected","public","static","super","typeof","var","void","with"],n=["break","case","catch","continue","default","do","else","finally","for","if","return","switch","throw","try","while","yield"],r=["this"],o=["false","null","true","undefined"],s=[];return s.push.apply(s,e.grammars),s.push({id:"orion.js",contentTypes:["application/javascript"],patterns:[{include:"#string_multiline_singleQuote"},{include:"#string_multiline_doubleQuote"},{include:"#templateLiteral"},{include:"orion.lib#string_doubleQuote"},{include:"orion.lib#string_singleQuote"},{include:"orion.c-like#comment_singleLine"},{include:"#regex"},{include:"orion.lib#doc_block"},{include:"orion.c-like#comment_block"},{include:"#jsFunctionDef"},{include:"orion.lib#brace_open"},{include:"orion.lib#brace_close"},{include:"orion.lib#bracket_open"},{include:"orion.lib#bracket_close"},{include:"orion.lib#parenthesis_open"},{include:"orion.lib#parenthesis_close"},{include:"orion.lib#operator"},{include:"orion.lib#number_decimal"},{include:"orion.lib#number_hex"},{include:"#keywordsOperator"},{include:"#keywordsControl"},{include:"#languageConstant"},{include:"#languageVariable"}],repository:{jsFunctionDef:{begin:"(function)(\\s+[_$a-zA-Z\\xA0-\\uFFFF][_$a-zA-Z0-9\\xA0-\\uFFFF]*)?\\s*\\(",end:"\\)",captures:{1:{name:"keyword.operator.js"},2:{name:"entity.name.function.js"}},patterns:[{include:"orion.c-like#comment_singleLine"},{include:"orion.c-like#comment_block"},{match:"[^\\s,]+",name:"variable.parameter.js"}]},keywordsControl:{match:"\\b(?:"+n.join("|")+")\\b",name:"keyword.control.js"},keywordsOperator:{match:"\\b(?:"+t.join("|")+")\\b",name:"keyword.operator.js"},languageConstant:{match:"\\b(?:"+o.join("|")+")\\b",name:"constant.language.js"},languageVariable:{match:"\\b(?:"+r.join("|")+")\\b",name:"variable.language.js"},string_multiline_singleQuote:{begin:"'(?:\\\\.|[^\\\\'])*\\\\$",end:"^(?:$|(?:\\\\.|[^\\\\'])*('|[^\\\\]$))",name:"string.quoted.single.js"},string_multiline_doubleQuote:{begin:'"(?:\\\\.|[^\\\\"])*\\\\$',end:'^(?:$|(?:\\\\.|[^\\\\"])*("|[^\\\\]$))',name:"string.quoted.double.js"},regex:{match:"/(?![\\s\\*])(?:\\\\.|[^/])+/(?:[gim]{0,3})",name:"string.regexp.js"},templateLiteral:{begin:"`",end:"`",name:"string.quoted.backtick.js",patterns:[{begin:"\\$\\{",end:"\\}",name:"string.interpolated.js",patterns:[{include:"#string_multiline_singleQuote"},{include:"#string_multiline_doubleQuote"},{include:"#templateLiteral"},{include:"orion.lib#string_doubleQuote"},{include:"orion.lib#string_singleQuote"},{include:"orion.c-like#comment_singleLine"},{include:"#regex"},{include:"orion.lib#doc_block"},{include:"orion.c-like#comment_block"},{include:"#jsFunctionDef"},{include:"orion.lib#brace_open"},{include:"orion.lib#brace_close"},{include:"orion.lib#bracket_open"},{include:"orion.lib#bracket_close"},{include:"orion.lib#parenthesis_open"},{include:"orion.lib#parenthesis_close"},{include:"orion.lib#operator"},{include:"orion.lib#number_decimal"},{include:"orion.lib#number_hex"},{include:"#keywordsOperator"},{include:"#keywordsControl"},{include:"#languageConstant"},{include:"#languageVariable"}]}]}}}),{id:s[s.length-1].id,grammars:s,keywords:t.concat(n).concat(r).concat(o)}}),define("eslint/lib/rules/accessor-pairs",["i18n!javascript/nls/problems","module"],function(e,t){function n(e,t){return"Identifier"===e.type&&e.name===t}function r(e,t,r,o){var s=e.parent;return"CallExpression"===s.type&&"MemberExpression"===s.callee.type&&s.callee.computed===!1&&n(s.callee.object,r)&&n(s.callee.property,o)&&s.arguments[t]===e}function o(e){return r(e,2,"Object","defineProperty")||r(e,2,"Reflect","defineProperty")?!0:(e=e.parent.parent,"ObjectExpression"===e.type&&(r(e,1,"Object","create")||r(e,1,"Object","defineProperties")))}return t.exports=function(t){function n(n){for(var r=!1,i=!1,l=o(n),c=0,p=n.properties.length;p>c;c++){var u=n.properties[c],d="";switch("init"===u.kind?l&&!u.computed&&(d=u.key.name):d=u.kind,d){case"set":r=!0;break;case"get":i=!0}if(r&&i)break}a&&r&&!i?t.report(n,e.accessorPairGetter):s&&i&&!r&&t.report(n,e.accessorPairSetter)}var r=t.options[0]||{},s=r.getWithoutSet===!0,a=r.setWithoutGet!==!1;return{ObjectExpression:function(e){(a||s)&&n(e)}}},t.exports.schema=[{type:"object",properties:{getWithoutSet:{type:"boolean"},setWithoutGet:{type:"boolean"}},additionalProperties:!1}],t.exports}),define("eslint/lib/rules/no-control-regex",["i18n!javascript/nls/problems","module"],function(e,t){return t.exports=function(t){function n(e){if(e.value instanceof RegExp)return e.value;if("string"!=typeof e.value)return null;var n=t.getAncestors().pop();if(("NewExpression"===n.type||"CallExpression"===n.type)&&"Identifier"===n.callee.type&&"RegExp"===n.callee.name)try{return new RegExp(e.value)}catch(r){return null}}return{Literal:function(r){var o,s=n(r);s&&(o=s.toString(),/[\x00-\x1f]/.test(o)&&t.report(r,e.noControlRegex))}}},t.exports.schema=[],t.exports}),define("eslint/lib/rules/no-duplicate-case",["i18n!javascript/nls/problems","module"],function(e,t){return t.exports=function(t){return{SwitchStatement:function(n){var r={};n.cases.forEach(function(n){var o=t.getSource(n.test);r[o]?t.report(n.test,e.noDuplicateCase):r[o]=n})}}},t.exports.schema=[],t.exports}),define("eslint/lib/rules/no-else-return",["i18n!javascript/nls/problems","module"],function(e,t){return t.exports=function(t){function n(n){t.report(n,e.noElseReturn)}function r(e){return"ReturnStatement"===e.type}function o(e){if("BlockStatement"===e.type){var t=e.body,n=t[t.length-1];return n&&r(n)}return r(e)}function s(e){return e.alternate&&e.consequent&&"IfStatement"!==e.alternate.type}function a(e){return"IfStatement"===e.type&&s(e)&&o(e.alternate)&&o(e.consequent)}function i(e){return r(e)||a(e)}function l(e){return"BlockStatement"===e.type?e.body.some(i):i(e)}return{IfStatement:function(e){var r,o,s=t.getAncestors().pop();if("IfStatement"!==s.type||s.alternate!==e){for(r=[];"IfStatement"===e.type;e=e.alternate){if(!e.alternate)return;r.push(e.consequent),o=e.alternate}r.every(l)&&n(o)}}}},t.exports.schema=[],t.exports}),define("eslint/lib/rules/no-empty-character-class",["i18n!javascript/nls/problems","module"],function(e,t){var n=/^\/([^\\[]|\\.|\[([^\\\]]|\\.)+\])*\/[gimuy]*$/;return t.exports=function(t){return{Literal:function(r){var o=t.getFirstToken(r);"RegularExpression"!==o.type||n.test(o.value)||t.report(r,e.noEmptyCharacterClass)}}},t.exports.schema=[],t.exports}),define("eslint/lib/rules/no-empty-label",["i18n!javascript/nls/problems","module"],function(e,t){return t.exports=function(t){return{LabeledStatement:function(n){var r=n.body.type;"ForStatement"!==r&&"WhileStatement"!==r&&"DoWhileStatement"!==r&&"SwitchStatement"!==r&&"ForInStatement"!==r&&"ForOfStatement"!==r&&t.report(n,e.noEmptyLabel,{l:n.label.name})}}},t.exports.schema=[],t.exports}),define("eslint/lib/rules/no-eq-null",["i18n!javascript/nls/problems","module"],function(e,t){"use strict";return t.exports=function(t){function n(e,t){for(var n=e.getTokens(t),r=n.length,o=t.operator,s=0;r>s;s++){var a=n[s];if(a.value===o)return a}return null}return{BinaryExpression:function(r){var o="=="===r.operator||"!="===r.operator;("Literal"===r.right.type&&"null"===r.right.raw&&o||"Literal"===r.left.type&&"null"===r.left.raw&&o)&&t.report(r,e.noEqNull,{op:r.operator},n(t,r))}}},t.exports.schema=[],t.exports}),define("eslint/lib/rules/no-extra-boolean-cast",["i18n!javascript/nls/problems","module"],function(e,t){"use strict";return t.exports=function(t){return{UnaryExpression:function(n){var r=t.getAncestors(),o=r.pop(),s=r.pop();"!"===n.operator&&"UnaryExpression"===o.type&&"!"===o.operator&&("IfStatement"===s.type?t.report(n,e.noExtraBooleanCastIfStatement):"DoWhileStatement"===s.type?t.report(n,e.noExtraBooleanCastDoWhileStatement):"WhileStatement"===s.type?t.report(n,e.noExtraBooleanCastWhileStatement):"ConditionalExpression"===s.type&&o===s.test?t.report(n,e.noExtraBooleanCastConditionalExpression):"ForStatement"===s.type&&o===s.test?t.report(n,e.noExtraBooleanCastForStatement):"UnaryExpression"===s.type&&"!"===s.operator?t.report(n,e.noExtraBooleanCastUnaryExpression):"CallExpression"===s.type&&"Identifier"===s.callee.type&&"Boolean"===s.callee.name?t.report(n,e.noExtraBooleanCastToBoolean):"NewExpression"===s.type&&"Identifier"===s.callee.type&&"Boolean"===s.callee.name&&t.report(n,e.noExtraBooleanCastConstructorCall))}}},t.exports.schema=[],t.exports}),define("eslint/lib/rules/no-extra-parens",["i18n!javascript/nls/problems","module"],function(e,t){"use strict";return t.exports=function(t){function n(e){var t=y.getTokenBefore(e),n=y.getTokenAfter(e);return Boolean(t&&n)&&"("===t.value&&t.range[1]<=e.range[0]&&")"===n.value&&n.range[0]>=e.range[1]}function r(e){switch(e.type){case"SequenceExpression":return 0;case"AssignmentExpression":case"ArrowFunctionExpression":case"YieldExpression":return 1;case"ConditionalExpression":return 3;case"LogicalExpression":switch(e.operator){case"||":return 4;case"&&":return 5}case"BinaryExpression":switch(e.operator){case"|":return 6;case"^":return 7;case"&":return 8;case"==":case"!=":case"===":case"!==":return 9;case"<":case"<=":case">":case">=":case"in":case"instanceof":return 10;case"<<":case">>":case">>>":return 11;case"+":case"-":return 12;case"*":case"/":case"%":return 13}case"UnaryExpression":return 14;case"UpdateExpression":return 15;case"CallExpression":return"FunctionExpression"===e.callee.type?-1:16;case"NewExpression":return 17}return 18}function o(e){return v||"FunctionExpression"===e.type||"ArrowFunctionExpression"===e.type}function s(e){var t=y.getTokenBefore(e,1),r=y.getTokenAfter(e,1);return n(e)&&t&&r&&"("===t.value&&t.range[1]<=e.range[0]&&")"===r.value&&r.range[0]>=e.range[1]}function a(e){return o(e)&&n(e)}function i(e){return o(e)&&s(e)}function l(e){return x&&"AssignmentExpression"===e.test.type}function c(e){for(;e;){if("ReturnStatement"===e.type||"ArrowFunctionExpression"===e.type&&"BlockStatement"!==e.body.type)return!0;e=e.parent}return!1}function p(e){return"AssignmentExpression"===e.type?!0:"ConditionalExpression"!==e.type||"AssignmentExpression"!==e.consequent.type&&"AssignmentExpression"!==e.alternate.type?e.left&&"AssignmentExpression"===e.left.type||e.right&&"AssignmentExpression"===e.right.type?!0:!1:!0}function u(e){return S&&c(e)?"ReturnStatement"===e.type?e.argument&&p(e.argument):p("ArrowFunctionExpression"===e.type&&"BlockStatement"!==e.body.type?e.body:e):!1}function d(e,t){return e.loc.end.line===t.loc.start.line?a(t):i(t)}function h(e){for(var t=e.parent;t;){switch(t.type){case"SequenceExpression":if(t.expressions[0]!==e||n(e))return!1;break;case"UnaryExpression":case"UpdateExpression":if(t.prefix||n(e))return!1;break;case"BinaryExpression":case"LogicalExpression":if(t.left!==e||n(e))return!1;break;case"ConditionalExpression":if(t.test!==e||n(e))return!1;break;case"CallExpression":if(t.callee!==e||n(e))return!1;break;case"MemberExpression":if(t.object!==e||n(e))return!1;break;case"ExpressionStatement":return!0;default:return!1}e=t,t=t.parent}throw new Error("unreachable")}function f(n){var r=y.getTokenBefore(n);t.report(n,r.loc.start,e.noExtraParens)}function m(e){a(e.argument)&&r(e.argument)>=r(e)&&f(e.argument)}function g(e){a(e.callee)&&r(e.callee)>=r(e)&&("CallExpression"!==e.type||"FunctionExpression"!==e.callee.type||i(e.callee))&&f(e.callee),1===e.arguments.length?i(e.arguments[0])&&r(e.arguments[0])>=r({type:"AssignmentExpression"})&&f(e.arguments[0]):[].forEach.call(e.arguments,function(e){a(e)&&r(e)>=r({type:"AssignmentExpression"})&&f(e)})}function b(e){if(!_){var t=r(e);a(e.left)&&r(e.left)>=t&&f(e.left),a(e.right)&&r(e.right)>t&&f(e.right)}}var y=t.getSourceCode(),v="functions"!==t.options[0],x=v&&t.options[1]&&t.options[1].conditionalAssign===!1,_=v&&t.options[1]&&t.options[1].nestedBinaryExpressions===!1,S=v&&t.options[1]&&t.options[1].returnAssign===!1;return{ArrayExpression:function(e){[].forEach.call(e.elements,function(e){e&&a(e)&&r(e)>=r({type:"AssignmentExpression"})&&f(e)})},ArrowFunctionExpression:function(e){if(!u(e)&&"BlockStatement"!==e.body.type){if("{"!==y.getFirstToken(e.body).value&&a(e.body)&&r(e.body)>=r({type:"AssignmentExpression"}))return void f(e.body);if("ObjectExpression"===e.body.type&&i(e.body))return void f(e.body)}},AssignmentExpression:function(e){u(e)||a(e.right)&&r(e.right)>=r(e)&&f(e.right)},BinaryExpression:b,CallExpression:g,ConditionalExpression:function(e){u(e)||(a(e.test)&&r(e.test)>=r({type:"LogicalExpression",operator:"||"})&&f(e.test),a(e.consequent)&&r(e.consequent)>=r({type:"AssignmentExpression"})&&f(e.consequent),a(e.alternate)&&r(e.alternate)>=r({type:"AssignmentExpression"})&&f(e.alternate))},DoWhileStatement:function(e){i(e.test)&&!l(e)&&f(e.test)},ExpressionStatement:function(e){var t,n,r;a(e.expression)&&(r=y.getFirstTokens(e.expression,2),t=r[0],n=r[1],t&&("{"===t.value||!("function"!==t.value||"function"===t.value&&v)||"class"===t.value||"let"===t.value&&n&&"["===n.value)||f(e.expression))},ForInStatement:function(e){a(e.right)&&f(e.right)},ForOfStatement:function(e){a(e.right)&&f(e.right)},ForStatement:function(e){e.init&&a(e.init)&&f(e.init),e.test&&a(e.test)&&!l(e)&&f(e.test),e.update&&a(e.update)&&f(e.update)},IfStatement:function(e){i(e.test)&&!l(e)&&f(e.test)},LogicalExpression:b,MemberExpression:function(e){a(e.object)&&r(e.object)>=r(e)&&(e.computed||!("Literal"===e.object.type&&"number"==typeof e.object.value&&/^[0-9]+$/.test(y.getFirstToken(e.object).value)||"Literal"===e.object.type&&e.object.regex))&&("FunctionExpression"!==e.object.type&&"ClassExpression"!==e.object.type||!h(e)||i(e.object))&&f(e.object),e.computed&&a(e.property)&&f(e.property)},NewExpression:g,ObjectExpression:function(e){[].forEach.call(e.properties,function(e){var t=e.value;t&&a(t)&&r(t)>=r({type:"AssignmentExpression"})&&f(t)})},ReturnStatement:function(e){var t=y.getFirstToken(e);u(e)||!e.argument||!d(t,e.argument)||"Literal"===e.argument.type&&e.argument.regex||f(e.argument)},SequenceExpression:function(e){[].forEach.call(e.expressions,function(t){a(t)&&r(t)>=r(e)&&f(t)})},SwitchCase:function(e){e.test&&a(e.test)&&f(e.test)},SwitchStatement:function(e){i(e.discriminant)&&f(e.discriminant)},ThrowStatement:function(e){var t=y.getFirstToken(e);d(t,e.argument)&&f(e.argument)},UnaryExpression:m,UpdateExpression:m,VariableDeclarator:function(e){e.init&&a(e.init)&&r(e.init)>=r({type:"AssignmentExpression"})&&("Literal"!==e.init.type||!e.init.regex)&&f(e.init)},WhileStatement:function(e){i(e.test)&&!l(e)&&f(e.test)},WithStatement:function(e){i(e.object)&&f(e.object)},YieldExpression:function(e){var t;e.argument&&(t=y.getFirstToken(e),(r(e.argument)>=r(e)&&d(t,e.argument)||i(e.argument))&&f(e.argument))}}},t.exports.schema={anyOf:[{type:"array",items:[{"enum":["functions"]}],minItems:0,maxItems:1},{type:"array",items:[{"enum":["all"]},{type:"object",properties:{conditionalAssign:{type:"boolean"},nestedBinaryExpressions:{type:"boolean"},returnAssign:{type:"boolean"}},additionalProperties:!1}],minItems:0,maxItems:2}]},t.exports}),define("eslint/lib/rules/no-invalid-regexp",["acorn/dist/acorn","i18n!javascript/nls/problems","module"],function(e,t,n){return n.exports=function(n){function r(e){return e&&"Literal"===e.type&&"string"==typeof e.value}function o(o){if("Identifier"===o.callee.type&&"RegExp"===o.callee.name&&r(o.arguments[0])){var s=r(o.arguments[1])?o.arguments[1].value:"";a&&(s=s.replace(new RegExp("["+a+"]","gi"),""));try{void new RegExp(o.arguments[0].value)}catch(i){n.report(o,i.message)}if(s)try{var l=e.parse("/./"+s,n.parserOptions);if(l.body.length>0){var c=l.body[0],p=c.expression;p&&null===p.value&&n.report(o,t.noInvalidRegexp,{arg:s})}}catch(u){n.report(o,t.noInvalidRegexp,{arg:s})}}}var s=n.options[0],a="";return s&&s.allowConstructorFlags&&(a=s.allowConstructorFlags.join("")),{CallExpression:o,NewExpression:o}},n.exports.schema=[{type:"object",properties:{allowConstructorFlags:{type:"array",items:{type:"string"}}},additionalProperties:!1}],n.exports}),define("eslint/lib/rules/no-negated-in-lhs",["i18n!javascript/nls/problems","module"],function(e,t){return t.exports=function(t){return{BinaryExpression:function(n){"in"===n.operator&&"UnaryExpression"===n.left.type&&"!"===n.left.operator&&t.report(n,e.NoNegatedInLhs)}}},t.exports.schema=[],t.exports}),define("eslint/lib/rules/no-obj-calls",["i18n!javascript/nls/problems","module"],function(e,t){"use strict";return t.exports=function(t){return{CallExpression:function(n){if("Identifier"===n.callee.type){var r=n.callee.name;("Math"===r||"JSON"===r)&&t.report(n,e.noObjCalls,{name:r})}}}},t.exports.schema=[],t.exports}),define("eslint/lib/rules/no-self-compare",["i18n!javascript/nls/problems","module"],function(e,t){"use strict";return t.exports=function(t){return{BinaryExpression:function(n){var r=["===","==","!==","!=",">","<",">=","<="];r.indexOf(n.operator)>-1&&("Identifier"===n.left.type&&"Identifier"===n.right.type&&n.left.name===n.right.name||"Literal"===n.left.type&&"Literal"===n.right.type&&n.left.value===n.right.value)&&t.report(n,e.noSelfCompare)}}},t.exports.schema=[],t.exports}),define("eslint/lib/rules/no-irregular-whitespace",["i18n!javascript/nls/problems","module"],function(e,t){"use strict";var n=/[\f\v\u0085\u00A0\ufeff\u00a0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u200b\u202f\u205f\u3000\u2028\u2029]/,r=/[\f\v\u0085\u00A0\ufeff\u00a0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u200b\u202f\u205f\u3000]+/gm,o=/[\u2028\u2029]/gm,s=/\r\n|\r|\n|\u2028|\u2029/g;return t.exports=function(t){function a(e){var t=e.loc.start,n=e.loc.end;f=f.filter(function(e){var r=e[1];return r.line>=t.line&&r.line<=n.line&&r.column>=t.column&&(r.column<=n.column||r.line<n.line)?!1:!0})}function i(e){var t=y&&"string"==typeof e.value,r=v&&e.value instanceof RegExp;(t||r)&&n.test(e.raw)&&a(e)}function l(e){"string"==typeof e.value.raw&&n.test(e.value.raw)&&a(e)}function c(e){n.test(e.value)&&a(e)}function p(t){var n=_.lines;n.forEach(function(n,o){for(var s,a,i=o+1;null!==(a=r.exec(n));)s={line:i,column:a.index},f.push([t,s,e.noIrregularWhitespaces])})}function u(t){for(var n,r,a,i=_.getText(),l=_.lines,c=i.match(s),p=-1;null!==(a=o.exec(i));)n=c.indexOf(a[0],p+1)||0,r={line:n+1,column:l[n].length},f.push([t,r,e.noIrregularWhitespaces]),p=n}function d(e){m.push(e)}function h(){}var f=[],m=[],g=t.options[0]||{},b=Boolean(g.skipComments),y=g.skipStrings!==!1,v=Boolean(g.skipRegExps),x=Boolean(g.skipTemplates),_=t.getSourceCode(),S={};return n.test(_.getText())?(S.Program=function(e){p(e),u(e)},S.Identifier=i,S.Literal=i,S.TemplateElement=x?l:h,S.LineComment=b?d:h,S.BlockComment=b?d:h,S["Program:exit"]=function(){b&&m.forEach(c),f.forEach(function(e){t.report.apply(t,e)})}):S.Program=h,S},t.exports.schema=[{type:"object",properties:{skipComments:{type:"boolean"},skipStrings:{type:"boolean"},skipTemplates:{type:"boolean"},skipRegExps:{type:"boolean"}},additionalProperties:!1}],t.exports}),define("eslint/lib/rules/no-const-assign",["i18n!javascript/nls/problems","module"],function(e,t){"use strict";return t.exports=function(t){function n(e,t,n){var r=e.identifier;return r&&e.init===!1&&e.isWrite()&&(0===t||n[t-1].identifier!==r)}function r(e){return e.filter(n)}function o(n){r(n.references).forEach(function(n){t.report(n.identifier,e.noConstantAssign,{name:n.identifier.name})})}return{VariableDeclaration:function(e){"const"===e.kind&&t.getDeclaredVariables(e).forEach(o)}}},t.exports.schema=[],t.exports}),define("eslint/lib/rules/no-implicit-coercion",["i18n!javascript/nls/problems","module"],function(e,t){return t.exports=function(t){function n(e){return e=e||{},{"boolean":"boolean"in e?Boolean(e["boolean"]):!0,number:"number"in e?Boolean(e.number):!0,string:"string"in e?Boolean(e.string):!0}}function r(e){return"!"===e.operator&&"UnaryExpression"===e.argument.type&&"!"===e.argument.operator}function o(e){return"~"===e.operator&&"CallExpression"===e.argument.type&&"MemberExpression"===e.argument.callee.type&&"Identifier"===e.argument.callee.property.type&&u.test(e.argument.callee.property.name)}function s(e){return"*"===e.operator&&("Literal"===e.left.type&&1===e.left.value||"Literal"===e.right.type&&1===e.right.value)}function a(e){return"Literal"===e.type&&"number"==typeof e.value||"CallExpression"===e.type&&("Number"===e.callee.name||"parseInt"===e.callee.name||"parseFloat"===e.callee.name)}function i(e){var t=e.left,n=e.right;return"BinaryExpression"===n.type||a(n)?"BinaryExpression"===t.type||a(t)?void 0:t:n}function l(e){return"+"===e.operator&&("Literal"===e.left.type&&""===e.left.value||"Literal"===e.right.type&&""===e.right.value)}function c(e){return"+="===e.operator&&"Literal"===e.right.type&&""===e.right.value}function p(e,t){return"Literal"===e.left.type&&e.left.value===t?e.right:e.left}var u=/^(?:i|lastI)ndexOf$/,d=n(t.options[0]);return{UnaryExpression:function(n){d["boolean"]&&r(n)&&t.report(n,e.noImplicitCoercionBoolean,{code:t.getSource(n.argument.argument)}),d["boolean"]&&o(n)&&t.report(n,e.noImplicitCoercionIndexOf,{code:t.getSource(n.argument)}),d.number&&"+"===n.operator&&!a(n.argument)&&t.report(n,e.noImplicitCoercionNumber,{code:t.getSource(n.argument)})},"BinaryExpression:exit":function(n){var r=d.number&&s(n)&&i(n);r&&t.report(n,e.noImplicitCoercionNumber,{code:t.getSource(r)}),d.string&&l(n)&&t.report(n,e.noImplicitCoercionString,{code:t.getSource(p(n,""))})},AssignmentExpression:function(n){d.string&&c(n)&&t.report(n,e.noImplicitCoercionString2,{code:t.getSource(p(n,""))})}}},t.exports.schema=[{type:"object",properties:{"boolean":{type:"boolean"},number:{type:"boolean"},string:{type:"boolean"}},additionalProperties:!1}],t.exports}),define("eslint/lib/rules/no-extra-bind",["i18n!javascript/nls/problems","module"],function(e,t){"use strict";return t.exports=function(t){function n(n){var r=n.parent;t.report(r.property,e.noExtraBind)}function r(e){if(e.computed)switch(e.property.type){case"Literal":return String(e.property.value);case"TemplateLiteral":if(0===e.property.expressions.length)return e.property.quasis[0].value.cooked;default:return!1}return e.property.name}function o(e){var t=e.parent,n=t.parent;return n&&"CallExpression"===n.type&&n.callee===t&&1===n.arguments.length&&"MemberExpression"===t.type&&t.object===e&&"bind"===r(t)}function s(e){c={isBound:o(e),thisFound:!1,upper:c}}function a(e){c.isBound&&!c.thisFound&&n(e),c=c.upper}function i(e){o(e)&&n(e)}function l(){c&&(c.thisFound=!0)}var c=null;return{"ArrowFunctionExpression:exit":i,FunctionDeclaration:s,"FunctionDeclaration:exit":a,FunctionExpression:s,"FunctionExpression:exit":a,ThisExpression:l}},t.exports.schema=[],t.exports}),define("eslint/lib/rules/no-extend-native",["eslint/conf/globals","i18n!javascript/nls/problems","module"],function(e,t,n){"use strict";return n.exports=function(n){var r=n.options[0]||{},o=r.exceptions||[],s=Object.keys(e.builtin).filter(function(e){return e[0].toUpperCase()===e[0]});return o.length&&(s=s.filter(function(e){return-1===o.indexOf(e)})),{AssignmentExpression:function(e){var r,o=e.left;"MemberExpression"===o.type&&"MemberExpression"===o.object.type&&(r=o.object.computed?"Literal"===o.object.property.type&&"prototype"===o.object.property.value:"prototype"===o.object.property.name,r&&s.forEach(function(r){o.object.object.name===r&&n.report(e,t.noExtendNative,{builtin:r})}))},CallExpression:function(e){var r,o,a=e.callee;"MemberExpression"!==a.type||"Object"!==a.object.name||"defineProperty"!==a.property.name&&"defineProperties"!==a.property.name||(r=e.arguments[0],o=r.object,o&&"Identifier"===o.type&&s.indexOf(o.name)>-1&&"prototype"===r.property.name&&n.report(e,t.noExtendNative,{builtin:o.name}))}}},n.exports.schema=[{type:"object",properties:{exceptions:{type:"array",items:{type:"string"},uniqueItems:!0}},additionalProperties:!1}],n.exports}),define("eslint/lib/rules/no-lone-blocks",["i18n!javascript/nls/problems","module"],function(e,t){"use strict";return t.exports=function(t){function n(n){var r=t.getAncestors().pop();t.report(n,"Program"===r.type?e.noLoneBlock:e.noLoneNestedBlock)}function r(){var e=t.getAncestors().pop();return"BlockStatement"===e.type||"Program"===e.type}function o(){if(0!==a.length){var e=t.getAncestors().pop();a[a.length-1]===e&&a.pop()}}var s,a=[];return s={BlockStatement:function(e){r(e)&&n(e)}},t.parserOptions.ecmaVersion>=6&&(s={BlockStatement:function(e){r(e)&&a.push(e)},"BlockStatement:exit":function(e){a.length>0&&a[a.length-1]===e&&(a.pop(),n(e))}},s.VariableDeclaration=function(e){("let"===e.kind||"const"===e.kind)&&o(e)},s.FunctionDeclaration=function(e){t.getScope().isStrict&&o(e)},s.ClassDeclaration=o),s},t.exports.schema=[],t.exports}),define("eslint/lib/rules/quotes",["i18n!javascript/nls/problems","module"],function(e,t){"use strict";function n(e,t){return e[0]===t&&e[e.length-1]===t}var r={"double":{quote:'"',alternateQuote:"'",description:"doublequote",nlsDescription:e.doublequote},single:{quote:"'",alternateQuote:'"',description:"singlequote",nlsDescription:e.singlequote},backtick:{quote:"`",alternateQuote:'"',description:"backtick",nlsDescription:e.backtick}},o="avoid-escape",s=/^(?:Arrow)?Function(?:Declaration|Expression)$/;return t.exports=function(e){function t(e){return 0===e.type.indexOf("JSX")}function a(e){return"ExpressionStatement"===e.type&&"Literal"===e.expression.type&&"string"==typeof e.expression.value}function i(e){var t=e.parent.parent;if("Program"!==t.type&&("BlockStatement"!==t.type||!s.test(t.parent.type)))return!1;for(var n=0;n<t.body.length;++n){var r=t.body[n];if(r===e.parent)return!0;if(!a(r))break}return!1}function l(e){var t=e.parent;switch(t.type){case"ExpressionStatement":return i(e);case"Property":return t.key===e&&!t.computed;case"ImportDeclaration":case"ExportNamedDeclaration":case"ExportAllDeclaration":return t.source===e;default:return!1}}var c=e.options[0],p=r[c||"double"],u=e.options[1],d=u&&u.avoidEscape===!0,h=u&&u.allowTemplateLiterals===!0;return u===o&&(d=!0),{Literal:function(o){var s,a=o.value,i=o.raw;if(p&&"string"==typeof a&&(s="backtick"===c&&l(o)||t(o.parent)||n(i,p.quote),!s&&d&&(s=n(i,p.alternateQuote)&&i.indexOf(p.quote)>=0),!s)){var u=Object.create(null);u.quote=r[c].quote,e.report(o,p.nlsDescription,{data:u})}},TemplateLiteral:function(t){if(!h&&"backtick"!==c&&"TaggedTemplateExpression"!==t.parent.type){var n=1===t.quasis.length&&-1===t.quasis[0].value.cooked.indexOf("\n");if(n){var o=Object.create(null);o.quote=r[c].quote,o.oldQuote="`",e.report(t,p.nlsDescription,{data:o})}}}}},t.exports.schema=[{"enum":["single","double","backtick"]},{anyOf:[{"enum":["avoid-escape"]},{type:"object",properties:{avoidEscape:{type:"boolean"},allowTemplateLiterals:{type:"boolean"}},additionalProperties:!1}]}],t.exports}),define("eslint/lib/rules/yoda",["i18n!javascript/nls/problems","module"],function(e,t){"use strict";function n(e){return/^(==|===|!=|!==|<|>|<=|>=)$/.test(e)}function r(e){return/^(==|===)$/.test(e)}function o(e){return["<","<="].indexOf(e)>=0}function s(e){return"UnaryExpression"===e.type&&"-"===e.operator&&e.prefix&&"Literal"===e.argument.type&&"number"==typeof e.argument.value}function a(e){return"Literal"===e.type?e:s(e)?{type:"Literal",value:-e.argument.value,raw:"-"+e.argument.value}:null}function i(e,t){if(e.type!==t.type)return!1;switch(e.type){case"Identifier":return e.name===t.name;case"Literal":return e.value===t.value;case"MemberExpression":return i(e.object,t.object)&&i(e.property,t.property);case"ThisExpression":return!0;default:return!1}}return t.exports=function(t){function l(e){function t(){var t,n;return"&&"===e.operator&&(t=a(s.left))&&(n=a(l.right))&&t.value<=n.value&&i(s.right,l.left)}function n(){var t,n;return"||"===e.operator&&(t=a(s.right))&&(n=a(l.left))&&t.value<=n.value&&i(s.left,l.right)}function r(){var t,n;return(t=d.getTokenBefore(e))&&"("===t.value&&(n=d.getTokenAfter(e))&&")"===n.value}var s=e.left,l=e.right;return"LogicalExpression"===e.type&&"BinaryExpression"===s.type&&"BinaryExpression"===l.type&&o(s.operator)&&o(l.operator)&&(t()||n())&&r()}var c="always"===t.options[0],p=t.options[1]&&t.options[1].exceptRange,u=t.options[1]&&t.options[1].onlyEquality,d=t.getSourceCode();return{BinaryExpression:c?function(o){"Literal"!==o.right.type&&!s(o.right)||"Literal"===o.left.type||s(o.left)||!r(o.operator)&&u||!n(o.operator)||p&&l(t.getAncestors().pop())||t.report(o,e.yodaLeft,{operator:o.operator})}:function(o){"Literal"!==o.left.type&&!s(o.left)||"Literal"===o.right.type||s(o.right)||!r(o.operator)&&u||!n(o.operator)||p&&l(t.getAncestors().pop())||t.report(o,e.yodaRight,{operator:o.operator})}}},t.exports.schema=[{"enum":["always","never"]},{type:"object",properties:{exceptRange:{type:"boolean"},onlyEquality:{type:"boolean"}},additionalProperties:!1}],t.exports}),define("eslint/lib/rules/no-param-reassign",["i18n!javascript/nls/problems","module"],function(e,t){"use strict";var n=/(?:Statement|Declaration|Function(?:Expression)?|Program)$/;return t.exports=function(t){function r(e){for(var t=e.identifier,r=t.parent;r&&!n.test(r.type);){switch(r.type){case"AssignmentExpression":return r.left===t;case"UpdateExpression":return!0;case"UnaryExpression":if("delete"===r.operator)return!0;break;case"CallExpression":if(r.callee!==t)return!1;break;case"MemberExpression":if(r.property===t)return!1}t=r,r=t.parent}return!1}function o(n,o,s){var a=n.identifier;!a||n.init||0!==o&&s[o-1].identifier===a||(n.isWrite()?t.report(a,e.noParamReassign,{name:a.name}):i&&r(n)&&t.report(a,e.noParamPropertyReassign,{name:a.name}))}function s(e){"Parameter"===e.defs[0].type&&e.references.forEach(o)}function a(e){t.getDeclaredVariables(e).forEach(s)}var i=t.options[0]&&Boolean(t.options[0].props);return{"FunctionDeclaration:exit":a,"FunctionExpression:exit":a,"ArrowFunctionExpression:exit":a}},t.exports.schema=[{type:"object",properties:{props:{type:"boolean"}},additionalProperties:!1}],t.exports}),define("eslint/lib/rules/no-native-reassign",["i18n!javascript/nls/problems","module"],function(e,t){"use strict";return t.exports=function(t){function n(n,r,o){var s=n.identifier;n.init!==!1||!n.isWrite()||0!==r&&o[r-1].identifier===s||t.report({node:s,message:e.noNativeReassign,data:{name:s.name}})}function r(e){e.writeable===!1&&-1===s.indexOf(e.name)&&e.references.forEach(n)}var o=t.options[0],s=o&&o.exceptions||[];return{Program:function(){var e=t.getScope();e.variables.forEach(r)}}},t.exports.schema=[{type:"object",properties:{exceptions:{type:"array",items:{type:"string"},uniqueItems:!0}},additionalProperties:!1}],t.exports}),define("eslint/lib/rules/no-unused-expressions",["i18n!javascript/nls/problems","module"],function(e,t){return t.exports=function(t){function n(e){return"ExpressionStatement"===e.type&&"Literal"===e.expression.type&&"string"==typeof e.expression.value}function r(e,t){for(var n=0,r=t.length;r>n&&e(t[n]);++n);return[].slice.call(t,0,n)}function o(e){return r(n,e.body)}function s(e,t){var n=t[t.length-1],r=t[t.length-2];return("Program"===n.type||"BlockStatement"===n.type&&/Function/.test(r.type))&&o(n).indexOf(e)>=0}function a(e){return c&&"ConditionalExpression"===e.type?a(e.consequent)&&a(e.alternate):l&&"LogicalExpression"===e.type?a(e.right):/^(?:Assignment|Call|New|Update|Yield)Expression$/.test(e.type)||"UnaryExpression"===e.type&&["delete","void"].indexOf(e.operator)>=0}var i=t.options[0]||{},l=i.allowShortCircuit||!1,c=i.allowTernary||!1,p=!1;return{Program:function(e){return e.errors&&0!==e.errors.length?void(p=!0):void 0},ExpressionStatement:function(n){p||a(n.expression)||s(n,t.getAncestors())||t.report(n,e.noUnusedExpression)}}},t.exports.schema=[{type:"object",properties:{allowShortCircuit:{type:"boolean"},allowTernary:{type:"boolean"}},additionalProperties:!1}],t.exports
}),define("eslint/lib/rules/no-invalid-this",["i18n!javascript/nls/problems","module"],function(e,t){"use strict";function n(e,t){var n=t.getJSDocComment(e);return n&&u.test(n.value)?!0:t.getComments(e).leading.some(function(e){return u.test(e.value)})}function r(e){return"MemberExpression"===e.type&&"Identifier"===e.object.type&&"Reflect"===e.object.name&&"Identifier"===e.property.type&&"apply"===e.property.name&&e.computed===!1}function o(e){return"MemberExpression"===e.type&&"Identifier"===e.object.type&&m.test(e.object.name)&&"Identifier"===e.property.type&&"from"===e.property.name&&e.computed===!1}function s(e){for(var t=e;t;){if("Identifier"===t.type)return h.test(t.name);{if("MemberExpression"!==t.type||t.computed)break;t=t.property}}return!1}function a(e){return e.id&&e.id.name[0]!==e.id.name[0].toLocaleLowerCase()}function i(e){for(var t=e;t;){if(f.test(t.type))return t;t=t.parent}return null}function l(e){return"Literal"===e.type&&null===e.value||"Identifier"===e.type&&"undefined"===e.name||"UnaryExpression"===e.type&&"void"===e.operator}function c(e){return"CallExpression"===e.parent.type&&e.parent.callee===e}function p(e,t){if(a(e)||n(e,t))return!1;for(var p=e;p;){var u=p.parent;switch(u.type){case"LogicalExpression":case"ConditionalExpression":p=u;break;case"ReturnStatement":var h=i(u);if(null===h||!c(h))return!0;p=h.parent;break;case"Property":return!1;case"AssignmentExpression":return u.right!==e||"MemberExpression"!==u.left.type;case"MethodDefinition":return!1;case"MemberExpression":return u.object!==e||"Identifier"!==u.property.type||!d.test(u.property.name)||!c(u)||0===u.parent.arguments.length||l(u.parent.arguments[0]);case"CallExpression":return r(u.callee)?3!==u.arguments.length||u.arguments[0]!==e||l(u.arguments[1]):o(u.callee)?3!==u.arguments.length||u.arguments[1]!==e||l(u.arguments[2]):s(u.callee)?2!==u.arguments.length||u.arguments[0]!==e||l(u.arguments[1]):!0;default:return!0}}return!0}var u=/^[\s\*]*@this/m,d=/^(?:bind|call|apply)$/,h=/^(?:every|filter|find|findIndex|forEach|map|some)$/,f=/^(?:Function(?:Declaration|Expression)|ArrowFunctionExpression)$/,m=/Array$/;return t.exports=function(t){function n(e){o.push({init:!t.getScope().isStrict,node:e,valid:!0})}function r(){o.pop()}var o=[],s=t.getSourceCode();return o.getCurrent=function(){var e=this[this.length-1];return e.init||(e.init=!0,e.valid=!p(e.node,s)),e},{Program:function(e){var n=t.getScope(),r=t.ecmaFeatures||{};o.push({init:!0,node:e,valid:!(n.isStrict||"module"===e.sourceType||r.globalReturn&&n.childScopes[0].isStrict)})},"Program:exit":function(){o.pop()},FunctionDeclaration:n,"FunctionDeclaration:exit":r,FunctionExpression:n,"FunctionExpression:exit":r,ThisExpression:function(n){var r=o.getCurrent();r&&!r.valid&&t.report(n,e.noInvalidThis)}}},t.exports.schema=[],t.exports}),define("eslint/lib/rules/no-trailing-spaces",["i18n!javascript/nls/problems","module"],function(e,t){return t.exports=function(t){function n(n,r,o){t.report({node:n,loc:r,message:e.noTrailingSpaces,data:o})}var r=t.getSourceCode(),o="[ 	  -​\u2028\u2029　]",s="^"+o+"*$",a=o+"+$",i=t.options[0]||{},l=i.skipBlankLines||!1;return{Program:function(e){for(var t,o,i,c,p,u=new RegExp(a),d=new RegExp(s),h=r.lines,f=r.getText().match(/\r\n|\r|\n|\u2028|\u2029/g),m=0,g=0,b=h.length;b>g;g++){t=u.exec(h[g]);var y=f&&f[g]?f[g].length:1,v=h[g].length+y;try{if(t){if(o={line:g+1,column:t.index},i=m+o.column,c=m+v-y,p=r.getNodeByRangeIndex(i),p&&"TemplateElement"===p.type&&i>p.parent.range[0]&&c<p.parent.range[1])continue;if(l&&d.test(h[g]))continue;n(e,o,{range:{start:i,end:c}})}}finally{m+=v}}}}},t.exports.schema=[{type:"object",properties:{skipBlankLines:{type:"boolean"}},additionalProperties:!1}],t.exports}),define("eslint/lib/load-rules-async",["./utils/util","javascript/finder","i18n!javascript/nls/problems","estraverse/estraverse","orion/editor/stylers/application_javascript/syntax","./rules/accessor-pairs","./rules/no-control-regex","./rules/no-duplicate-case","./rules/no-else-return","./rules/no-empty-character-class","./rules/no-empty-label","./rules/no-eq-null","./rules/no-extra-boolean-cast","./rules/no-extra-parens","./rules/no-invalid-regexp","./rules/no-negated-in-lhs","./rules/no-obj-calls","./rules/no-self-compare","./rules/no-irregular-whitespace","./rules/no-const-assign","./rules/no-implicit-coercion","./rules/no-extra-bind","./rules/no-extend-native","./rules/no-lone-blocks","./rules/quotes","./rules/yoda","./rules/no-param-reassign","./rules/no-native-reassign","./rules/no-unused-expressions","./rules/no-invalid-this","./rules/no-trailing-spaces"],function(e,t,n,r,o,s,a,i,l,c,p,u,d,h,f,m,g,b,y,v,x,_,S,w,k,E,j,T,O,C,R){function A(e,t){for(var n=0;n<e.length;n++)t[e[n]]=!0}function D(e,t){if("string"==typeof e.value&&e.value.length>0){if("use strict"===e.value.toLowerCase())return;if(/^(?:[\.,-\/#!$%\^&\*;:{}=\-_`~()@\+\?><\[\]\+])$/.test(e.value))return;if(/^(?:==|!=|===|!==|=>)$/.test(e.value))return;if(e.parent)switch(e.parent.type){case"ImportDeclaration":case"MemberExpression":case"SwitchCase":case"ExportAllDeclaration":case"UnaryExpression":return;case"BinaryExpression":if("+"!==e.parent.operator)return;break;case"Property":if(e.parent.key===e)return;var n=e.parent.parent.parent;if(n&&"CallExpression"===n.type&&n.callee&&"define"===n.callee.name)return;break;case"NewExpression":case"CallExpression":var r=e.parent.callee;if(r)if("MemberExpression"===r.type&&r.property){if(r.object&&"Identifier"===r.object.type&&"document"===r.object.name&&I[r.property.name])return;if(N[r.property.name])return}else if(N[r.name])return;break;case"ArrayExpression":if(n=e.parent.parent,"CallExpression"===n.type&&("define"===n.callee.name||"require"===n.callee.name||"requirejs"===n.callee.name))return}var o=e.loc.end.line;t[o]||(t[o]=[]),t[o].push(e)}}var M={buffer:!0,child_process:!0,cluster:!0,crypto:!0,dns:!0,domain:!0,events:!0,fs:!0,http:!0,https:!0,net:!0,os:!0,path:!0,punycode:!0,readline:!0,stream:!0,string_decoder:!0,tls:!0,tty:!0,dgram:!0,url:!0,util:!0,v8:!0,vm:!0,zlib:!0},P={"check-tern-plugin":function(e){function r(r){function o(e){var n=t.findDirective(r,"eslint-env");if(n){var o=n.value.indexOf(e);if(o>-1){var s=n.range[0]+o+2,a=s+e.length;return{type:"EnvName",range:[s,a],loc:n.loc}}}}if(0!==r.end&&e.env){var s=Object.keys(e.env);if(s.length>0){var a=e.getTern();a&&s.forEach(function(t){if("node"!==t||!r.environments||!r.environments.simplifiedCommonJS){var s=a.plugins[t]?t:a.optionalPlugins[t];if(s&&!a.plugins[s]){var i=o(t);i?e.report(i,n["check-tern-plugin"],{0:t,1:s,data:s}):e.report(r,n["check-tern-plugin"],{0:t,1:s,data:s})}else{var l=a.getDef(t);!l&&a.optionalDefs[t]&&(i=o(t),i?e.report(i,n["check-tern-lib"],{0:t,1:t,nls:"check-tern-lib",data:t}):e.report(r,n["check-tern-lib"],{0:t,1:t,nls:"check-tern-lib",data:t}))}}})}}}return{Program:r}},curly:function(e){function t(t){switch(t.type){case"IfStatement":t.consequent&&"BlockStatement"!==t.consequent.type&&e.report(t.consequent,n.curly,null),t.alternate&&"BlockStatement"!==t.alternate.type&&"IfStatement"!==t.alternate.type&&e.report(t.alternate,n.curly,null);break;case"DoWhileStatement":case"WhileStatement":case"WithStatement":case"ForStatement":case"ForInStatement":case"ForOfStatement":t.body&&"BlockStatement"!==t.body.type&&e.report(t.body,n.curly,null)}}return{IfStatement:t,WhileStatement:t,ForStatement:t,ForInStatement:t,ForOfStatement:t,WithStatement:t,DoWhileStatement:t}},eqeqeq:function(e){function t(e,t){for(var n=e.getTokens(t),r=n.length,o=t.operator,s=t.left.end,a=0;r>a;a++){var i=n[a];if(i.start>=s&&i.value===o)return i}return null}function r(e){return e&&e.type?"Literal"===e.type&&null===e.value||"Identifier"===e.type&&"undefined"===e.name:!1}return{BinaryExpression:function(o){if(!r(o.left)&&!r(o.right)){var s=o.operator,a=null;"=="===s?(a="===",e.report(o,n.eqeqeq,{0:a,1:s},t(e,o))):"!="===s&&(a="!==",e.report(o,n.eqeqeq,{0:a,1:s},t(e,o)))}}}},"missing-doc":function(e){function t(e){if(e&&e.leading){var t=e.leading.length;return t>0&&"Block"===e.leading[t-1].type}return!1}function r(r){var o,s;switch(r.type){case"Property":if(r.value&&"FunctionExpression"===r.value.type&&(o=e.getComments(r),(!o||o.leading.length<1)&&(o=e.getComments(r.key)),!t(o))){switch(r.key.type){case"Identifier":s=r.key.name;break;case"Literal":s=r.key.value}e.report(r.key,n["missing-doc"],{0:s},{type:"expr"})}break;case"FunctionDeclaration":o=e.getComments(r),(!o||o.leading.length<1)&&(o=e.getComments(r.id)),!t(o)&&r.parent&&"ExportNamedDeclaration"!==r.parent.type&&e.report(r.id,n["missing-doc"],{0:r.id.name},{type:"decl"});break;case"ExpressionStatement":if(r.expression&&"AssignmentExpression"===r.expression.type){var a=r.expression;a.right&&"FunctionExpression"===a.right.type&&a.left&&"MemberExpression"===a.left.type&&(o=e.getComments(r),(!o||o.leading.length<1)&&(o=e.getComments(a.left)),t(o)||(s=a.left.computed===!0?a.left.property.value:a.left.property.name,e.report(a.left.property,n["missing-doc"],{0:s},{type:"expr"})))}break;case"ExportNamedDeclaration":o=e.getComments(r),!t(o)&&r.declaration&&"FunctionDeclaration"===r.declaration.type&&e.report(r.declaration.id,n["missing-doc"],{0:r.declaration.id.name},{type:"decl"})}}return{Property:r,FunctionDeclaration:r,ExpressionStatement:r,ExportNamedDeclaration:r}},"new-parens":function(e){return{NewExpression:function(t){if(t.callee){var r=e.getTokens(t.callee,0,1);if(r&&r.length>0){var o=r[r.length-1];("Punctuator"!==o.type||"("!==o.value)&&e.report(t.callee,n["new-parens"],null,r[0])}}}}},"no-caller":function(e){return{MemberExpression:function(r){var o=t.findParentFunction(r);if(o){var s=r.object;if(!s||"arguments"!==s.name||"Identifier"!==s.type)return;var a=r.property,i=a.name?a.name:a.value;("callee"===i||"caller"===i)&&e.report(a,n["no-caller"],{0:i})}}}},"no-comma-dangle":function(e){return{ObjectExpression:function(t){var r=e.getLastToken(t,1);r&&","===r.value&&e.report(t,n["no-comma-dangle"],null,r)}}},"no-cond-assign":function(e){function t(t){var n=t.parent.type;return a[n]&&"ForStatement"!==n?"("===e.getTokenBefore(t,1).value:"("===e.getTokenBefore(t).value}function o(e){switch(e.type){case"FunctionExpression":case"ObjectExpression":case"CallExpression":case"ArrayExpression":return!0;default:return!1}}function s(s){var a=[];if(null!==s.test){s.test.parent=s,r.traverse(s.test,{enter:function(e,t){return e.range[0]>s.test.range[1]?r.VisitorOption.Break:o(e)?r.VisitorOption.Skip:(t&&(e.parent=t),void(e&&"AssignmentExpression"===e.type&&a.push(e)))}});var i=a.length;if(i>0)for(var l=0;i>l;l++){var c=a[l];t(c)||(c.range[0]=c.left.range[0],e.report(c,n["no-cond-assign"]))}}}var a={IfStatement:!0,DoWhileStatement:!0,WhileStatement:!0,ForStatement:!0};return{IfStatement:s,WhileStatement:s,ForStatement:s,DoWhileStatement:s}},"no-console":function(e){return{MemberExpression:function(t){"console"===t.object.name&&e.env&&e.env.browser&&e.report(t.object,n["no-console"])}}},"no-constant-condition":function(e){function t(e){switch(e.type){case"Literal":case"ObjectExpression":case"FunctionExpression":case"ArrayExpression":return!0;case"BinaryExpression":case"LogicalExpression":return t(e.left)&&t(e.right);case"UnaryExpression":return t(e.argument);default:return!1}}function r(r){r&&r.test&&t(r.test)&&e.report(r.test,n["no-constant-condition"])}return{IfStatement:r,WhileStatement:r,DoWhileStatement:r,ForStatement:r,ConditionalExpression:r}},"no-debugger":function(e){return{DebuggerStatement:function(t){e.report(t,n["no-debugger"],null,e.getTokens(t)[0])}}},"no-dupe-keys":function(e){return{ObjectExpression:function(t){var r=t.properties;if(r&&r.length>0)for(var o=r.length,s=Object.create(null),a=0;o>a;a++){var i=r[a];if("init"===i.kind){var l=i.key.name?i.key.name:i.key.value;Object.prototype.hasOwnProperty.call(s,l)?e.report(i,n["no-dupe-keys"],{0:l},e.getTokens(i)[0]):s[l]=1}}}}},"no-empty-block":function(e){var t;return{Program:function(e){t=e.comments},BlockStatement:function(r){if(r.body.length<1){for(var o=0;o<t.length;o++){var s=t[o].range;if(s[0]>=r.range[0]&&s[1]<=r.range[1])return}e.report(r,n["no-empty-block"])}}}},"no-eval":function(e){return{CallExpression:function(t){var r=t.callee.name;r&&"eval"===r&&e.report(t.callee,n["no-eval"],{0:"'eval'"},e.getTokens(t.callee)[0])}}},"no-extra-semi":function(e){return{EmptyStatement:function(t){var r=e.getTokens(t),o=r[r.length-1];o&&"Punctuator"===o.type&&";"===o.value&&e.report(t,n["no-extra-semi"],null,o)}}},"no-fallthrough":function(t){function r(t){if(t.consequent){var n=t.consequent.slice(0);if(n.length>0&&"BlockStatement"===n[0].type){var r=n.shift();r.body.length>0&&(n=[].concat(n,r.body))}if(n.length<1)return!1;for(var o=null,s=0;s<n.length;s++)if(o=n[s],e.returnableStatement(o))return!1;return!0}return!1}return{SwitchStatement:function(e){if(e.cases&&e.cases.length>1){var o=e.cases.length;e:for(var s=0;o>s&&s+1!==o;s++)if(r(e.cases[s])){var a=e.cases[s+1];if(a.test)a.range[1]=a.test.range[1];else{var i=t.getTokens(a);i&&i.length>0&&(a.range[1]=i[0].range[1])}var l=a.leadingComments;if(!l&&a.test&&(l=a.test.leadingComments),l)for(var c=null,p=0;p<l.length;p++)if(c=l[p],/\$?falls?\s?through\$?/i.test(c.value.toLowerCase()))continue e;t.report(a,n["no-fallthrough"])}}}}},"no-implied-eval":function(t){return{CallExpression:function(r){var o=r.callee.name;if(o&&("setInterval"===o||"setTimeout"===o)&&r.arguments.length>0){var s=r.arguments[0];if("Literal"===s.type)t.report(r.callee,n["no-eval"],{0:"Implicit 'eval'"},t.getTokens(r.callee)[0]);else if("Identifier"===s.type){var a=t.getScope(),i=e.getDeclaration(s,a);if(i&&i.defs&&i.defs.length){var l=i.defs[0],c=l.node;"Variable"===l.type&&c&&"VariableDeclarator"===c.type&&c.init&&"Literal"===c.init.type&&t.report(r.callee,n["no-eval"],{0:"Implicit 'eval'"},t.getTokens(r.callee)[0])}}}}}},"no-iterator":function(e){return{MemberExpression:function(t){null!==t.property&&(t.computed?"__iterator__"===t.property.value&&e.report(t.property,n["no-iterator"]):"__iterator__"===t.property.name&&e.report(t.property,n["no-iterator"]))}}},"no-proto":function(e){return{MemberExpression:function(t){null!==t.property&&(t.computed?"__proto__"===t.property.value&&e.report(t.property,n["no-proto"]):"__proto__"===t.property.name&&e.report(t.property,n["no-proto"]))}}},"no-jslint":function(e){return{Program:function(t){var r,o=t.comments;if(o&&(r=o.length)&&o.length>0)for(var s=0;r>s;s++){var a=o[s];if("Block"===a.type){var i=/^\s*(js[l|h]int)(\s+\w+:\w+)+/gi.exec(a.value);if(i){var l=i[1];if(l.length<1)continue;var c=2+a.value.indexOf(l)+a.range[0],p=c+l.length;e.report({type:"BlockComment",range:[c,p],loc:a.loc},n["no-jslint"],{0:l})}}}}}},"no-new-array":function(e){function t(t){var r=t.callee;if(r&&"Array"===r.name){var o=t.arguments;o.length>1?e.report(r,n["no-new-array"]):1===o.length&&"Literal"===o[0].type&&"number"!=typeof o[0].value&&e.report(r,n["no-new-array"])}}return{NewExpression:t,CallExpression:t}},"no-new-func":function(e){return{NewExpression:function(t){var r=t.callee;r&&"Function"===r.name&&e.report(r,n["no-new-func"])}}},"no-new-object":function(e){return{NewExpression:function(t){var r=t.callee;r&&"Object"===r.name&&e.report(r,n["no-new-object"])}}},"no-new-wrappers":function(e){var t=["String","Number","Math","Boolean","JSON"];return{NewExpression:function(r){var o=r.callee;o&&t.indexOf(o.name)>-1&&e.report(o,n["no-new-wrappers"],[o.name])}}},"no-with":function(e){return{WithStatement:function(t){e.report(t,n["no-with"],null,e.getFirstToken(t))}}},"missing-nls":function(e){function t(t,r){var o=Object.create(null);o.indexOnLine=r,e.report(t,n["missing-nls"],{0:t.value,data:o})}return{Literal:function(t){D(t,e._linesWithStringLiterals)},Program:function(){e._linesWithStringLiterals=Object.create(null),e._isMissingNLSActive=!0},"Program:exit":function(n){if(e._isMissingNLSActive=!1,e._linesWithStringLiterals){var r=n.comments,o={};if(Array.isArray(r))for(var s=0;s<r.length;s++){var a=r[s];if("line"===a.type.toLowerCase()){var i=a.loc.end.line;o[i]="//"+a.value}}for(i in e._linesWithStringLiterals){var l=e._linesWithStringLiterals[i];if(l){a=o[i];var c,p=/\/\/\$NON-NLS-([0-9])+\$/g;if(r=[],a)for(;null!==(c=p.exec(a));)r.push(c[1]);for(var u=0;u<l.length;u++){c=!1;for(var d=0;d<r.length;d++){if(r[d]===String(u+1)){r[d]=null,c=!0;break}if(0===u&&"0"===r[d]){r[d]=null,c=!0;break}}c||t(l[u],u)}}}}}}},"unnecessary-nls":function(e){function t(t,r,o){e.report({range:t.range,loc:t.loc,value:r},n["unnecessary-nls"],{data:{nlsComment:o}})}return{Literal:function(t){e._isMissingNLSActive||D(t,e._linesWithStringLiterals)},Program:function(){e._isMissingNLSActive||(e._linesWithStringLiterals=Object.create(null))},"Program:exit":function(n){var r,o,s,a,i,l=n.comments,c={};if(Array.isArray(l))for(var p=0;p<l.length;p++){var u=l[p];"line"===u.type.toLowerCase()&&(s=u.loc.end.line,c[s]=u)}var d=/(?:^|(\/\/))\$NON-NLS-([0-9])+\$/g;if(e._linesWithStringLiterals)for(s in e._linesWithStringLiterals){var h=e._linesWithStringLiterals[s];if(h){if(u=c[s],delete c[s],i=[],u)for(;null!==(a=d.exec(u.value));)i.push(a);for(var f=0;f<i.length;f++){a=i[f];for(var m=!1,g=0;g<h.length;g++){if(a[2]===String(g+1)){m=!0;break}if(0===g&&"0"===a[2]){m=!0;break}}m||(o=a[1]?a[0]:"//"+a[0],r=u.range[0]+a.index,a[1]&&(r+=2),t({range:[r,r+o.length],loc:u.loc},o,a[0]))}}}for(s in c)if(u=c[s]){var b,y=u.range[0]-1,v=n.sourceFile.text,x=0>y;if(v)for(;y>=0&&(b=v.charAt(y)).match(/\s/);){if("\n"===b||0===y){x=!0;break}y--}for(;null!==(a=d.exec(u.value))&&!(x&&a.index>0);)o=a[1]?a[0]:"//"+a[0],r=u.range[0]+a.index,a[1]&&(r+=2),t({range:[r,r+o.length],loc:u.loc},o,a[0])}}}},"no-redeclare":function(e){function t(t){t.variables.forEach(function(t){var r=s.builtinGlobals&&"writeable"in t,o=(r?1:0)+t.identifiers.length;if(o>=2){t.identifiers.sort(function(e,t){return e.range[1]-t.range[1]});for(var a=r?0:1,i=t.identifiers.length;i>a;a++)e.report(t.identifiers[a],n["no-redeclare"],{0:t.name})}})}function r(n){var r=e.getScope(),o=e.parserOptions,s=o.ecmaFeatures||{};t(s.globalReturn||"module"===n.sourceType?r.childScopes[0]:r)}function o(){t(e.getScope())}var s={builtinGlobals:Boolean(e.options[0]&&e.options[0].builtinGlobals)};return e.parserOptions.ecmaVersion>=6?{Program:r,BlockStatement:o,SwitchStatement:o}:{Program:r,FunctionDeclaration:o,FunctionExpression:o,ArrowFunctionExpression:o}},"no-regex-spaces":function(e){function t(t){for(var r=/( {2,})/g,o=null;null!==(o=r.exec(t.raw));){var s=t.range[0]+o.index,a=o[0].length;e.report({type:"Literal",range:[s,s+a],loc:t.loc},n["no-regex-spaces"],{0:a})}}return{Literal:function(n){n.parent&&"NewExpression"===n.parent.type&&"RegExp"===n.parent.callee.name&&t(n);var r=e.getFirstToken(n);r&&"RegularExpression"===r.type&&t(n)}}},"no-reserved-keys":function(e){return{ObjectExpression:function(t){if(t.properties)for(var r=0;r<t.properties.length;r++){var s=t.properties[r];"Identifier"===s.key.type&&o.keywords.indexOf(s.key.name)>-1&&e.report(s.key,n["no-reserved-keys"])}},MemberExpression:function(t){t.property&&"Identifier"===t.property.type&&o.keywords.indexOf(t.property.name)>-1&&e.report(t.property,n["no-reserved-keys"])}}},"no-shadow":function(t){function r(e,t){t.variables.forEach(function(n){var r=n.name;n.defs.length&&(Object.prototype.hasOwnProperty.call(e,r)||(e[n.name]=t))})}function o(t){for(var n=t.upper,o=Object.create(null);n&&!n._symbols;)n=n.upper;return n&&e.mixin(o,n._symbols),r(o,t),t._symbols=o,o}function s(e){return e.defs.some(function(e){return"Parameter"===e.type})}function a(e){var r=t.getScope();if("FunctionExpression"!==e.type||!e.id||!e.id.name||(r=r.upper,"global"!==r.type)){var a=o(r);r.variables.forEach(function(e){if(e.defs.length){var o;(o=a[e.name])&&o!==r&&!s(e)&&t.report(e.defs[0].name,n["no-shadow"],{0:e.name})}})}}return{Program:a,FunctionDeclaration:a,FunctionExpression:a,ArrowFunctionExpression:a}},"no-shadow-global":function(e){function r(e,t){switch(e.type){case"Identifier":t(e);break;case"Property":r(e.value,t);break;case"ArrayPattern":var n=e.elements;n.forEach(function(e){e&&r(e,t)});break;case"ObjectPattern":var o=e.properties;o.forEach(function(e){e&&r(e,t)})}}function o(o){var s=e.env?e.env:{};s.builtin=!0;var a=e.getTern(),i=!1;switch(a.file.ast&&a.file.ast.environments&&a.file.ast.environments.simplifiedCommonJS&&(i=!0),o.type){case"VariableDeclarator":r(o.id,function(r){var o=r.name;o&&s[t.findESLintEnvForMember(o)]&&e.report(r,n["no-shadow-global"],{0:o})});break;case"FunctionExpression":case"FunctionDeclaration":case"ArrowFunctionExpression":o.params.forEach(function(r){(!i||"require"!==r.name&&"exports"!==r.name&&"module"!==r.name)&&"Identifier"===r.type&&s[t.findESLintEnvForMember(r.name)]&&e.report(r,n["no-shadow-global-param"],{0:r.name,nls:"no-shadow-global-param"})})}}return{FunctionExpression:o,FunctionDeclaration:o,ArrowFunctionExpression:o,VariableDeclarator:o}},"no-sparse-arrays":function(e){return{ArrayExpression:function(t){t.elements.indexOf(null)>-1&&e.report(t,n["no-sparse-arrays"])}}},"no-throw-literal":function(e){return{ThrowStatement:function(t){var r=t.argument;switch(r.type){case"Identifier":if("undefined"!==r.name)return;case"Literal":case"ObjectExpression":case"ArrayExpression":e.report(r,n["no-throw-literal"])}}}},"no-undef":function(e){function r(e){return e.range&&e.range[0]===e.range[1]}function o(e){return e.defs.every(function(e){return"ImplicitGlobalVariable"===e.type})}function s(e,t){var n=null;return e.variables.some(function(e){return e.name!==t.identifier.name||o(e)&&!Object.hasOwnProperty.call(e,"writeable")?!1:(n=e,!0)}),n}return{Program:function(){var o=e.getScope();o.through.forEach(function(a){if(!r(a.identifier)){var i=s(o,a),l=a.identifier.name;if(!i){var c=t.findESLintEnvForMember(l),p=e.getTern(),u={end:a.identifier.start},d=null,h=p.findQueryExpr(p.file,u);if(!h)return;var f=p.findExprType(u,p.file,h);if(f&&(f.originNode||Array.isArray(f.types)&&f.types.length>0)&&f.origin&&f.origin!==p.file.name&&(d=f),!d){var m=c?"-inenv":"",g="no-undef-defined";e.report(a.identifier,n["no-undef-defined"],{0:l,nls:g,pid:g+m,data:l})}}}})}}},"no-undef-expression":function(e){return{MemberExpression:function(t){if(t.property&&t.object&&"ThisExpression"!==t.object.type&&t.parent&&"CallExpression"===t.parent.type&&t.parent.callee&&t.parent.callee===t){var r=t.property.name?t.property.name:t.property.value;if(!r)return;var o={start:t.property.start,end:t.property.end},s=e.getTern(),a=s.findQueryExpr(s.file,o);if(!a)return;var i=s.findExprType(o,s.file,a);if(i&&i.propertyOf){if(i.guess)return;if(i.propertyOf.props[r])return;if(!i.propertyOf.proto)return}if(o.end=t.object.end,a=s.findQueryExpr(s.file,o),!a)return;if(i=s.findExprType(o,s.file,a),i&&i.types&&i.types.length>0&&!i.guess){for(var l=0;l<i.types.length;l++){if(i.types[l].props&&i.types[l].props[r])return;if(i.types[l].proto&&"Object.prototype"!==i.types[l].proto.name&&i.types[l].proto.props[r])return}var c=i.types[0].name;!c&&i.originNode&&(c=i.originNode.name);var p=i.types[0].origin;if(!p&&i.origin&&(p=i.origin),1===i.types.length&&c&&p)if(0===c.indexOf("!known_modules.")&&(c=c.slice("!known_modules.".length)),/\./.test(p)){var u=i.types[0].originNode?i.types[0].originNode:i.originNode;if(u){var d=p.lastIndexOf("/");d>=0&&(p=p.substring(d+1)),e.report(t.property,n["no-undef-expression-defined-object"],{0:r,1:c,2:p,nls:"no-undef-expression-defined-object",data:{file:u.sourceFile.name,start:u.start,end:u.end}})}else e.report(t.property,n["no-undef-expression-defined"],{0:r,nls:"no-undef-expression-defined"})}else e.report(t.property,n["no-undef-expression-defined-index"],{0:r,1:c,2:p,nls:"no-undef-expression-defined-index"});else e.report(t.property,n["no-undef-expression-defined"],{0:r,nls:"no-undef-expression-defined"})}}}}},"no-undef-init":function(e){return{VariableDeclarator:function(t){t.init&&"Identifier"===t.init.type&&"undefined"===t.init.name&&e.report(t.init,n["no-undef-init"])}}},"no-unreachable":function(e){function t(e){return Boolean(e.init)}function r(e){return!e.reachable}function o(t){s.currentSegments.every(r)&&e.report(t,n["no-unreachable"])}var s=null;return{onCodePathStart:function(e){s=e},onCodePathEnd:function(){s=s.upper},BlockStatement:o,BreakStatement:o,ClassDeclaration:o,ContinueStatement:o,DebuggerStatement:o,DoWhileStatement:o,EmptyStatement:o,ExpressionStatement:o,ForInStatement:o,ForOfStatement:o,ForStatement:o,IfStatement:o,ImportDeclaration:o,LabeledStatement:o,ReturnStatement:o,SwitchStatement:o,ThrowStatement:o,TryStatement:o,VariableDeclaration:function(e){("var"!==e.kind||e.declarations.some(t))&&o(e)},WhileStatement:o,WithStatement:o,ExportNamedDeclaration:o,ExportDefaultDeclaration:o,ExportAllDeclaration:o}},"no-unused-params":function(e){function t(e){if(e&&e.leadingComments)for(var t=e.leadingComments.length,n=0;t>n;n++){var r=e.leadingComments[n];if("Block"===r.type&&/\s*(?:@(callback|public))\s+/.test(r.value))return!0}return!1}function r(r){var o=e.getScope(),s=o.childScopes;o.functionExpressionScope&&s&&s.length&&(o=s[0]),o.variables.forEach(function(o){if(o.defs.length&&"Parameter"===o.defs[0].type){var s=o.defs[0].name;if(!o.references.length){var a="no-unused-params";if("FunctionExpression"===r.type){if(a+="-expr",t(r)||r.params&&r.params.length>0&&t(r.params[0]))return;var i=r.parent;switch(i.type){case"Property":if(t(i)||t(i.key))return;break;case"MemberExpression":if(i=i.parent,"CallExpression"===i.type&&t(i))return;break;case"AssignmentExpression":var l=i.left;if("MemberExpression"===l.type){if(t(l))return}else if("Identifier"===l.type&&t(l))return;if(i=i.parent,i&&"ExpressionStatement"===i.type&&t(i))return;break;case"VariableDeclarator":if(t(i.id)||t(i))return;if(i=i.parent,i&&"VariableDeclaration"===i.type&&t(i))return}}else"ArrowFunctionExpression"===r.type&&(a+="-arrow");e.report(s,n["no-unused-params"],{0:s.name,pid:a})}}})}return{FunctionDeclaration:r,FunctionExpression:r,ArrowFunctionExpression:r}},"no-unused-vars":function(e){function t(e){return e.isRead()}function r(e,t){var n=t.references;return"global"===e.type&&(n=n.concat(e.through.filter(function(e){return e.identifier.name===t.name}))),n}function o(e,t){switch(e.type){case"Identifier":t(e);break;case"Property":o(e.value,t);break;case"ArrayPattern":var n=e.elements;n.forEach(function(e){e&&o(e,t)});break;case"ObjectPattern":var r=e.properties;r.forEach(function(e){e&&o(e,t)})}}function s(s){var i=e.getScope(),l=null;if("Program"===s.type){var c=e.parserOptions&&e.parserOptions.ecmaFeatures||{};l=c.globalReturn||"module"===s.sourceType?i.childScopes[0].variables:i.variables}else l=i.variables;a||"ImportDeclaration"===s.type||l.forEach(function(s){if(s.defs.length&&"Parameter"!==s.defs[0].type){var l=s.defs[0].node,c=r(i,s),p=l.id,u="no-unused-vars-unused";if("ImportBinding"===s.defs[0].type&&(p=l.local,u="no-unused-vars-import",a=!0),!(p&&p.range&&p.range[0]===p.range[1]||!p))if(c.length)c.some(t)||o(p,function(t){t.name===s.name&&e.report(t,n["no-unused-vars-unread"],{0:t.name,nls:"no-unused-vars-unread"})});else if("FunctionDeclaration"===l.type){var d=e.getTern(),h={end:l.id.start},f=d.file.name,m=d.findRefs(h,d.file),g=[];m&&Array.isArray(m.refs)&&m.refs.forEach(function(e){e.file!==f&&g.push(e)}),(null===g||0===g.length)&&e.report(p,n["no-unused-vars-unused-funcdecl"],{0:p.name,nls:"no-unused-vars-unused-funcdecl"})}else if("VariableDeclarator"===l.type){var b=s.defs[0].parent.leadingComments,y=!0;if(b&&b.length>0)for(var v=0;v<b.length;v++)if(b[v].value.toLowerCase().indexOf("exported")>=0){y=!1;break}y&&e.report(p,n["no-unused-vars-unused"],{0:p.name,nls:"no-unused-vars-unused",pid:u})}else e.report(p,n["no-unused-vars-unused"],{0:p.name,nls:"no-unused-vars-unused",pid:u})}})}var a=!1;return{Program:s,"Program:exit":function(){a=!1},FunctionDeclaration:s,FunctionExpression:s,ArrowFunctionExpression:s,ImportDeclaration:s}},"no-use-before-define":function(t){function r(e,t){return"boolean"==typeof e?e:t}function o(r){r.references.forEach(function(o){var s,a=e.getDeclaration(o,r),p=o.identifier,u=p.name;if(a&&(s=a.defs).length&&p.range[0]<s[0].node.range[0]){var d=s[0].type;if(!l&&"FunctionName"===d||!i&&"Variable"===d||!c&&"ClassName"===d)return;t.report(p,n["no-use-before-define"],{0:u})}})}function s(e){var n=t.getScope();o(n),"Program"===e.type&&"module"===e.sourceType&&o(n.childScopes[0])}var a=t.options,i=r(a[0],!0),l=r(a[1],!1),c=r(a[2],!0);return t.parserOptions.ecmaVersion>=6?{Program:s,BlockStatement:s,SwitchStatement:s,ArrowFunctionExpression:function(e){"BlockStatement"!==e.body.type&&s(e)}}:{Program:s,FunctionExpression:s,FunctionDeclaration:s,ArrowFunctionExpression:s}},radix:function(e){return{CallExpression:function(t){var r=t.callee;if("parseInt"===r.name&&"Identifier"===r.type&&t.arguments.length<2){for(var o=!1,s=e.getScope();s&&!(o=s.variables.some(function(e){return"parseInt"===e.name&&e.defs.length}));s=s.upper);o||e.report(r,n.radix,null)}}}},"no-mixed-spaces-and-tabs":function(e){function t(t){var o=e.getSourceLines(),s=e.getAllComments();s.forEach(function(e){a.push(e.loc)}),o.forEach(function(o,s){var l=i.exec(o);if(null!==l){var c=s+1,p=l.index+1;if(null!==r(a,{line:c,column:p}))return;e.report(t,{line:c,column:p},n["no-mixed-spaces-and-tabs"])}})}function r(e,t){for(var n,r=0,a=e.length-1;a>=r;){n=Math.floor(r+(a-r)/2);var i=e[n];if(o(t,i))return i;s(t,i)?a=n-1:r=n+1}return null}function o(e,t){var n=t.start,r=t.end,o=e.line,s=e.column;if(n.line<o){if(r.line>o)return!0;if(r.line===o)return r.column>s}else if(n.line===o&&n.column<s){if(r.line>o)return!0;if(r.line===o)return r.column>s}return!1}function s(e,t){var n=t.start,r=e.line,o=e.column;return r<n.line?!0:r===n.line?o<n.column:!1}var a=[],i=/^(?=[\t ]* \t)/;return{"Program:exit":t}},semi:function(e){function t(t,r){var o,s=d.getLastToken(t),a=Object.create(null);r?(o=n["semi-extra"],a.kind="extra"):(o=n["semi-missing"],a.kind="missing"),e.report(t,o,{data:a},s)}function r(e){return"Punctuator"===e.type&&";"===e.value}function o(e){var t,n,o,s,a;return r(e)?(s=d.getTokenAfter(e))?(o=e.loc.end.line,a=s.loc.start.line,n=l.test(s.value),t="}"===s.value||";"===s.value,o!==a&&!n||t):!0:!1}function s(e){var t=d.getTokenAfter(e);if(!t||"}"!==t.value)return!1;var n=e.parent;return n&&"BlockStatement"===n.type&&n.loc.start.line===n.loc.end.line}function a(e){var n=d.getLastToken(e);p?o(n)&&t(e,!0):r(n)?u&&s(e)&&t(e,!0):u&&s(e)||t(e)}function i(t){var n=e.getAncestors(),r=n.length-1,o=n[r];"ForStatement"===o.type&&o.init===t||/^For(?:In|Of)Statement/.test(o.type)&&o.left===t||a(t)}var l=/[\[\(\/\+\-]/,c=e.options[1],p="never"===e.options[0],u=c&&c.omitLastInOneLineBlock===!0,d=e.getSourceCode();return{VariableDeclaration:i,ExpressionStatement:a,ReturnStatement:a,ThrowStatement:a,DoWhileStatement:a,DebuggerStatement:a,BreakStatement:a,ContinueStatement:a,ImportDeclaration:a,ExportAllDeclaration:a,ExportNamedDeclaration:function(e){e.declaration||a(e)},ExportDefaultDeclaration:function(e){/(?:Class|Function)Declaration/.test(e.declaration.type)||a(e)}}},"unknown-require":function(e){function t(t){var r=e.getTern();if(!r.pluginRunning("es_modules")){var o=e.getFirstToken(t);e.report(t,n["esmodules-not-running"],{pid:"unknown-require-not-running",nls:"esmodules-not-running",data:"es_modules"},o)}}return{ImportDeclaration:t,ExportAllDeclaration:t,ExportDefaultDeclaration:t,ExportNamedDeclaration:t,CallExpression:function(t){if("require"===t.callee.name){var r=t.arguments;if(1===r.length){var o=r[0];if("Literal"===o.type){if("string"!=typeof o.value||"string"==typeof o.value&&!o.value.trim())return;if("."!==o.value.charAt(0)){var s=e.getTern();if(s.file.ast&&s.file.ast.environments){var a=s.file.ast.environments;if(a.node&&!a.simplifiedCommonJS){if(!s.pluginRunning("node")&&!s.pluginRunning("commonjs"))return void e.report(o,n["unknown-require-not-running"],{0:"node",pid:"unknown-require-not-running",nls:"unknown-require-not-running",data:"node"});if(!s.pluginRunning("commonjs"))return void e.report(o,n["unknown-require-not-running"],{0:"commonjs",pid:"unknown-require-not-running",nls:"unknown-require-not-running",data:"commonjs"})
}}if(s.plugins[o.value]||s.getDef(o.value)||s.libKnown(o.value))return;var i=s.getDef("node");if(i&&(i[o.value]||i["!define"]&&i["!define"][o.value]))return;if(s.optionalPlugins[o.value])return void e.report(o,n["unknown-require-plugin"],{pid:"unknown-require-plugin",nls:"unknown-require-plugin",data:o.value});if(M[o.value])return void e.report(o,n["unknown-require-plugin"],{pid:"unknown-require-plugin",nls:"unknown-require-plugin",data:"node"});var l=s.getEnvFromDep(o.value);if("commonjs"===l&&a.simplifiedCommonJS)return void e.report(o,n["unknown-require"],{data:o.value});s.pluginRunning(l)?e.report(o,n["unknown-require"],{data:o.value}):e.report(o,n["unknown-require-not-running"],{0:l,pid:"unknown-require-not-running",nls:"unknown-require-not-running",data:l})}else s=e.getTern(),s.hasFile(o.value,s.file)||e.report(o,n["unknown-require"],{data:o.value})}}}}}},"use-isnan":function(e){return{BinaryExpression:function(t){"Identifier"===t.left.type&&"NaN"===t.left.name?e.report(t.left,n["use-isnan"],null,t.left):"Identifier"===t.right.type&&"NaN"===t.right.name&&e.report(t.right,n["use-isnan"],null,t.right)}}},"valid-typeof":function(e){var t=["undefined","object","function","boolean","number","string","symbol"],r=["==","===","!=","!=="];return{UnaryExpression:function(o){if("typeof"===o.operator){var s=o.parent;if(s&&"BinaryExpression"===s.type&&r.indexOf(s.operator)>-1){var a=s.left===o?s.right:s.left;("Literal"!==a.type||t.indexOf(a.value)<0)&&e.report(a,n["valid-typeof"])}}}}},"missing-requirejs":function(e){return{CallExpression:function(t){"define"===t.callee.name&&(1!==t.arguments.length||"FunctionExpression"!==t.arguments[0].type&&"ObjectExpression"!==t.arguments[0].type?3===t.arguments.length&&"Literal"===t.arguments[0].type&&"string"==typeof t.arguments[0].value&&t.arguments[1]&&"ArrayExpression"===t.arguments[1].type&&"FunctionExpression"===t.arguments[2].type?e.getTern().pluginRunning("requirejs")||e.report(t.callee,n["missing-requirejs"],{data:"requirejs"}):2===t.arguments.length&&"ArrayExpression"===t.arguments[0].type&&t.arguments[1]&&"FunctionExpression"===t.arguments[1].type&&(e.getTern().pluginRunning("requirejs")||e.report(t.callee,n["missing-requirejs"],{data:"requirejs"})):e.getTern().pluginRunning("requirejs")||e.report(t.callee,n["missing-requirejs"],{data:"requirejs"}))}}},"accessor-pairs":s,"no-control-regex":a,"no-duplicate-case":i,"no-empty-character-class":c,"no-extra-boolean-cast":d,"no-extra-parens":h,"no-invalid-regexp":f,"no-negated-in-lhs":m,"no-obj-calls":g,"no-eq-null":u,"no-else-return":l,"no-empty-label":p,"no-self-compare":b,"no-irregular-whitespace":y,"no-const-assign":v,"no-self-assign":function(e){function t(t){var r=t.init,o=t.id;r&&"Identifier"===r.type&&"Identifier"===o.type&&o.name===r.name&&e.report(t,n["no-self-assign"],{0:o.name,pid:"no-self-assign",nls:"no-self-assign"})}function r(t){if("="===t.operator){var r=t.left,o=t.right;"Identifier"===r.type&&"Identifier"===o.type&&r.name===o.name&&e.report(t,n["no-self-assign"],{0:r.name,pid:"no-self-assign",nls:"no-self-assign"})}}return{AssignmentExpression:r,VariableDeclarator:t}},"type-checked-consistent-return":function(e){function t(){s.push({})}function r(){s.pop()}function o(t){if(t.argument){var n=e.getTern(),r={end:t.argument.start},o=null,s=n.findQueryExpr(n.file,r);if(!s)return"undefined";var a=n.findExprType(r,n.file,s);if(a&&(o=a),o){var i=o.toString();switch(i){case"bool":return"boolean";case"{}":return"object";case"?":return"null";default:return i}}return"object"}return"undefined"}var s=[];return{Program:t,FunctionDeclaration:t,FunctionExpression:t,ArrowFunctionExpression:t,"Program:exit":r,"FunctionDeclaration:exit":r,"FunctionExpression:exit":r,"ArrowFunctionExpression:exit":r,ReturnStatement:function(t){var r=s[s.length-1],a="type"in r;if(a){var i=o(t),l=r.type;if(l!==i)switch(l){case"null":"object"!==i&&"String"!==i&&"string"!==i&&e.report(t,n["inconsistent-return"],{type1:l,type2:i});break;case"String":case"string":"null"!==i&&e.report(t,n["inconsistent-return"],{type1:l,type2:i});break;case"object":"null"!==i&&e.report(t,n["inconsistent-return"],{type1:l,type2:i});break;default:e.report(t,n["inconsistent-return"],{type1:l,type2:i})}}else r.type=o(t)}}},"no-void":function(e){return{UnaryExpression:function(t){"void"===t.operator&&e.report(t,n["no-void"])}}},"no-extra-bind":_,"no-implicit-coercion":x,"no-extend-native":S,"no-lone-blocks":w,quotes:k,yoda:E,"no-param-reassign":j,"no-native-reassign":T,"no-unused-expressions":O,"no-invalid-this":C,"no-trailing-spaces":R},N=Object.create(null);A(["require","requirejs","importScripts","define","Worker","SharedWorker","addEventListener","RegExp","removeEventListener"],N);var I=Object.create(null);return A(["createElement"],I),{rules:P}}),define("eslint/lib/config/rules",["../load-rules-async","exports"],function(e,t){"use strict";function n(e,t){i[e]=t}function r(){var t=e.rules;Object.keys(t).forEach(function(e){n(e,t[e])})}function o(e,t){Object.keys(e).forEach(function(r){var o=t+"/"+r,s=e[r];n(o,s)})}function s(e){return i[e]}function a(){i=Object.create(null)}var i=Object.create(null);return t={define:n,load:r,"import":o,get:s,testClear:a,testReset:function(){a(),r()}},r(),t}),define("eslint/lib/rule-fixer",[],function(){function e(e,t){return{range:[e,e],text:t}}function t(){Object.freeze(this)}return t.prototype={constructor:t,insertTextAfter:function(e,t){return this.insertTextAfterRange(e.range,t)},insertTextAfterRange:function(t,n){return e(t[1],n)},insertTextBefore:function(e,t){return this.insertTextBeforeRange(e.range,t)},insertTextBeforeRange:function(t,n){return e(t[0],n)},replaceText:function(e,t){return this.replaceTextRange(e.range,t)},replaceTextRange:function(e,t){return{range:e,text:t}},remove:function(e){return this.removeRange(e.range)},removeRange:function(e){return{range:e,text:""}}},t}),define("eslint/lib/rule-context",["./rule-fixer"],function(e){"use strict";function t(e,t,n,r,o,s,a,i,l){this.id=e,this.options=r,this.settings=o,this.parserOptions=s,this.parserPath=a,this.meta=i,this.eslint=t,this.severity=n,this.env=l}var n=["getAncestors","getDeclaredVariables","getFilename","getScope","markVariableAsUsed","getAllComments","getComments","getFirstToken","getFirstTokens","getJSDocComment","getLastToken","getLastTokens","getNodeByRangeIndex","getSource","getSourceLines","getTokenAfter","getTokenBefore","getTokenByRangeStart","getTokens","getTokensAfter","getTokensBefore","getTokensBetween"];return t.prototype={constructor:t,getSourceCode:function(){return this.eslint.getSourceCode()},report:function(t,n,r,o){var s,a=null;return 1===arguments.length?(s=t,"function"==typeof s.fix&&(a=s.fix(new e)),void this.eslint.report(this.id,this.severity,s.node,s.loc||s.node.loc.start,s.message,s.data,a,this.meta)):void this.eslint.report(this.id,this.severity,t,n,r,o,this.meta)},getTern:function(){return this.settings.tern}},n.forEach(function(e){this[e]=function(t,n,r,o,s){return this.eslint[e](t,n,r,o,s)}},t.prototype),t}),define("orion/EventTarget",[],function(){function e(){this._namedListeners={}}return e.prototype={dispatchEvent:function(e){if(!e.type)throw new Error("unspecified type");var t=this._namedListeners[e.type];return t&&t.forEach(function(t){try{"function"==typeof t?t(e):t.handleEvent(e)}catch(n){"undefined"!=typeof console&&console.log(n)}}),!e.defaultPrevented},addEventListener:function(e,t){("function"==typeof t||t.handleEvent)&&(this._namedListeners[e]=this._namedListeners[e]||[],this._namedListeners[e].push(t))},removeEventListener:function(e,t){var n=this._namedListeners[e];if(n)for(var r=0;r<n.length;r++)if(n[r]===t){1===n.length?delete this._namedListeners[e]:n.splice(r,1);break}}},e.prototype.constructor=e,e.attach=function(t){var n=new e;t.dispatchEvent=n.dispatchEvent.bind(n),t.addEventListener=n.addEventListener.bind(n),t.removeEventListener=n.removeEventListener.bind(n)},e}),define("eslint/lib/events",["orion/EventTarget","orion/objects"],function(e,t){function n(){this._eventTarget=new e}function r(e,t){if("function"!=typeof t)throw new Error("addListener only takes instances of Function");var r,s="undefined"!=typeof this._maxListeners?this._maxListeners:o;return 0!==s&&(r=n.listenerCount(this,e)>=s)&&"undefined"!=typeof console&&console.error("Possible EventEmitter memory leak: "+r+" listeners added."),this.emit("newListener",t),this._eventTarget.addEventListener(e,t),this}var o=10;return n.prototype.constructor=n,t.mixin(n.prototype,{_maxListeners:10,addListener:r,on:r,once:function(e,t){var n=this,r=function(){try{t.apply(this,Array.prototype.slice.call(arguments))}finally{n.removeListener(e,r)}};return this.addListener(e,r),this},removeListener:function(e,t){if("function"!=typeof t)throw new Error("removeListener only takes instances of Function");return this._eventTarget.removeEventListener(e,t),this.emit("removeListener",t),this},removeAllListeners:function(e){var t=this._eventTarget._namedListeners,n=this,r=function(e){var r=t[e];r&&(r.forEach(n.emit.bind(n,"removeListener")),delete t[e])};return"undefined"==typeof e?Object.keys(t).forEach(r):r(e),this},setMaxListeners:function(e){if("number"!=typeof e)throw new Error("setMaxListeners only takes a number");this._maxListeners=e},listeners:function(e){var t=this._eventTarget._namedListeners[e];return t?t.slice():[]},emit:function(e){var t=this._eventTarget._namedListeners[e];if(!t){if("error"===e)throw new Error("Uncaught, unspecified 'error' event.");return!1}var n=Array.prototype.slice.call(arguments,1),r=this;return t.forEach(function(e){e.apply(r,n)}),!0}}),n.listenerCount=function(e,t){var n=e._eventTarget._namedListeners[t];return n?n.length:0},{EventEmitter:n}}),define("eslint/lib/utils/token-store",[],function(){return function(e){function t(t,n){var r,s=[];for(r=Math.max(0,t);n>r&&o>r;r++)s.push(e[r]);return s}function n(e){var t=e.range[1],n=l[t];return"undefined"==typeof n&&(n=i[t]-1),isNaN(n)&&(n=o-1),n}var r,o,s,a={},i=Object.create(null),l=Object.create(null);for(r=0,o=e.length;o>r;r++)s=e[r].range,i[s[0]]=r,l[s[1]]=r;return a.getTokensBefore=function(e,n){var r=i[e.range[0]];return t(r-(n||0),r)},a.getTokenBefore=function(t,n){return e[i[t.range[0]]-(n||0)-1]},a.getTokensAfter=function(e,r){var o=n(e)+1;return t(o,o+(r||0))},a.getTokenAfter=function(t,r){return e[n(t)+(r||0)+1]},a.getTokens=function(e,r,o){return t(i[e.range[0]]-(r||0),n(e)+(o||0)+1)},a.getFirstTokens=function(e,r){var o=i[e.range[0]];return t(o,Math.min(n(e)+1,o+(r||0)))},a.getFirstToken=function(t,n){return e[i[t.range[0]]+(n||0)]},a.getLastTokens=function(e,r){var o=n(e)+1;return t(Math.max(i[e.range[0]],o-(r||0)),o)},a.getLastToken=function(t,r){return e[n(t)-(r||0)]},a.getTokensBetween=function(e,r,o){var s=o||0;return t(n(e)+1-s,i[r.range[0]]+s)},a.getTokenByRangeStart=function(t){return e[i[t]]||null},a}}),define("eslint/lib/utils/source-code",["./token-store","./traverser","./util"],function(e,t,n){function r(e){if(!e.tokens)throw new Error("AST is missing the tokens array.");if(!e.comments)throw new Error("AST is missing the comments array.");if(!e.loc)throw new Error("AST is missing location information.");if(!e.range)throw new Error("AST is missing range information")}function o(e,t){if(e)for(var n=e.length-1;n>=0;n--)if("Block"===e[n].type&&"*"===e[n].value.charAt(0)){if(t-e[n].loc.end.line<=1)return e[n];break}return null}function s(e){return"ExportDefaultDeclaration"===e.type||"ExportNamedDeclaration"===e.type||"ExportAllDeclaration"===e.type||"ExportSpecifier"===e.type}function a(t,n){r(n),this.hasBOM=65279===t.charCodeAt(0),this.text=this.hasBOM?t.slice(1):t,this.ast=n,this.lines=a.splitLines(this.text),this.tokensAndComments=n.tokens.concat(n.comments).sort(function(e,t){return e.range[0]-t.range[0]});var o=e(n.tokens);Object.keys(o).forEach(function(e){this[e]=o[e]},this);var s=e(this.tokensAndComments);this.getTokenOrCommentBefore=s.getTokenBefore,this.getTokenOrCommentAfter=s.getTokenAfter,Object.freeze(this),Object.freeze(this.lines)}return a.splitLines=function(e){return e.split(/\r\n|\r|\n|\u2028|\u2029/g)},a.prototype={constructor:a,getText:function(e,t,n){return e?null!==this.text?this.text.slice(Math.max(e.range[0]-(t||0),0),e.range[1]+(n||0)):null:this.text},getLines:function(){return this.lines},getAllComments:function(){return this.ast.comments},getComments:function(e){var t=e.leadingComments||[],n=e.trailingComments||[];return"Program"===e.type&&0===e.body.length&&(t=e.comments),{leading:t,trailing:n}},getJSDocComment:function(e){var t=e.parent;switch(e.type){case"ClassDeclaration":case"FunctionDeclaration":return s(t)?o(t.leadingComments,t.loc.start.line):o(e.leadingComments,e.loc.start.line);case"ClassExpression":return o(t.parent.leadingComments,t.parent.loc.start.line);case"ArrowFunctionExpression":case"FunctionExpression":if("CallExpression"!==t.type&&"NewExpression"!==t.type){for(;t&&!t.leadingComments&&!/Function/.test(t.type)&&"MethodDefinition"!==t.type&&"Property"!==t.type;)t=t.parent;return t&&"FunctionDeclaration"!==t.type?o(t.leadingComments,t.loc.start.line):null}if(e.leadingComments)return o(e.leadingComments,e.loc.start.line);default:return null}},getNodeByRangeIndex:function(e){var r=null,o=null,s=new t;return s.traverse(this.ast,{enter:function(t,n){t.range[0]<=e&&e<t.range[1]?(r=t,o=n):this.skip()},leave:function(e){e===r&&this["break"]()}}),r?n.mixin({parent:o},r):null},isSpaceBetweenTokens:function(e,t){var n=this.text.slice(e.range[1],t.range[0]);return/\s/.test(n.replace(/\/\*.*?\*\//g,""))}},a}),define("eslint/lib/utils/node-event-generator",[],function(){"use strict";function e(e){this.emitter=e}return e.prototype={constructor:e,enterNode:function(e){this.emitter.emit(e.type,e)},leaveNode:function(e){this.emitter.emit(e.type+":exit",e)}},e}),define("eslint/lib/utils/comment-event-generator",[],function(){"use strict";function e(e,t,n,r){e.length>0&&e.forEach(function(e){var o=n.indexOf(e.loc);o>=0?n.splice(o,1):(n.push(e.loc),t.emit(e.type+r,e))})}function t(t,n){e(n,t.emitter,t.commentLocsEnter,"Comment")}function n(t,n){e(n,t.emitter,t.commentLocsExit,"Comment:exit")}function r(e,t){this.original=e,this.emitter=e.emitter,this.sourceCode=t,this.commentLocsEnter=[],this.commentLocsExit=[]}return r.prototype={constructor:r,enterNode:function(e){var n=this.sourceCode.getComments(e);t(this,n.leading),this.original.enterNode(e),t(this,n.trailing)},leaveNode:function(e){var t=this.sourceCode.getComments(e);n(this,t.trailing),this.original.leaveNode(e),n(this,t.leading)}},r}),define("eslint/lib/config/config-validator",["eslint/conf/environments","./rules","module"],function(e,t,n){"use strict";function r(e){var n=t.get(e),r=n&&n.schema||n&&n.meta&&n.meta.schema;return Array.isArray(r)?r.length?{type:"array",items:r,minItems:0,maxItems:r.length}:{type:"array",minItems:0,maxItems:0}:r||null}function o(e,t,n){var o,s,a,l=i.rules[e],c=(r(e),!0);if(Array.isArray(t)?(a=t.concat(),s=a.shift()):(s=t,a=[]),c=0===s||1===s||2===s||"string"==typeof s&&/^(?:off|warn|error)$/i.test(s),l&&l(a),l&&l.errors||!c)throw o=[n,":\n",'	Configuration for rule "',e,'" is invalid:\n'],c||o.push("	Severity should be one of the following: 0 = off, 1 = warn, 2 = error (you passed '",util.inspect(s).replace(/'/g,'"').replace(/\n/g,""),"').\n"),l&&l.errors&&l.errors.forEach(function(e){o.push('	Value "',e.value,'" ',e.message,".\n")}),new Error(o.join(""))}function s(t,n){if(t){if(Array.isArray(t))throw new Error("Environment must not be an array");if("object"!=typeof t)throw new Error("Environment must be an object");Object.keys(t).forEach(function(t){if(!e.env){var r=[n,":\n",'	Environment key "',t,'" is unknown\n'];throw new Error(r.join(""))}})}}function a(e,t){"object"==typeof e.rules&&Object.keys(e.rules).forEach(function(n){o(n,e.rules[n],t)}),s(e.env,t)}var i={rules:Object.create(null)};n.exports={getRuleOptionsSchema:r,validate:a,validateRuleOptions:o}}),define("json!eslint/conf/replacements.json",function(){return{rules:{"generator-star":["generator-star-spacing"],"global-strict":["strict"],"no-arrow-condition":["no-confusing-arrow","no-constant-condition"],"no-comma-dangle":["comma-dangle"],"no-empty-class":["no-empty-character-class"],"no-empty-label":["no-labels"],"no-extra-strict":["strict"],"no-reserved-keys":["quote-props"],"no-space-before-semi":["semi-spacing"],"no-wrap-func":["no-extra-parens"],"space-after-function-name":["space-before-function-paren"],"space-after-keywords":["keyword-spacing"],"space-before-function-parentheses":["space-before-function-paren"],"space-before-keywords":["keyword-spacing"],"space-in-brackets":["object-curly-spacing","array-bracket-spacing","computed-property-spacing"],"space-return-throw-case":["keyword-spacing"],"space-unary-word-ops":["space-unary-ops"],"spaced-line-comment":["spaced-comment"]}}}),define("eslint/lib/config/config-ops",["eslint/conf/environments","../utils/util","module"],function(e,t,n){"use strict";var r=["off","warn","error"],o=r.reduce(function(e,t,n){return e[t]=n,e},{}),s=[0,1,2,"off","warn","error"],a=t.mixin;return n.exports={createEmptyConfig:function(){return{globals:{},env:{},rules:{},parserOptions:{}}},createEnvironmentConfig:function(t){var n=this.createEmptyConfig();return t&&(n.env=t,Object.keys(t).filter(function(e){return t[e]}).forEach(function(){var t=e.name;t&&(t.globals&&a(n.globals,t.globals),t.parserOptions&&a(n.parserOptions,t.parserOptions))})),n},applyEnvironments:function(e){return e.env&&"object"==typeof e.env?this.merge(this.createEnvironmentConfig(e.env),e):e},merge:function i(e,t,n,r){var o=Array.isArray(t)||Array.isArray(e),s=o&&[]||{};return n=!!n,r=!!r,o?(e=e||[],s=s.concat(r&&Array.isArray(t)&&t.length>1?t:e),"object"==typeof t||Array.isArray(t)||(t=[t]),Object.keys(t).forEach(function(o,a){o=t[a],"undefined"==typeof s[a]?s[a]=o:"object"==typeof o?s[a]=r?o:i(e[a],o,n,r):n?-1===s.indexOf(o)&&s.push(o):s[a]=o})):(e&&"object"==typeof e&&Object.keys(e).forEach(function(t){s[t]=e[t]}),Object.keys(t).forEach(function(o){s[o]=Array.isArray(t[o])||Array.isArray(e[o])?i(e[o],t[o],"plugins"===o,r):"object"==typeof t[o]&&t[o]&&"exported"!==o&&"astGlobals"!==o?i(e[o]||{},t[o],n,"rules"===o):t[o]})),s},normalize:function(e){e.rules&&Object.keys(e.rules).forEach(function(t){var n=e.rules[t];"string"==typeof n?e.rules[t]=o[n.toLowerCase()]||0:Array.isArray(n)&&"string"==typeof n[0]&&(n[0]=o[n[0].toLowerCase()]||0)})},normalizeToStrings:function(e){e.rules&&Object.keys(e.rules).forEach(function(t){var n=e.rules[t];"number"==typeof n?e.rules[t]=r[n]||r[0]:Array.isArray(n)&&"number"==typeof n[0]&&(n[0]=r[n[0]]||r[0])})},isErrorSeverity:function(e){var t=Array.isArray(e)?e[0]:e;return"string"==typeof t&&(t=o[t.toLowerCase()]||0),"number"==typeof t&&2===t},isValidSeverity:function(e){var t=Array.isArray(e)?e[0]:e;return"string"==typeof t&&(t=t.toLowerCase()),-1!==s.indexOf(t)},isEverySeverityValid:function(e){return Object.keys(e).every(function(t){return this.isValidSeverity(e[t])},this)}},n.exports}),define("eslint/lib/code-path-analysis/code-path-segment",[],function(){"use strict";function e(e){for(var t=Object.create(null),n=[],r=0;r<e.length;++r){var o=e[r];if(!t[o.id])if(o.internal.used)t[o.id]=!0,n.push(o);else for(var s=0;s<o.allPrevSegments.length;++s){var a=o.allPrevSegments[s];t[a.id]||(t[a.id]=!0,n.push(a))}}return n}function t(e){return e.reachable}function n(e,n,r){this.id=e,this.nextSegments=[],this.prevSegments=n.filter(t),this.allNextSegments=[],this.allPrevSegments=n,this.reachable=r,Object.defineProperty(this,"internal",{value:{used:!1,loopedPrevSegments:[]}})}return n.prototype={constructor:n,isLoopedPrevSegment:function(e){return-1!==this.internal.loopedPrevSegments.indexOf(e)}},n.newRoot=function(e){return new n(e,[],!0)},n.newNext=function(r,o){return new n(r,e(o),o.some(t))},n.newUnreachable=function(t,r){var o=new n(t,e(r),!1);return n.markUsed(o),o},n.newDisconnected=function(e,r){return new n(e,[],r.some(t))},n.markUsed=function(e){if(!e.internal.used){e.internal.used=!0;var t;if(e.reachable)for(t=0;t<e.allPrevSegments.length;++t){var n=e.allPrevSegments[t];n.allNextSegments.push(e),n.nextSegments.push(e)}else for(t=0;t<e.allPrevSegments.length;++t)e.allPrevSegments[t].allNextSegments.push(e)}},n.markPrevSegmentAsLooped=function(e,t){e.internal.loopedPrevSegments.push(t)},n}),define("eslint/lib/code-path-analysis/fork-context",["./code-path-segment"],function(e){"use strict";function t(e){return e.reachable}function n(e,t,n,r){var o=e.segmentsList;0>t&&(t=o.length+t),0>n&&(n=o.length+n);for(var s=[],a=0;a<e.count;++a){for(var i=[],l=t;n>=l;++l)i.push(o[l][a]);s.push(r(e.idGenerator.next(),i))}return s}function r(t,n){for(;n.length>t.count;){for(var r=[],o=0,s=n.length/2|0;s>o;++o)r.push(e.newNext(t.idGenerator.next(),[n[o],n[o+s]]));n=r}return n}function o(e,t,n){this.idGenerator=e,this.upper=t,this.count=n,this.segmentsList=[]}return o.prototype={constructor:o,get head(){var e=this.segmentsList;return 0===e.length?[]:e[e.length-1]},get empty(){return 0===this.segmentsList.length},get reachable(){var e=this.head;return e.length>0&&e.some(t)},makeNext:function(t,r){return n(this,t,r,e.newNext)},makeUnreachable:function(t,r){return n(this,t,r,e.newUnreachable)},makeDisconnected:function(t,r){return n(this,t,r,e.newDisconnected)},add:function(e){this.segmentsList.push(r(this,e))},replaceHead:function(e){this.segmentsList.splice(-1,1,r(this,e))},addAll:function(e){for(var t=e.segmentsList,n=0;n<t.length;++n)this.segmentsList.push(t[n])},clear:function(){this.segmentsList=[]}},o.newRoot=function(t){var n=new o(t,null,1);return n.add([e.newRoot(t.next())]),n},o.newEmpty=function(e,t){return new o(e.idGenerator,e,(t?2:1)*e.count)},o}),define("eslint/lib/code-path-analysis/code-path-state",["./code-path-segment","./fork-context"],function(e,t){"use strict";function n(e,t,n,r){for(var o=0;o<r.length;++o){var s=r[o];e.push(s),-1===t.indexOf(s)&&n.push(s)}}function r(e,t){if(!t)return e.loopContext;for(var n=e.loopContext;n;){if(n.label===t)return n;n=n.upper}return null}function o(e,t){for(var n=e.breakContext;n;){if(t?n.label===t:n.breakable)return n;n=n.upper}return null}function s(e){for(var t=e.tryContext;t;){if(t.hasFinalizer&&"finally"!==t.position)return t;t=t.upper}return e}function a(e){for(var t=e.tryContext;t;){if("try"===t.position||t.hasFinalizer&&"catch"===t.position)return t;t=t.upper}return e}function i(e,t){e.splice(e.indexOf(t),1)}function l(e,t){for(var n=0;n<e.length;++n){var r=e[n],o=t[n];i(r.nextSegments,o),i(r.allNextSegments,o),i(o.prevSegments,r),i(o.allPrevSegments,r)}}function c(t,n,r){for(var o=Math.min(n.length,r.length),s=0;o>s;++s){var a=n[s],i=r[s];i.reachable&&a.nextSegments.push(i),a.reachable&&i.prevSegments.push(a),a.allNextSegments.push(i),i.allPrevSegments.push(a),i.allPrevSegments.length>=2&&e.markPrevSegmentAsLooped(i,a),t.notifyLooped(a,i)}}function p(e,t,n){t.processed||(t.trueForkContext.add(n),t.falseForkContext.add(n)),e.test!==!0&&e.brokenForkContext.addAll(t.falseForkContext),e.endOfTestSegments=t.trueForkContext.makeNext(0,-1)}function u(e,r){this.idGenerator=e,this.notifyLooped=r,this.forkContext=t.newRoot(e),this.choiceContext=null,this.switchContext=null,this.tryContext=null,this.loopContext=null,this.breakContext=null,this.currentSegments=[],this.initialSegment=this.forkContext.head[0];var o=this.finalSegments=[],s=this.returnedForkContext=[],a=this.thrownForkContext=[];s.add=n.bind(null,s,a,o),a.add=n.bind(null,a,s,o)}return u.prototype={constructor:u,get headSegments(){return this.forkContext.head},get parentForkContext(){var e=this.forkContext;return e&&e.upper},pushForkContext:function(e){return this.forkContext=t.newEmpty(this.forkContext,e),this.forkContext},popForkContext:function(){var e=this.forkContext;return this.forkContext=e.upper,this.forkContext.replaceHead(e.makeNext(0,-1)),e},forkPath:function(){this.forkContext.add(this.parentForkContext.makeNext(-1,-1))},forkBypassPath:function(){this.forkContext.add(this.parentForkContext.head)},pushChoiceContext:function(e,n){this.choiceContext={upper:this.choiceContext,kind:e,isForkingAsResult:n,trueForkContext:t.newEmpty(this.forkContext),falseForkContext:t.newEmpty(this.forkContext),processed:!1}},popChoiceContext:function(){var e=this.choiceContext;this.choiceContext=e.upper;var t=this.forkContext,n=t.head;switch(e.kind){case"&&":case"||":if(e.processed||(e.trueForkContext.add(n),e.falseForkContext.add(n)),e.isForkingAsResult){var r=this.choiceContext;return r.trueForkContext.addAll(e.trueForkContext),r.falseForkContext.addAll(e.falseForkContext),r.processed=!0,e}break;case"test":e.processed?(e.falseForkContext.clear(),e.falseForkContext.add(n)):(e.trueForkContext.clear(),e.trueForkContext.add(n));break;case"loop":return e;default:throw new Error("unreachable")}var o=e.trueForkContext;return o.addAll(e.falseForkContext),t.replaceHead(o.makeNext(0,-1)),e},makeLogicalRight:function(){var e=this.choiceContext,t=this.forkContext;if(e.processed){var n="&&"===e.kind?e.trueForkContext:e.falseForkContext;t.replaceHead(n.makeNext(0,-1)),n.clear(),e.processed=!1}else"&&"===e.kind?e.falseForkContext.add(t.head):e.trueForkContext.add(t.head),t.replaceHead(t.makeNext(-1,-1))},makeIfConsequent:function(){var e=this.choiceContext,t=this.forkContext;e.processed||(e.trueForkContext.add(t.head),e.falseForkContext.add(t.head)),e.processed=!1,t.replaceHead(e.trueForkContext.makeNext(0,-1))},makeIfAlternate:function(){var e=this.choiceContext,t=this.forkContext;e.trueForkContext.clear(),e.trueForkContext.add(t.head),e.processed=!0,t.replaceHead(e.falseForkContext.makeNext(0,-1))},pushSwitchContext:function(e,t){this.switchContext={upper:this.switchContext,hasCase:e,defaultSegments:null,defaultBodySegments:null,foundDefault:!1,lastIsDefault:!1,countForks:0},this.pushBreakContext(!0,t)},popSwitchContext:function(){var e=this.switchContext;this.switchContext=e.upper;var t=this.forkContext,n=this.popBreakContext().brokenForkContext;if(0===e.countForks)return void(n.empty||(n.add(t.makeNext(-1,-1)),t.replaceHead(n.makeNext(0,-1))));var r=t.head;this.forkBypassPath();var o=t.head;n.add(r),e.lastIsDefault||(e.defaultBodySegments?(l(e.defaultSegments,e.defaultBodySegments),c(this,o,e.defaultBodySegments)):n.add(o));for(var s=0;s<e.countForks;++s)this.forkContext=this.forkContext.upper;this.forkContext.replaceHead(n.makeNext(0,-1))},makeSwitchCaseBody:function(e,t){var n=this.switchContext;if(n.hasCase){var r=this.forkContext,o=this.pushForkContext();o.add(r.makeNext(0,-1)),t?(n.defaultSegments=r.head,e?n.foundDefault=!0:n.defaultBodySegments=o.head):!e&&n.foundDefault&&(n.foundDefault=!1,n.defaultBodySegments=o.head),n.lastIsDefault=t,n.countForks+=1}},pushTryContext:function(e){this.tryContext={upper:this.tryContext,position:"try",hasFinalizer:e,returnedForkContext:e?t.newEmpty(this.forkContext):null,thrownForkContext:t.newEmpty(this.forkContext),lastOfTryIsReachable:!1,lastOfCatchIsReachable:!1}},popTryContext:function(){var e=this.tryContext;if(this.tryContext=e.upper,"catch"===e.position)return void this.popForkContext();var t=e.returnedForkContext,n=e.thrownForkContext;if(!t.empty||!n.empty){var r=this.forkContext.head;this.forkContext=this.forkContext.upper;var o=r.slice(0,r.length/2|0),i=r.slice(r.length/2|0);t.empty||s(this).returnedForkContext.add(i),n.empty||a(this).thrownForkContext.add(i),this.forkContext.replaceHead(o),e.lastOfTryIsReachable||e.lastOfCatchIsReachable||this.forkContext.makeUnreachable()}},makeCatchBlock:function(){var e=this.tryContext,n=this.forkContext,r=e.thrownForkContext;e.position="catch",e.thrownForkContext=t.newEmpty(n),e.lastOfTryIsReachable=n.reachable,r.add(n.head);var o=r.makeNext(0,-1);this.pushForkContext(),this.forkBypassPath(),this.forkContext.add(o)},makeFinallyBlock:function(){var t=this.tryContext,n=this.forkContext,r=t.returnedForkContext,o=t.thrownForkContext,s=n.head;if("catch"===t.position?(this.popForkContext(),n=this.forkContext,t.lastOfCatchIsReachable=n.reachable):t.lastOfTryIsReachable=n.reachable,t.position="finally",!r.empty||!o.empty){for(var a,i=n.makeNext(-1,-1),l=0;l<n.count;++l){var c=[s[l]];for(a=0;a<r.segmentsList.length;++a)c.push(r.segmentsList[a][l]);for(a=0;a<o.segmentsList.length;++a)c.push(o.segmentsList[a][l]);i.push(e.newNext(this.idGenerator.next(),c))}this.pushForkContext(!0),this.forkContext.add(i)}},makeFirstThrowablePathInTryBlock:function(){var e=this.forkContext;if(e.reachable){var t=a(this);t!==this&&"try"===t.position&&t.thrownForkContext.empty&&(t.thrownForkContext.add(e.head),e.replaceHead(e.makeNext(-1,-1)))}},pushLoopContext:function(e,n){var r=this.forkContext,o=this.pushBreakContext(!0,n);switch(e){case"WhileStatement":this.pushChoiceContext("loop",!1),this.loopContext={upper:this.loopContext,type:e,label:n,continueDestSegments:null,brokenForkContext:o.brokenForkContext};break;case"DoWhileStatement":this.pushChoiceContext("loop",!1),this.loopContext={upper:this.loopContext,type:e,label:n,entrySegments:null,continueForkContext:t.newEmpty(r),brokenForkContext:o.brokenForkContext};break;case"ForStatement":this.pushChoiceContext("loop",!1),this.loopContext={upper:this.loopContext,type:e,label:n,endOfInitSegments:null,testSegments:null,endOfTestSegments:null,updateSegments:null,endOfUpdateSegments:null,continueDestSegments:null,brokenForkContext:o.brokenForkContext};break;case"ForInStatement":case"ForOfStatement":this.loopContext={upper:this.loopContext,type:e,label:n,prevSegments:null,leftSegments:null,endOfLeftSegments:null,continueDestSegments:null,brokenForkContext:o.brokenForkContext};break;default:throw new Error('unknown type: "'+e+'"')}},popLoopContext:function(){var e=this.loopContext;this.loopContext=e.upper;var t,n=this.forkContext,r=this.popBreakContext().brokenForkContext;switch(e.type){case"WhileStatement":case"ForStatement":t=this.popChoiceContext(),c(this,n.head,e.continueDestSegments);break;case"DoWhileStatement":t=this.popChoiceContext(),t.processed||(t.trueForkContext.add(n.head),t.falseForkContext.add(n.head)),e.test!==!0&&r.addAll(t.falseForkContext);for(var o=t.trueForkContext.segmentsList,s=0;s<o.length;++s)c(this,o[s],e.entrySegments);break;case"ForInStatement":case"ForOfStatement":r.add(n.head),c(this,n.head,e.leftSegments);break;default:throw new Error("unreachable")}n.replaceHead(r.empty?n.makeUnreachable(-1,-1):r.makeNext(0,-1))},makeWhileTest:function(e){var t=this.loopContext,n=this.forkContext,r=n.makeNext(0,-1);t.test=e,t.continueDestSegments=r,n.replaceHead(r)},makeWhileBody:function(){var e=this.loopContext,t=this.choiceContext,n=this.forkContext;t.processed||(t.trueForkContext.add(n.head),t.falseForkContext.add(n.head)),e.test!==!0&&e.brokenForkContext.addAll(t.falseForkContext),n.replaceHead(t.trueForkContext.makeNext(0,-1))},makeDoWhileBody:function(){var e=this.loopContext,t=this.forkContext,n=t.makeNext(-1,-1);e.entrySegments=n,t.replaceHead(n)},makeDoWhileTest:function(e){var t=this.loopContext,n=this.forkContext;if(t.test=e,!t.continueForkContext.empty){t.continueForkContext.add(n.head);var r=t.continueForkContext.makeNext(0,-1);n.replaceHead(r)}},makeForTest:function(e){var t=this.loopContext,n=this.forkContext,r=n.head,o=n.makeNext(-1,-1);t.test=e,t.endOfInitSegments=r,t.continueDestSegments=t.testSegments=o,n.replaceHead(o)},makeForUpdate:function(){var e=this.loopContext,t=this.choiceContext,n=this.forkContext;e.testSegments?p(e,t,n.head):e.endOfInitSegments=n.head;var r=n.makeDisconnected(-1,-1);e.continueDestSegments=e.updateSegments=r,n.replaceHead(r)},makeForBody:function(){var e=this.loopContext,n=this.choiceContext,r=this.forkContext;e.updateSegments?(e.endOfUpdateSegments=r.head,e.testSegments&&c(this,e.endOfUpdateSegments,e.testSegments)):e.testSegments?p(e,n,r.head):e.endOfInitSegments=r.head;var o=e.endOfTestSegments;if(!o){var s=t.newEmpty(r);s.add(e.endOfInitSegments),e.endOfUpdateSegments&&s.add(e.endOfUpdateSegments),o=s.makeNext(0,-1)}e.continueDestSegments=e.continueDestSegments||o,r.replaceHead(o)},makeForInOfLeft:function(){var e=this.loopContext,t=this.forkContext,n=t.makeDisconnected(-1,-1);
e.prevSegments=t.head,e.leftSegments=e.continueDestSegments=n,t.replaceHead(n)},makeForInOfRight:function(){var e=this.loopContext,n=this.forkContext,r=t.newEmpty(n);r.add(e.prevSegments);var o=r.makeNext(-1,-1);e.endOfLeftSegments=n.head,n.replaceHead(o)},makeForInOfBody:function(){var e=this.loopContext,n=this.forkContext,r=t.newEmpty(n);r.add(e.endOfLeftSegments);var o=r.makeNext(-1,-1);c(this,n.head,e.leftSegments),e.brokenForkContext.add(n.head),n.replaceHead(o)},pushBreakContext:function(e,n){return this.breakContext={upper:this.breakContext,breakable:e,label:n,brokenForkContext:t.newEmpty(this.forkContext)},this.breakContext},popBreakContext:function(){var e=this.breakContext,t=this.forkContext;if(this.breakContext=e.upper,!e.breakable){var n=e.brokenForkContext;n.empty||(n.add(t.head),t.replaceHead(n.makeNext(0,-1)))}return e},makeBreak:function(e){var t=this.forkContext;if(t.reachable){var n=o(this,e);n&&n.brokenForkContext.add(t.head),t.replaceHead(t.makeUnreachable(-1,-1))}},makeContinue:function(e){var t=this.forkContext;if(t.reachable){var n=r(this,e);n&&(n.continueDestSegments?(c(this,t.head,n.continueDestSegments),("ForInStatement"===n.type||"ForOfStatement"===n.type)&&n.brokenForkContext.add(t.head)):n.continueForkContext.add(t.head)),t.replaceHead(t.makeUnreachable(-1,-1))}},makeReturn:function(){var e=this.forkContext;e.reachable&&(s(this).returnedForkContext.add(e.head),e.replaceHead(e.makeUnreachable(-1,-1)))},makeThrow:function(){var e=this.forkContext;e.reachable&&(a(this).thrownForkContext.add(e.head),e.replaceHead(e.makeUnreachable(-1,-1)))},makeFinal:function(){var e=this.currentSegments;e.length>0&&e[0].reachable&&this.returnedForkContext.add(e)}},u}),define("eslint/lib/code-path-analysis/id-generator",["module"],function(e){"use strict";function t(e){this.prefix=String(e),this.n=0}return t.prototype.next=function(){return this.n=1+this.n|0,this.n<0&&(this.n=1),this.prefix+this.n},e.exports=t,e.exports}),define("eslint/lib/code-path-analysis/code-path",["./code-path-state","./id-generator"],function(e,t){"use strict";function n(n,r,o){this.id=n,this.upper=r,this.childCodePaths=[],Object.defineProperty(this,"internal",{value:new e(new t(n+"_"),o)}),r&&r.childCodePaths.push(this)}return n.prototype={constructor:n,get initialSegment(){return this.internal.initialSegment},get finalSegments(){return this.internal.finalSegments},get returnedSegments(){return this.internal.returnedForkContext},get thrownSegments(){return this.internal.thrownForkContext},get currentSegments(){return this.internal.currentSegments},traverseSegments:function(e,t){function n(e){return c[e.id]||l.isLoopedPrevSegment(e)}"function"==typeof e&&(t=e,e=null),e=e||{};for(var r=e.first||this.internal.initialSegment,o=e.last,s=null,a=0,i=0,l=null,c=Object.create(null),p=[[r,0]],u=null,d=!1,h={skip:function(){p.length<=1?d=!0:u=p[p.length-2][0]},"break":function(){d=!0}};p.length>0;){if(s=p[p.length-1],l=s[0],a=s[1],0===a){if(c[l.id]){p.pop();continue}if(l!==r&&l.prevSegments.length>0&&!l.prevSegments.every(n)){p.pop();continue}if(u&&-1!==l.prevSegments.indexOf(u)&&(u=null),c[l.id]=!0,!u&&(t.call(this,l,h),l===o&&h.skip(),d))break}i=l.nextSegments.length-1,i>a?(s[1]+=1,p.push([l.nextSegments[a],0])):a===i?(s[0]=l.nextSegments[a],s[1]=0):p.pop()}}},n.getState=function(e){return e.internal},n}),define("eslint/lib/code-path-analysis/code-path-analyzer",["./code-path","./code-path-segment","./id-generator","../utils/util"],function(e,t,n,r){"use strict";function o(e){return Boolean(e.test)}function s(e){var t=e.parent;switch(t.type){case"ConditionalExpression":case"IfStatement":case"WhileStatement":case"DoWhileStatement":case"ForStatement":return t.test===e;case"LogicalExpression":return!0;default:return!1}}function a(e){return"Literal"===e.type?Boolean(e.value):void 0}function i(e){var t=e.parent;switch(t.type){case"LabeledStatement":case"BreakStatement":case"ContinueStatement":case"ArrayPattern":case"RestElement":case"ImportSpecifier":case"ImportDefaultSpecifier":case"ImportNamespaceSpecifier":case"CatchClause":return!1;case"FunctionDeclaration":case"FunctionExpression":case"ArrowFunctionExpression":case"ClassDeclaration":case"ClassExpression":case"VariableDeclarator":return t.id!==e;case"Property":case"MethodDefinition":return t.key!==e||t.computed||t.shorthand;case"AssignmentPattern":return t.key!==e;default:return!0}}function l(n,r){var o,s,a,i=n.codePath,l=e.getState(i),c=l.currentSegments,p=l.headSegments,u=Math.max(c.length,p.length);for(o=0;u>o;++o)s=c[o],a=p[o],s!==a&&s&&s.reachable&&n.emitter.emit("onCodePathSegmentEnd",s,r);for(l.currentSegments=p,o=0;u>o;++o)s=c[o],a=p[o],s!==a&&a&&(t.markUsed(a),a.reachable&&n.emitter.emit("onCodePathSegmentStart",a,r))}function c(t,n){for(var r=e.getState(t.codePath),o=r.currentSegments,s=0;s<o.length;++s){var a=o[s];a.reachable&&t.emitter.emit("onCodePathSegmentEnd",a,n)}r.currentSegments=[]}function p(t,n){var r=t.codePath,o=e.getState(r),s=n.parent;switch(s.type){case"LogicalExpression":s.right===n&&o.makeLogicalRight();break;case"ConditionalExpression":case"IfStatement":s.consequent===n?o.makeIfConsequent():s.alternate===n&&o.makeIfAlternate();break;case"SwitchCase":s.consequent[0]===n&&o.makeSwitchCaseBody(!1,!s.test);break;case"TryStatement":s.handler===n?o.makeCatchBlock():s.finalizer===n&&o.makeFinallyBlock();break;case"WhileStatement":s.test===n?o.makeWhileTest(a(n)):o.makeWhileBody();break;case"DoWhileStatement":s.body===n?o.makeDoWhileBody():o.makeDoWhileTest(a(n));break;case"ForStatement":s.test===n?o.makeForTest(a(n)):s.update===n?o.makeForUpdate():s.body===n&&o.makeForBody();break;case"ForInStatement":case"ForOfStatement":s.left===n?o.makeForInOfLeft():s.right===n?o.makeForInOfRight():o.makeForInOfBody();break;case"AssignmentPattern":s.right===n&&(o.pushForkContext(),o.forkBypassPath(),o.forkPath())}}function u(t,n){var a=t.codePath,i=a&&e.getState(a),c=n.parent;switch(n.type){case"Program":case"FunctionDeclaration":case"FunctionExpression":case"ArrowFunctionExpression":a&&l(t,n),a=t.codePath=new e(t.idGenerator.next(),a,t.onLooped),i=e.getState(a),t.emitter.emit("onCodePathStart",a,n);break;case"LogicalExpression":i.pushChoiceContext(n.operator,s(n));break;case"ConditionalExpression":case"IfStatement":i.pushChoiceContext("test",!1);break;case"SwitchStatement":i.pushSwitchContext(n.cases.some(o),r.getLabel(n));break;case"TryStatement":i.pushTryContext(Boolean(n.finalizer));break;case"SwitchCase":c.discriminant!==n&&c.cases[0]!==n&&i.forkPath();break;case"WhileStatement":case"DoWhileStatement":case"ForStatement":case"ForInStatement":case"ForOfStatement":i.pushLoopContext(n.type,r.getLabel(n));break;case"LabeledStatement":r.isBreakableStatement(n.body)||i.pushBreakContext(!1,n.label.name)}l(t,n)}function d(t,n){var o=t.codePath,s=e.getState(o),a=!1;switch(n.type){case"IfStatement":case"ConditionalExpression":case"LogicalExpression":s.popChoiceContext();break;case"SwitchStatement":s.popSwitchContext();break;case"SwitchCase":0===n.consequent.length&&s.makeSwitchCaseBody(!0,!n.test),s.forkContext.reachable&&(a=!0);break;case"TryStatement":s.popTryContext();break;case"BreakStatement":l(t,n),s.makeBreak(n.label&&n.label.name),a=!0;break;case"ContinueStatement":l(t,n),s.makeContinue(n.label&&n.label.name),a=!0;break;case"ReturnStatement":l(t,n),s.makeReturn(),a=!0;break;case"ThrowStatement":l(t,n),s.makeThrow(),a=!0;break;case"Identifier":i(n)&&(s.makeFirstThrowablePathInTryBlock(),a=!0);break;case"CallExpression":case"MemberExpression":case"NewExpression":s.makeFirstThrowablePathInTryBlock();break;case"WhileStatement":case"DoWhileStatement":case"ForStatement":case"ForInStatement":case"ForOfStatement":s.popLoopContext();break;case"AssignmentPattern":s.popForkContext();break;case"LabeledStatement":r.isBreakableStatement(n.body)||s.popBreakContext()}a||n.parent&&n.type===n.parent.type||l(t,n)}function h(t,n){switch(n.type){case"Program":case"FunctionDeclaration":case"FunctionExpression":case"ArrowFunctionExpression":var r=t.codePath;e.getState(r).makeFinal(),c(t,n),t.emitter.emit("onCodePathEnd",r,n),r=t.codePath=t.codePath.upper}}function f(e){this.original=e,this.emitter=e.emitter,this.codePath=null,this.idGenerator=new n("s"),this.currentNode=null,this.onLooped=this.onLooped.bind(this)}return f.prototype={constructor:f,enterNode:function(e){this.currentNode=e,e.parent&&p(this,e),u(this,e),this.original.enterNode(e),this.currentNode=null},leaveNode:function(e){this.currentNode=e,d(this,e),this.original.leaveNode(e),h(this,e),this.currentNode=null},onLooped:function(e,t){e.reachable&&t.reachable&&this.emitter.emit("onCodePathSegmentLoop",e,t,this.currentNode)}},f}),define("eslint/lib/eslint",["./utils/traverser","escope/escope","./config/environments","./config/rules","./utils/util","./rule-context","./events","require","module","./utils/source-code","./utils/node-event-generator","./utils/comment-event-generator","./config/config-validator","json!eslint/conf/replacements.json","./config/config-ops","./code-path-analysis/code-path-analyzer"],function(e,t,n,r,o,s,a,i,l,c,p,u,d,h,f,m){"use strict";function g(e,t){var n={};return e=e.replace(/\s*:\s*/g,":"),e=e.replace(/\s*,\s*/g,","),e.split(/\s|,+/).forEach(function(e){if(e){var r,o=e.indexOf(":");-1!==o&&(r=e.substring(o+1,e.length),e=e.substring(0,o)),n[e]={value:"true"===r,comment:t}}}),n}function b(e,t,n){var r={};r={},e=e.replace(/([a-zA-Z0-9\-\/]+):/g,'"$1":').replace(/(\]|[0-9])\s+(?=")/,"$1,");try{r=JSON.parse("{"+e+"}")}catch(o){n.push({ruleId:null,fatal:!0,severity:2,source:null,message:"Failed to parse JSON from '"+e+"': "+o.message,line:t.start.line,column:t.start.column+1})}return r}function y(e){var t={};return e=e.replace(/\s*,\s*/g,","),e.split(/,+/).forEach(function(e){e=e.trim(),e&&(t[e]=!0)}),t}function v(e,r,o){var s={},a={},i={},l=n.get("builtin");R(s,l),Object.keys(o.env).forEach(function(e){if(o.env[e]){var t=n.get(e),r=t&&t.globals;r&&R(s,r)}}),R(a,o.exported),R(s,o.globals),R(i,o.astGlobals),Object.keys(s).forEach(function(e){var n=r.set.get(e);n||(n=new t.Variable(e,r),n.eslintExplicitGlobal=!1,r.variables.push(n),r.set.set(e,n)),n.writeable=s[e]}),Object.keys(i).forEach(function(e){var n=r.set.get(e);n||(n=new t.Variable(e,r),n.eslintExplicitGlobal=!0,n.eslintExplicitGlobalComment=i[e].comment,r.variables.push(n),r.set.set(e,n)),n.writeable=i[e].value}),Object.keys(a).forEach(function(e){var t=r.set.get(e);t&&(t.eslintUsed=!0)}),r.through=r.through.filter(function(e){var t=e.identifier.name,n=r.set.get(t);return n?(e.resolved=n,n.references.push(e),!1):!0})}function x(e,t,n){n.length?n.forEach(function(n){e.push({start:t,end:null,rule:n})}):e.push({start:t,end:null,rule:null})}function _(e,t,n){var r;if(n.length)n.forEach(function(n){for(r=e.length-1;r>=0;r--)if(!e[r].end&&e[r].rule===n){e[r].end=t;break}});else{var o;for(r=e.length-1;r>=0&&(!o||o===e[r].start);r--)e[r].end||(e[r].end=t,o=e[r].start)}}function S(e,t,r,o,s){var a={exported:{},astGlobals:{},rules:{},env:{}},i={};return t.comments.forEach(function(t){var n=t.value.trim(),r=/^(eslint(-\w+){0,3}|exported|globals?)(\s|$)/.exec(n);if(r)if(n=n.substring(r.index+r[1].length),"Block"===t.type)switch(r[1]){case"exported":R(a.exported,g(n,t));break;case"globals":case"global":R(a.astGlobals,g(n,t));break;case"eslint-env":R(a.env,y(n));break;case"eslint-disable":x(o,t.loc.start,Object.keys(y(n)));break;case"eslint-enable":_(o,t.loc.start,Object.keys(y(n)));break;case"eslint":var l=b(n,t.loc,s);Object.keys(l).forEach(function(n){var r=l[n];d.validateRuleOptions(n,r,e+" line "+t.loc.start.line),i[n]=r})}else"eslint-disable-line"===r[1]?(x(o,{line:t.loc.start.line,column:0},Object.keys(y(n))),_(o,t.loc.end,Object.keys(y(n)))):"eslint-disable-next-line"===r[1]&&(x(o,t.loc.start,Object.keys(y(n))),_(o,{line:t.loc.start.line+2},Object.keys(y(n))))}),Object.keys(a.env).forEach(function(e){var t=n.get(e);t&&(a=f.merge(a,t))}),R(a.rules,i),f.merge(r,a)}function w(e,t,n){for(var r=0,o=e.length;o>r;r++){var s=e[r];if((!s.rule||s.rule===t)&&(n.line>s.start.line||n.line===s.start.line&&n.column>=s.start.column)&&(!s.end||n.line<s.end.line||n.line===s.end.line&&n.column<=s.end.column))return!0}return!1}function k(e){e.globals=e.globals||e.global||{},delete e.global;var t,r={},o={};return"object"==typeof e.rules&&Object.keys(e.rules).forEach(function(t){var n=e.rules[t];if(null===n)throw new Error("Invalid config for rule '"+t+"'.");r[t]=Array.isArray(n)?n.slice():n}),"object"==typeof e.env&&Object.keys(e.env).forEach(function(t){var r=n.get(t);e.env[t]&&r&&r.parserOptions&&(o=f.merge(o,r.parserOptions))}),t={rules:r,parser:e.parser||D,globals:f.merge({},e.globals),env:f.merge({},e.env||{}),settings:f.merge({},e.settings||{}),parserOptions:f.merge(o,e.parserOptions||{}),tern:e.tern},"module"===t.parserOptions.sourceType&&(t.parserOptions.ecmaFeatures||(t.parserOptions.ecmaFeatures={}),t.parserOptions.ecmaFeatures.globalReturn=!1,(!t.parserOptions.ecmaVersion||t.parserOptions.ecmaVersion<6)&&(t.parserOptions.ecmaVersion=6)),t}function E(e){function t(t){return{Program:function(n){t.report(n,e)}}}if(e)return t;throw new Error("No message passed to stub rule")}function j(e){if(e in A.rules){var t=A.rules[e];return"Rule '"+e+"' was removed and replaced by: "+t.join(", ")}return null}function T(e){var t,n;for(M.lastIndex=0;t=M.exec(e);)n=R(n||{},y(t[1]));return n}function O(e){return 65279===e.charCodeAt(0)?e.slice(1):e}var C=a.EventEmitter,R=o.mixin,A=h,D="",M=/\/\*\s*eslint-env\s(.+?)\*\//g;return l.exports=function(){function n(e,t){var n,r={loc:!0,range:!0,raw:!0,tokens:!0,comment:!0,attachComment:!0};try{n=i(t.parser)}catch(o){return d.push({ruleId:null,fatal:!0,severity:2,source:null,message:o.message,line:0,column:0}),null}t.parserOptions&&(r=R({},t.parserOptions,r));try{return n.parse(e,r)}catch(o){var s=o.message.replace(/^line \d+:/i,"").trim(),a=o.lineNumber?c.splitLines(e)[o.lineNumber-1]:null;return d.push({ruleId:null,fatal:!0,severity:2,source:a,message:"Parsing error: "+s,line:o.lineNumber,column:o.column}),null}}function o(e){return"number"==typeof e?e:Array.isArray(e)?e[0]:0}function a(e){return Array.isArray(e)?e.slice(1):[]}var l=Object.create(new C),d=[],h=null,g=null,b=null,y=null,x=null,_=null,A=[],D=null;l.setMaxListeners(0),l.reset=function(){this.removeAllListeners(),d=[],h=null,g=null,b=null,y=null,_=null,A=[],D=null},l.verify=function(i,w,C,M){var P,N,I,L,F,z="string"==typeof i?i:null;"object"==typeof C?(x=C.filename,F=C.allowInlineConfig,M=C.saveState):x=C,M||this.reset();var q=T(z||i.text);if(q&&(w&&w.env?(w=R({},w),w.env=R({},w.env,q)):w=R({},w||{},{env:q})),w=k(w||{}),null!==z){if(0===z.trim().length)return d;P=n(O(z).replace(/^#!([^\r\n]+)/,function(e,t){return N=t,"//"+t}),w),P&&(D=new c(z,P))}else D=i,P=D.ast;if(P){F!==!1&&(w=S(x,P,w,A,d)),f.normalize(w),Object.keys(w.rules).filter(function(e){return o(w.rules[e])>0}).forEach(function(e){var t,n,i,c;if(t=r.get(e),!t){var p=j(e);t=E(p?p:"Definition for rule '"+e+"' was not found"),r.define(e,t)}n=o(w.rules[e]),i=a(w.rules[e]);var u=w.settings;u||(u=Object.create(null)),u.tern=w.tern;try{var d=new s(e,l,n,i,u,w.parserOptions,w.parser,t.meta,w.env);c=t.create?t.create(d):t(d),Object.keys(c).forEach(function(e){l.on(e,c[e])})}catch(h){throw h.message="Error while loading rule '"+e+"': "+h.message,h}}),h=w,_=new e,I=h.parserOptions.ecmaFeatures||{},L=h.parserOptions.ecmaVersion||5,y=t.analyze(P,{ignoreEval:!0,nodejsScope:I.globalReturn,impliedStrict:I.impliedStrict,ecmaVersion:L,sourceType:h.parserOptions.sourceType||"script",fallback:e.getKeys}),g=y.scopes,b=[],g.forEach(function(e,t){var n=e.block.range[0];b[n]||(b[n]=t)}),v(P,g[0],h),N&&P.comments.length&&P.comments[0].value===N&&(P.comments.splice(0,1),P.body.length&&P.body[0].leadingComments&&P.body[0].leadingComments[0].value===N&&P.body[0].leadingComments.splice(0,1));var U=new p(l);U=new m(U),U=new u(U,D),_.traverse(P,{enter:function(e,t){e.parent=t,U.enterNode(e)},leave:function(e){U.leaveNode(e)}})}return d.sort(function(e,t){var n=e.line-t.line;return 0===n?e.column-t.column:n}),d},l.report=function(e,t,n,r,o,s,a,i,l){if("string"==typeof r&&(i=a,a=s,l=s,s=o,o=r,r=n.loc.start),!w(A,e,r)){s&&(o=o.replace(/\{\{\s*(.+?)\s*\}\}/g,function(e,t){return t in s?s[t]:e}));var c={ruleId:e,severity:t,node:n,args:s,message:o,line:r.line,column:r.column,nodeType:n&&n.type,source:D.lines[r.line-1]||"",related:"undefined"!=typeof l?l:null};if(a&&Array.isArray(a.range)&&"string"==typeof a.text){if(i&&!i.fixable)throw new Error("Fixable rules should export a `meta.fixable` property.");c.fix=a}d.push(c)}},l.getSourceCode=function(){return D};var M={getSource:"getText",getSourceLines:"getLines",getAllComments:"getAllComments",getNodeByRangeIndex:"getNodeByRangeIndex",getComments:"getComments",getJSDocComment:"getJSDocComment",getFirstToken:"getFirstToken",getFirstTokens:"getFirstTokens",getLastToken:"getLastToken",getLastTokens:"getLastTokens",getTokenAfter:"getTokenAfter",getTokenBefore:"getTokenBefore",getTokenByRangeStart:"getTokenByRangeStart",getTokens:"getTokens",getTokensAfter:"getTokensAfter",getTokensBefore:"getTokensBefore",getTokensBetween:"getTokensBetween"};Object.keys(M).forEach(function(e){var t=M[e];l[e]=function(e,n,r,o,s){return D?D[t](e,n,r,o,s):null}}),l.getAncestors=function(){return _.parents()},l.getScope=function(){var e=_.parents(),t=g[0];if(e.length){var n=_.current();h.parserOptions.ecmaVersion>=6?["BlockStatement","SwitchStatement","CatchClause","FunctionDeclaration","FunctionExpression","ArrowFunctionExpression"].indexOf(n.type)>=0&&e.push(n):["FunctionDeclaration","FunctionExpression","ArrowFunctionExpression"].indexOf(n.type)>=0&&e.push(n);for(var r=e.length-1;r>=0;--r)if(t=y.acquire(e[r],!0))return"function-expression-name"===t.type?t.childScopes[0]:t}return g[0]},l.markVariableAsUsed=function(e){var t,n,r,o=this.getScope(),s=h.parserOptions.ecmaFeatures&&h.parserOptions.ecmaFeatures.globalReturn,a=s||"module"===h.parserOptions.sourceType;"global"===o.type&&a&&(o=o.childScopes[0]);do for(t=o.variables,n=0,r=t.length;r>n;n++)if(t[n].name===e)return t[n].eslintUsed=!0,!0;while(o=o.upper);return!1},l.getFilename=function(){return"string"==typeof x?x:"<input>"};var P=l.defineRule=function(e,t){r.define(e,t)};return l.defineRules=function(e){Object.getOwnPropertyNames(e).forEach(function(t){P(t,e[t])})},l.defaults=function(){return{}},l.getDeclaredVariables=function(e){return y&&y.getDeclaredVariables(e)||[]},l}(),l.exports}),define("javascript/ternPlugins/eslint",["tern/lib/tern","javascript/finder","eslint/lib/eslint","eslint/lib/utils/source-code","i18n!javascript/nls/problems"],function(e,t,n,r,o){function s(e){var n=[],r=Object.create(null),o=e.errors;if(o)for(var s=o.length,a=0;s>a;a++){var i=o[a],l=i.message;if(r[i.index]!==l){r[i.index]=l;var c=i.start,p=l,u=l.lastIndexOf(" (");if(-1!==u&&(p=l.substr(0,u)),e.tokens.length>0){var d=t.findToken(i.index,e.tokens);if(d)switch(c===i.end&&d.range&&d.range[1]===c&&(i.start=d.range[0]),d.type){case"Keyword":if("export"===d.value||"import"===d.value){var h={severity:"error",start:d.start,end:d.end,message:p,ruleId:"forbiddenExportImport"};n.push(h),i=null}}}i&&(i.message=p,n.push(i))}}return n}function a(e,t){var n=e.length;if(1>n)return t;var r=[].concat(e),o=t.length;e:for(var s=0;o>s;s++){for(var a=t[s],i=0;n>i;i++){var l=e[i],c=a.node;if(c&&c.range&&c.range[0]>=l.index&&c.range[0]<=l.end)continue e}r.push(a)}return r}function i(e,t){if("string"==typeof e&&"string"==typeof t){var n=e;return"/"!==n.charAt(n.length-1)&&(n+="/"),n+="/"===t.charAt(0)?t.slice(1):t}return null}function l(e,t){var n=e,r=t.name.slice(0,t.name.lastIndexOf("/")),o=/^\.\.\//.exec(n);if(o){for(;null!==o;)r=r.slice(0,r.lastIndexOf("/")),n=n.slice(3),o=/^\.\.\//.exec(n);return i(r,n)}if(o=/^\.\//.test(n)){for(;o;)n=n.slice(2),o=/^\.\//.test(n);return i(r,n)}return null}e.registerPlugin("eslint",function(){return{}});var c={init:function(e,t,n){this.server=e,this.plugins=e.options.plugins,this.optionalPlugins=e.options.optionalPlugins,this.optionalDefs=e.options.optionalDefs,this.file=t,this.config=n},hasFile:function(e,t){if(e&&this.server&&this.server.fileMap){if(this.server.fileMap[e])return!0;if(0===e.indexOf(".")&&t){var n=l(e,t);if(n)return n.lastIndexOf(".js")<0&&(n+=".js"),this.server.fileMap[n]}}return!1},findRefs:function(t,n){try{return e.findRefs(this.server,t,n)}catch(r){if(!r.name||"TernError"!==r.name)throw r}},findRefsToVariable:function(t,n,r,o){try{return e.findRefsToVariable(this.server,t,n,r,o)}catch(s){if(!s.name||"TernError"!==s.name)throw s}},findRefsToProperty:function(t,n,r){try{return e.findRefsToProperty(this.server,t,n,r)}catch(o){if(!o.name||"TernError"!==o.name)throw o}},ternError:function(t){return e.ternError(t)},findQueryExpr:function(t,n,r){try{return e.findQueryExpr(t,n,r)}catch(o){if(!o.name||"TernError"!==o.name)throw o}},findExprType:function(t,n,r){try{return e.findExprType(this.server,t,n,r)}catch(o){if(!o.name||"TernError"!==o.name)throw o}},getDef:function(e){for(var t=0,n=this.server.defs.length;n>t;t++){var r=this.server.defs[t];if(r&&(r["!name"]===e||r[e]))return r}},libKnown:function(e){if(this.server.mod&&this.server.mod.modules){if(this.server.mod.modules.knownModules&&this.server.mod.modules.knownModules[e])return!0;for(var t=Object.keys(this.server.mod.modules.modules),n=0,r=t.length;r>n;n++){var o=this.server.mod.modules.modules[t[n]];if(o&&o.modName===e)return!0}}if(this.server.mod&&this.server.mod.requireJS&&this.server.mod.requireJS.interfaces)for(t=Object.keys(this.server.mod.requireJS.interfaces),n=0,r=t.length;r>n;n++)if(o=this.server.mod.requireJS.interfaces[t[n]],o&&o.reqName===e)return!0;return this.config&&this.config.env&&this.config.env[e]?!0:!1},getEnvFromDep:function(e){for(var t=this.file.ast.dependencies,n=0,r=t.length;r>n;n++)if(t[n].value===e)return t[n].env},pluginRunning:function(e){return this.server.plugins[e]},isLoadEagerly:function(e){return this.server.options&&Array.isArray(this.server.options.loadEagerly)?this.server.options.loadEagerly.length>0&&this.server.options.loadEagerly.indexOf(e)>-1:!1}};e.defineQueryType("lint",{takesFile:!0,run:function(e,i,l){var p=i.config;if(p.tern=c,c.init(e,l,p),!p.parserOptions){var u=Object.create(null);u.ecmaVersion=e.options.ecmaVersion;var d=e.options.ecmaVersion?e.options.ecmaVersion:5,h=Object.create(null);6===d&&(h.arrowFunctions=!0,h.binaryLiterals=!0,h.blockBindings=!0,h.classes=!0,h.defaultParams=!0,h.destructuring=!0,h.forOf=!0,h.generators=!0,h.objectLiteralComputedProperties=!0,h.objectLiteralDuplicateProperties=!0,h.objectLiteralShorthandMethods=!0,h.objectLiteralShorthandProperties=!0,h.octalLiterals=!0,h.regexUFlag=!0,h.regexYFlag=!0,h.restParams=!0,h.spread=!0,h.superInFunctions=!0,h.templateStrings=!0,h.unicodeCodePointEscapes=!0),u.ecmaFeatures=h,u.sourceType=e.options.sourceType,p.parserOptions=u}var f=[],m=null;try{var g=n.verify(new r(l.text,l.ast),p,l.name);g.forEach(function(e){var n={args:e.args,severity:e.severity,column:e.column,line:e.line,message:e.message,nodeType:e.nodeType,ruleId:e.ruleId,source:e.source};if(e.node&&e.node.range&&(n.node={range:e.node.range}),e.related&&(n.related={range:e.related.range}),n.node&&"Program"===n.nodeType){n.line=void 0,n.column=void 0;var r=t.findProgramStartRange(l.ast);n.node.range=r}f.push(n)})}catch(b){m={severity:"error",column:1,line:0,args:{nls:"eslintValidationFailure",0:b.message&&0!==b.message.length?b.message:o.noErrorDetailed},start:0,end:1,ruleId:"forbiddenExportImport"}}var y=s(l.ast);return m&&y.push(m),a(y,f)}})}),define("javascript/ternPlugins/express",["tern/lib/tern","javascript/finder","i18n!javascript/nls/messages"],function(e,t,n){var r,o=[{name:"express require",nodes:{top:!0,member:!1,prop:!1},template:"var ${app} = require('express');",doc:n.expressrequire,url:"http://expressjs.com/en/4x/api.html"},{name:"express app",nodes:{top:!0,member:!1,prop:!1},template:"var express = require('express');\nvar ${app} = express();\n${cursor}\napp.listen(${timeout});\n",doc:n.expressInstance,url:"http://expressjs.com/en/4x/api.html#app"},{name:"express app get",nodes:{top:!0,member:!1,prop:!1},template:"var value = app.get(${id}, function(request, result){\n	${cursor}\n});\n",doc:n.expressGet,url:"http://expressjs.com/en/4x/api.html#app.get"},{name:"express app set",nodes:{top:!0,member:!1,prop:!1},template:"app.set(${id}, ${value});\n",doc:n.expressSet,url:"http://expressjs.com/en/4x/api.html#app.set"},{name:"express app use",nodes:{top:!0,member:!1,prop:!1},template:"app.use(${fnOrObject});\n",doc:n.expressUse,url:"http://expressjs.com/en/4x/api.html#app.use"},{name:"express app engine",nodes:{top:!0,member:!1,prop:!1},template:"app.engine(${fnOrObject});\n",doc:n.expressEngine,url:"http://expressjs.com/en/4x/api.html#app.engine"},{name:"express app param",nodes:{top:!0,member:!1,prop:!1},template:"app.param(${id}, ${value});\n",doc:n.expressParam,url:"http://expressjs.com/en/4x/api.html#app.param"},{name:"express app error use",nodes:{top:!0,member:!1,prop:!1},template:"app.use(function(error, request, result, next) {\n	result.send(${code}, ${message});\n});\n",doc:n.expressUseError,url:"http://expressjs.com/en/4x/api.html#app.use"}];e.registerPlugin("express",function(e){return e.addDefs(s),{defs:s,passes:{completion:function(e,t){r=t},variableCompletion:function(e,n,s,a){if(r.includeTemplates||void 0===r.includeTemplates){var i=t.findCompletionKind(e.ast,s);if(i&&i.kind){var l=t.findTemplatesForKind(o,i.kind,r.ecma?r.ecma:6);l.forEach(function(e){a(e.name,null,0,function(t){t.template=e.template,t.description=e.description,t.doc=e.doc,t.url=e.url,t.type="template",t.ecma=e.ecma,t.origin="express",t.overwrite=!0})})}}}}}});var s={"!name":"express","!define":{"!known_modules":{express:{"static":{"!type":"fn(name: string)","!doc":"Built-in middleware function.  Pass the name of the directory that contains the static assets."},"!type":"fn() -> app","!url":"http://expressjs.com","!doc":"Express is a minimal and flexible Node.js web application framework that provides a robust set of features for web and mobile applications."}},"express.static.!0":"string","View.prototype.lookup.!0":"string","View.prototype.resolve.!0":"string","View.prototype.resolve.!1":"string","View.!0":"string","slice.!0":"number","slice.!1":"number","app.use.!0":"string","app.engine.!0":"string","app.set.!0":"string","app.path.!ret":"string","app.enabled.!0":"string","app.enabled.!ret":"bool","app.disabled.!0":"string","app.disabled.!ret":"bool","app.enable.!0":"string","app.disable.!0":"string","app.all.!0":"string","app.render.!0":"string","app.etag.!1":"string","app.etag.!ret":"string","app.wetag.!1":"string","app.wetag.!ret":"string","app.isAbsolute.!0":"string","app.isAbsolute.!ret":"bool","app.normalizeType.!0":"string","app.normalizeType.!ret":{value:"string",quality:"number",params:{"<i>":"string"}},"app.normalizeTypes.!0":"[?]","app.normalizeTypes.!ret":"[acceptParams.!ret]","app.setCharset.!0":"string","app.setCharset.!1":"string","app.setCharset.!ret":"string","app.application.param.!0":"string","app.application.handle.!0":"string","app.application.handle.!2":"string","app.application.use.!0":"string","app.application.route.!0":"string","app.request.range.!0":"number","app.request.param.!0":"string","app.request.param.!ret":"string","app.request.response.status.!0":"number","app.request.response.sendStatus.!0":"number","app.request.response.sendFile.!0":"string","app.request.response.attachment.!0":"string","app.request.response.append.!0":"string","app.request.response.get.!0":"string","app.request.response.get.!ret":"string","app.request.response.clearCookie.!0":"string","app.request.response.cookie.!0":"string","app.request.response.location.!0":"string","app.request.Route.prototype._handles_method.!ret":"bool","app.request.Route.!0":"string","app.response.status.!0":"number","app.response.sendStatus.!0":"number","app.response.sendFile.!0":"string","app.response.attachment.!0":"string","app.response.append.!0":"string","app.response.get.!0":"string","app.response.get.!ret":"string","app.response.clearCookie.!0":"string","app.response.cookie.!0":"string","app.response.location.!0":"string","app.Route.prototype._handles_method.!ret":"bool","app.Route.!0":"string","tryRender.!1":{},"req.range.!0":"number","req.range.!ret":"[?]","req.param.!0":"string","req.param.!ret":"string","req.is.!0":"[?]","defineGetter.!1":"string","res.status.!0":"number","res.sendStatus.!0":"number","res.sendFile.!0":"string","res.attachment.!0":"string","res.append.!0":"string","res.get.!0":"string","res.get.!ret":"string","res.clearCookie.!0":"string","res.cookie.!0":"string","res.location.!0":"string","res.render.!1":{"!type":"fn(err: ?, str: ?)","!doc":"default callback to respond"},"sendfile.!3":"fn(err: +Error)","acceptParams.!0":"string","acceptParams.!ret":{value:"string",quality:"number",params:{"<i>":"string"}},"tryStat.!0":"string","proto.param.!0":"string","proto.handle.!0":"string","proto.handle.!2":"string","proto.use.!0":"string","proto.route.!0":"string","proto.!ret":{_params:"[?]",stack:"[?]","!type":"fn(req: ?, res: ?, next: ?)"},"Route.prototype._handles_method.!ret":"bool","Route.prototype.all.!ret":"+Route","Route.!0":"string","Layer.prototype.match.!0":"string","Layer.prototype.match.!ret":"bool","Layer.!0":"string","appendMethods.!0":{"!type":"[?]","!doc":"store options for OPTIONS request\nonly used if OPTIONS request"},"gettype.!ret":"string","matchLayer.!1":"string","restore.!ret":"fn(err: ?)","wrap.!1":"fn(old: ?, err: ?)","wrap.!ret":"fn()","decode_param.!0":"string","decode_param.!ret":"string","Route.stack.<i>":"+Layer","app.application.!ret":{_params:"proto.!ret._params",stack:"proto.!ret.stack"}},View:{prototype:{lookup:{"!type":"fn(name: string)","!doc":"Lookup view by the given `name`\n\n@param {string} name\n@private"},render:{"!type":"fn(options: ?, callback: ?)","!doc":"Render with the given options.\n\n@param {object} options\n@param {function} callback\n@private"},resolve:{"!type":"fn(dir: string, file: string)","!doc":"Resolve the file within the given directory.\n\n@param {string} dir\n@param {string} file\n@private"}},"!type":"fn(name: string, options: ?)","!doc":"Initialize a new `View` with the given `name`.\n\nOptions:\n\n  - `defaultEngine` the default template engine name\n  - `engines` template engine require() cache\n  - `root` root path for view lookup\n\n@param {string} name\n@param {object} options\n@public"},slice:{"!type":"fn(from: number, to?: number) -> !this","!doc":"Module variables.\n@private"},app:{"delete":{"!type":"fn()"},get:{"!type":"fn()"},METHOD:{"!type":"fn()"},post:{"!type":"fn()"},put:{"!type":"fn()"},init:{"!type":"fn(app: +Function) -> fn(req: ?, res: ?, next: ?)|+Function","!doc":"Initialize the server.\n\n  - setup default configuration\n  - setup default middleware\n  - setup route reflection methods\n\n@private"},defaultConfiguration:{"!type":"fn()","!doc":"Initialize application configuration.\n@private"},lazyrouter:{"!type":"fn()","!doc":"lazily adds the base router if it has not yet been added.\n\nWe cannot add the base router in the defaultConfiguration because\nit reads app settings which might be set after that has run.\n\n@private"},handle:{"!type":"fn(req: ?, res: ?, callback: ?)","!doc":"Dispatch a req, res pair into the application. Starts pipeline processing.\n\nIf no callback is provided, then default error handlers will respond\nin the event of an error bubbling through the stack.\n\n@private"},use:{"!type":"fn(fn: ?) -> !this","!doc":"Proxy `Router#use()` to add middleware to the app router.\nSee Router#use() documentation for details.\n\nIf the _fn_ parameter is an express app, then it will be\nmounted at the _route_ specified.\n\n@public"},route:{"!type":"fn(path: ?)","!doc":"Proxy to the app `Router#route()`\nReturns a new `Route` instance for the _path_.\n\nRoutes are isolated middleware stacks for specific paths.\nSee the Route api docs for details.\n\n@public"},engine:{"!type":"fn(ext: string, fn: +Function) -> !this","!doc":"Register the given template engine callback `fn`\nas `ext`.\n\nBy default will `require()` the engine based on the\nfile extension. For example if you try to render\na \"foo.jade\" file Express will invoke the following internally:\n\n    app.engine('jade', require('jade').__express);\n\nFor engines that do not provide `.__express` out of the box,\nor if you wish to \"map\" a different extension to the template engine\nyou may use this method. For example mapping the EJS template engine to\n\".html\" files:\n\n    app.engine('html', require('ejs').renderFile);\n\nIn this case EJS provides a `.renderFile()` method with\nthe same signature that Express expects: `(path, options, callback)`,\nthough note that it aliases this method as `ejs.__express` internally\nso if you're using \".ejs\" extensions you dont need to do anything.\n\nSome template engines do not follow this convention, the\n[Consolidate.js](https://github.com/tj/consolidate.js)\nlibrary was created to map all of node's popular template\nengines to follow this convention, thus allowing them to\nwork seamlessly within Express.\n\n@param {String} ext\n@param {Function} fn\n@return {app} for chaining\n@public"},param:{"!type":"fn(name: string|[?], fn: +Function) -> !this","!doc":"Proxy to `Router#param()` with one added api feature. The _name_ parameter\ncan be an array of names.\n\nSee the Router#param() docs for more details.\n\n@param {String|Array} name\n@param {Function} fn\n@return {app} for chaining\n@public"},set:{"!type":"fn(setting: string, val: ?) -> !this.settings.<i>","!doc":"Assign `setting` to `val`, or return `setting`'s value.\n\n   app.set('foo', 'bar');\n   app.get('foo');\n   // => \"bar\"\n\nMounted servers inherit their parent server's settings.\n\n@param {String} setting\n@param {*} [val]\n@return {Server} for chaining\n@public"},path:{"!type":"fn() -> string","!doc":'Return the app\'s absolute pathname\nbased on the parent(s) that have\nmounted it.\n\nFor example if the application was\nmounted as "/admin", which itself\nwas mounted as "/blog" then the\nreturn value would be "/blog/admin".\n\n@return {String}\n@private'},enabled:{"!type":"fn(setting: string) -> bool","!doc":"Check if `setting` is enabled (truthy).\n\n   app.enabled('foo')\n   // => false\n\n   app.enable('foo')\n   app.enabled('foo')\n   // => true\n\n@param {String} setting\n@return {Boolean}\n@public"},disabled:{"!type":"fn(setting: string) -> bool","!doc":"Check if `setting` is disabled.\n\n   app.disabled('foo')\n   // => true\n\n   app.enable('foo')\n   app.disabled('foo')\n   // => false\n\n@param {String} setting\n@return {Boolean}\n@public"},enable:{"!type":"fn(setting: string) -> app","!doc":"Enable `setting`.\n\n@param {String} setting\n@return {app} for chaining\n@public"},disable:{"!type":"fn(setting: string) -> app","!doc":"Disable `setting`.\n\n@param {String} setting\n@return {app} for chaining\n@public"},"<i>":"fn(path: ?) -> !this",all:{"!type":"fn(path: string) -> !this","!doc":'Special-cased "all" method, applying the given route `path`,\nmiddleware, and callback to _every_ HTTP method.\n\n@param {String} path\n@param {Function} ...\n@return {app} for chaining\n@public'},render:{"!type":"fn(name: string, options: ?, callback: +Function) -> !1.!ret","!doc":"Render the given view `name` name with `options`\nand a callback accepting an error and the\nrendered template string.\n\nExample:\n\n   app.render('email', { name: 'Tobi' }, function(err, html){\n     // ...\n   })\n\n@param {String} name\n@param {Object|Function} options or fn\n@param {Function} callback\n@public"},listen:{"!type":"fn() -> ?","!doc":"Listen for connections.\n\nA node `http.Server` is returned, with this\napplication (which is a `Function`) as its\ncallback. If you wish to create both an HTTP\nand HTTPS server you may do so with the \"http\"\nand \"https\" modules as shown here:\n\n   var http = require('http')\n     , https = require('https')\n     , express = require('express')\n     , app = express();\n\n   http.createServer(app).listen(80);\n   https.createServer({ ... }, app).listen(443);\n\n@return {http.Server}\n@public"},etag:{"!type":"fn(body: string|?, encoding?: string) -> string","!doc":"Return strong ETag for `body`.\n\n@param {String|Buffer} body\n@param {String} [encoding]\n@return {String}\n@api private"},wetag:{"!type":"fn(body: string|?, encoding?: string) -> string","!doc":"Return weak ETag for `body`.\n\n@param {String|Buffer} body\n@param {String} [encoding]\n@return {String}\n@api private"},isAbsolute:{"!type":"fn(path: string) -> bool","!doc":"Check if `path` looks absolute.\n\n@param {String} path\n@return {Boolean}\n@api private"},normalizeType:{"!type":"fn(type: string) -> acceptParams.!ret","!doc":'Normalize the given `type`, for example "html" becomes "text/html".\n\n@param {String} type\n@return {Object}\n@api private'},normalizeTypes:{"!type":"fn(types: [?]) -> [acceptParams.!ret]","!doc":'Normalize `types`, for example "html" becomes "text/html".\n\n@param {Array} types\n@return {Array}\n@api private'},compileETag:{"!type":"fn(val: ?) -> !0","!doc":'Compile "etag" value to function.\n\n@param  {Boolean|String|Function} val\n@return {Function}\n@api private'},compileQueryParser:{"!type":"fn(val: string|+Function) -> !0","!doc":'Compile "query parser" value to function.\n\n@param  {String|Function} val\n@return {Function}\n@api private'},compileTrust:{"!type":"fn(val: ?) -> !0","!doc":'Compile "proxy trust" value to function.\n\n@param  {Boolean|String|Number|Array|Function} val\n@return {Function}\n@api private'},setCharset:{"!type":"fn(type: string, charset: string) -> !0","!doc":"Set the charset in a given Content-Type string.\n\n@param {String} type\n@param {String} charset\n@return {String}\n@api private"},application:{param:{},handle:{},use:{},route:{},process_params:"proto.process_params","<i>":"proto.<i>"},request:{range:{},param:{},response:{status:{},sendStatus:{},sendFile:{},attachment:{},append:{},get:{},clearCookie:{},cookie:{},location:{},contentType:"res.type",set:"res.header",links:"res.links",send:"res.send",json:"res.json",jsonp:"res.jsonp",sendfile:"res.sendfile",download:"res.download",type:"res.type",format:"res.format",header:"res.header",redirect:"res.redirect",vary:"res.vary",render:"res.render"},Route:{prototype:{_handles_method:{},_options:"Route.prototype._options",dispatch:"Route.prototype.dispatch",all:"Route.prototype.all","<i>":"Route.prototype.<i>"}},init:"app.init",get:"req.header",etag:"app.etag",wetag:"app.wetag",isAbsolute:"app.isAbsolute",normalizeType:"app.normalizeType",normalizeTypes:"app.normalizeTypes",compileETag:"app.compileETag",compileQueryParser:"app.compileQueryParser",compileTrust:"app.compileTrust",setCharset:"app.setCharset",application:"proto",request:"req",header:"req.header",accepts:"req.accepts",acceptsEncodings:"req.acceptsEncodings",acceptsCharsets:"req.acceptsCharsets",acceptsLanguages:"req.acceptsLanguages",is:"req.is"},response:{status:{},sendStatus:{},sendFile:{},attachment:{},append:{},get:{},clearCookie:{},cookie:{},location:{},contentType:"res.type",set:"res.header",links:"res.links",send:"res.send",json:"res.json",jsonp:"res.jsonp",sendfile:"res.sendfile",download:"res.download",type:"res.type",format:"res.format",header:"res.header",redirect:"res.redirect",vary:"res.vary",render:"res.render"},Route:{prototype:{_handles_method:{},_options:"Route.prototype._options",dispatch:"Route.prototype.dispatch",all:"Route.prototype.all","<i>":"Route.prototype.<i>"}},"!doc":"Application prototype."},trustProxyDefaultSymbol:{"!type":"string","!doc":"Variable for trust proxy inheritance back-compat\n@private"},logerror:{"!type":"fn(err: +Error)","!doc":"Log error using console.error.\n\n@param {Error} err\n@private"},tryRender:{"!type":"fn(view: ?, options: tryRender.!1, callback: ?)","!doc":"Try rendering a view.\n@private"},req:{header:{"!type":"fn(name: ?) -> !this.headers.referrer","!doc":"Return request header.\n\nThe `Referrer` header field is special-cased,\nboth `Referrer` and `Referer` are interchangeable.\n\nExamples:\n\n    req.get('Content-Type');\n    // => \"text/plain\"\n\n    req.get('content-type');\n    // => \"text/plain\"\n\n    req.get('Something');\n    // => undefined\n\nAliased as `req.header()`.\n\n@param {String} name\n@return {String}\n@public"},accepts:"fn()",acceptsEncodings:{"!type":"fn() -> string|[?]","!doc":"Check if the given `encoding`s are accepted.\n\n@param {String} ...encoding\n@return {String|Array}\n@public"},acceptsCharsets:{"!type":"fn() -> string|[?]","!doc":'Check if the given `charset`s are acceptable,\notherwise you should respond with 406 "Not Acceptable".\n\n@param {String} ...charset\n@return {String|Array}\n@public'},acceptsLanguages:{"!type":"fn() -> string|[?]","!doc":'Check if the given `lang`s are acceptable,\notherwise you should respond with 406 "Not Acceptable".\n\n@param {String} ...lang\n@return {String|Array}\n@public'},range:{"!type":"fn(size: number) -> [?]","!doc":'Parse Range header field,\ncapping to the given `size`.\n\nUnspecified ranges such as "0-" require\nknowledge of your resource length. In\nthe case of a byte range this is of course\nthe total number of bytes. If the Range\nheader field is not given `null` is returned,\n`-1` when unsatisfiable, `-2` when syntactically invalid.\n\nNOTE: remember that ranges are inclusive, so\nfor example "Range: users=0-3" should respond\nwith 4 users when available, not 3.\n\n@param {Number} size\n@return {Array}\n@public'},param:{"!type":"fn(name: string, defaultValue?: ?) -> !this.params.<i>","!doc":'Return the value of param `name` when present or `defaultValue`.\n\n - Checks route placeholders, ex: _/user/:id_\n - Checks body params, ex: id=12, {"id":12}\n - Checks query string params, ex: ?id=12\n\nTo utilize request bodies, `req.body`\nshould be an object. This can be done by using\nthe `bodyParser()` middleware.\n\n@param {String} name\n@param {Mixed} [defaultValue]\n@return {String}\n@public'},is:"fn(types: ?)","!doc":"Request prototype.",init:"app.init",get:"req.header",etag:"app.etag",wetag:"app.wetag",isAbsolute:"app.isAbsolute",normalizeType:"app.normalizeType",normalizeTypes:"app.normalizeTypes",compileETag:"app.compileETag",compileQueryParser:"app.compileQueryParser",compileTrust:"app.compileTrust",setCharset:"app.setCharset",application:"proto",request:"req",response:"res",Route:"Route"},defineGetter:{"!type":"fn(obj: req, name: string, getter: ?)","!doc":"Helper function for creating a getter on an object.\n\n@param {Object} obj\n@param {String} name\n@param {Function} getter\n@private"},res:{status:{"!type":"fn(code: number) -> !this","!doc":"Set status `code`.\n\n@param {Number} code\n@return {ServerResponse}\n@public"},links:{"!type":"fn(links: ?) -> ?","!doc":"Set Link header field with the given `links`.\n\nExamples:\n\n   res.links({\n     next: 'http://api.example.com/users?page=2',\n     last: 'http://api.example.com/users?page=5'\n   });\n\n@param {Object} links\n@return {ServerResponse}\n@public"},send:{"!type":"fn(body: ?) -> !this","!doc":"Send a response.\n\nExamples:\n\n    res.send(new Buffer('wahoo'));\n    res.send({ some: 'json' });\n    res.send('<p>some html</p>');\n\n@param {string|number|boolean|object|Buffer} body\n@public"},json:{"!type":"fn(obj: ?)","!doc":"Send JSON response.\n\nExamples:\n\n    res.json(null);\n    res.json({ user: 'tj' });\n\n@param {string|number|boolean|object} obj\n@public"},jsonp:{"!type":"fn(obj: ?)","!doc":"Send JSON response with JSONP callback support.\n\nExamples:\n\n    res.jsonp(null);\n    res.jsonp({ user: 'tj' });\n\n@param {string|number|boolean|object} obj\n@public"},sendStatus:{"!type":"fn(statusCode: number)","!doc":"Send given HTTP status code.\n\nSets the response status to `statusCode` and the body of the\nresponse to the standard description from node's http.STATUS_CODES\nor the statusCode number if no description.\n\nExamples:\n\n    res.sendStatus(200);\n\n@param {number} statusCode\n@public"},sendFile:{"!type":"fn(path: ?, options: ?, callback: ?)","!doc":"Transfer the file at the given `path`.\n\nAutomatically sets the _Content-Type_ response header field.\nThe callback `callback(err)` is invoked when the transfer is complete\nor when an error occurs. Be sure to check `res.sentHeader`\nif you wish to attempt responding, as the header and some data\nmay have already been transferred.\n\nOptions:\n\n  - `maxAge`   defaulting to 0 (can be string converted by `ms`)\n  - `root`     root directory for relative filenames\n  - `headers`  object of headers to serve with file\n  - `dotfiles` serve dotfiles, defaulting to false; can be `\"allow\"` to send them\n\nOther options are passed along to `send`.\n\nExamples:\n\n The following example illustrates how `res.sendFile()` may\n be used as an alternative for the `static()` middleware for\n dynamic situations. The code backing `res.sendFile()` is actually\n the same code, so HTTP cache support etc is identical.\n\n    app.get('/user/:uid/photos/:file', function(req, res){\n      var uid = req.params.uid\n        , file = req.params.file;\n\n      req.user.mayViewFilesFrom(uid, function(yes){\n        if (yes) {\n          res.sendFile('/uploads/' + uid + '/' + file);\n        } else {\n          res.send(403, 'Sorry! you cant see that.');\n        }\n      });\n    });\n\n@public"},sendfile:{"!type":"fn(path: ?, options: ?, callback: ?)","!doc":"Transfer the file at the given `path`.\n\nAutomatically sets the _Content-Type_ response header field.\nThe callback `callback(err)` is invoked when the transfer is complete\nor when an error occurs. Be sure to check `res.sentHeader`\nif you wish to attempt responding, as the header and some data\nmay have already been transferred.\n\nOptions:\n\n  - `maxAge`   defaulting to 0 (can be string converted by `ms`)\n  - `root`     root directory for relative filenames\n  - `headers`  object of headers to serve with file\n  - `dotfiles` serve dotfiles, defaulting to false; can be `\"allow\"` to send them\n\nOther options are passed along to `send`.\n\nExamples:\n\n The following example illustrates how `res.sendfile()` may\n be used as an alternative for the `static()` middleware for\n dynamic situations. The code backing `res.sendfile()` is actually\n the same code, so HTTP cache support etc is identical.\n\n    app.get('/user/:uid/photos/:file', function(req, res){\n      var uid = req.params.uid\n        , file = req.params.file;\n\n      req.user.mayViewFilesFrom(uid, function(yes){\n        if (yes) {\n          res.sendfile('/uploads/' + uid + '/' + file);\n        } else {\n          res.send(403, 'Sorry! you cant see that.');\n        }\n      });\n    });\n\n@public"},download:{"!type":"fn(path: ?, filename: ?, callback: ?)","!doc":"Transfer the file at the given `path` as an attachment.\n\nOptionally providing an alternate attachment `filename`,\nand optional callback `callback(err)`. The callback is invoked\nwhen the data transfer is complete, or when an error has\nocurred. Be sure to check `res.headersSent` if you plan to respond.\n\nThis method uses `res.sendfile()`.\n\n@public"},type:{"!type":"fn(type: ?)","!doc":"Set _Content-Type_ response header with `type` through `mime.lookup()`\nwhen it does not contain \"/\", or set the Content-Type to `type` otherwise.\n\nExamples:\n\n    res.type('.html');\n    res.type('html');\n    res.type('json');\n    res.type('application/json');\n    res.type('png');\n\n@param {String} type\n@return {ServerResponse} for chaining\n@public"},format:{"!type":"fn(obj: ?) -> !this","!doc":"Respond to the Acceptable formats using an `obj`\nof mime-type callbacks.\n\nThis method uses `req.accepted`, an array of\nacceptable types ordered by their quality values.\nWhen \"Accept\" is not present the _first_ callback\nis invoked, otherwise the first match is used. When\nno match is performed the server responds with\n406 \"Not Acceptable\".\n\nContent-Type is set for you, however if you choose\nyou may alter this within the callback using `res.type()`\nor `res.set('Content-Type', ...)`.\n\n   res.format({\n     'text/plain': function(){\n       res.send('hey');\n     },\n\n     'text/html': function(){\n       res.send('<p>hey</p>');\n     },\n\n     'appliation/json': function(){\n       res.send({ message: 'hey' });\n     }\n   });\n\nIn addition to canonicalized MIME types you may\nalso use extnames mapped to these types:\n\n   res.format({\n     text: function(){\n       res.send('hey');\n     },\n\n     html: function(){\n       res.send('<p>hey</p>');\n     },\n\n     json: function(){\n       res.send({ message: 'hey' });\n     }\n   });\n\nBy default Express passes an `Error`\nwith a `.status` of 406 to `next(err)`\nif a match is not made. If you provide\na `.default` callback it will be invoked\ninstead.\n\n@param {Object} obj\n@return {ServerResponse} for chaining\n@public"},attachment:{"!type":"fn(filename: string) -> !this","!doc":"Set _Content-Disposition_ header to _attachment_ with optional `filename`.\n\n@param {String} filename\n@return {ServerResponse}\n@public"},append:{"!type":"fn(field: string, val: string|[?]) -> ?","!doc":"Append additional header `field` with value `val`.\n\nExample:\n\n   res.append('Link', ['<http://localhost/>', '<http://localhost:3000/>']);\n   res.append('Set-Cookie', 'foo=bar; Path=/; HttpOnly');\n   res.append('Warning', '199 Miscellaneous warning');\n\n@param {String} field\n@param {String|Array} val\n@return {ServerResponse} for chaining\n@public"},header:{"!type":"fn(field: ?, val: ?) -> !this","!doc":"Set header `field` to `val`, or pass\nan object of header fields.\n\nExamples:\n\n   res.set('Foo', ['bar', 'baz']);\n   res.set('Accept', 'application/json');\n   res.set({ Accept: 'text/plain', 'X-API-Key': 'tobi' });\n\nAliased as `res.header()`.\n\n@param {String|Object} field\n@param {String|Array} val\n@return {ServerResponse} for chaining\n@public"},get:{"!type":"fn(field: string) -> string","!doc":"Get value for header `field`.\n\n@param {String} field\n@return {String}\n@public"},clearCookie:{"!type":"fn(name: string, options: ?) -> ?","!doc":"Clear cookie `name`.\n\n@param {String} name\n@param {Object} options\n@return {ServerResponse} for chaining\n@public"},cookie:{"!type":"fn(name: string, value: string|?, options: ?) -> !this","!doc":"Set cookie `name` to `value`, with the given `options`.\n\nOptions:\n\n   - `maxAge`   max-age in milliseconds, converted to `expires`\n   - `signed`   sign the cookie\n   - `path`     defaults to \"/\"\n\nExamples:\n\n   // \"Remember Me\" for 15 minutes\n   res.cookie('rememberme', '1', { expires: new Date(Date.now() + 900000), httpOnly: true });\n\n   // save as above\n   res.cookie('rememberme', '1', { maxAge: 900000, httpOnly: true })\n\n@param {String} name\n@param {String|Object} value\n@param {Options} options\n@return {ServerResponse} for chaining\n@public"},location:{"!type":"fn(url: string) -> !this","!doc":"Set the location header to `url`.\n\nThe given `url` can also be \"back\", which redirects\nto the _Referrer_ or _Referer_ headers or \"/\".\n\nExamples:\n\n   res.location('/foo/bar').;\n   res.location('http://example.com');\n   res.location('../login');\n\n@param {String} url\n@return {ServerResponse} for chaining\n@public"},redirect:{"!type":"fn(url: ?)","!doc":"Redirect to the given `url` with optional response `status`\ndefaulting to 302.\n\nThe resulting `url` is determined by `res.location()`, so\nit will play nicely with mounted apps, relative paths,\n`\"back\"` etc.\n\nExamples:\n\n   res.redirect('/foo/bar');\n   res.redirect('http://example.com');\n   res.redirect(301, 'http://example.com');\n   res.redirect('../login'); // /blog/post/1 -> /blog/login\n\n@public"},vary:{"!type":"fn(field: [?]|string) -> !this","!doc":"Add `field` to Vary. If already present in the Vary set, then\nthis call is simply ignored.\n\n@param {Array|String} field\n@return {ServerResponse} for chaining\n@public"},render:{"!type":"fn(view: ?, options: ?, callback: ?)","!doc":"Render `view` with the given `options` and optional callback `fn`.\nWhen a callback function is given a response will _not_ be made\nautomatically, otherwise a response of _200_ and _text/html_ is given.\n\nOptions:\n\n - `cache`     boolean hinting to the engine it should cache\n - `filename`  filename of the view being rendered\n\n@public"},"!doc":"Response prototype.",contentType:"res.type",set:"res.header"},charsetRegExp:{"!type":"+RegExp","!doc":"Module variables.\n@private"},sendfile:{"!type":"fn(res: ?, file: ?, options: ?, callback: fn(err: +Error))","!doc":"pipe the send file stream"},acceptParams:{"!type":"fn(str: string, index: ?) -> acceptParams.!ret","!doc":"Parse accept params `str` returning an\nobject with `.value`, `.quality` and `.params`.\nalso includes `.originalIndex` for stable sorting\n\n@param {String} str\n@return {Object}\n@api private"},parseExtendedQueryString:{"!type":"fn(str: ?) -> ?","!doc":"Parse an extended query string with qs.\n\n@return {Object}\n@private"},newObject:{"!type":"fn() -> ?","!doc":"Return new empty object.\n\n@return {Object}\n@api private"},tryStat:{"!type":"fn(path: string) -> ?","!doc":"Return a stat, maybe.\n\n@param {string} path\n@return {fs.Stats}\n@private"},proto:{param:{"!type":"fn(name: string, fn: +Function) -> !this","!doc":"Map the given param placeholder `name`(s) to the given callback.\n\nParameter mapping is used to provide pre-conditions to routes\nwhich use normalized placeholders. For example a _:user_id_ parameter\ncould automatically load a user's information from the database without\nany additional code,\n\nThe callback uses the same signature as middleware, the only difference\nbeing that the value of the placeholder is passed, in this case the _id_\nof the user. Once the `next()` function is invoked, just like middleware\nit will continue on to execute the route, or subsequent parameter functions.\n\nJust like in middleware, you must either respond to the request or call next\nto avoid stalling the request.\n\n app.param('user_id', function(req, res, next, id){\n   User.find(id, function(err, user){\n     if (err) {\n       return next(err);\n     } else if (!user) {\n       return next(new Error('failed to load user'));\n     }\n     req.user = user;\n     next();\n   });\n });\n\n@param {String} name\n@param {Function} fn\n@return {app} for chaining\n@public"},handle:{"!type":"fn(req: ?, res: ?, out: ?)","!doc":"Dispatch a req, res into the router.\n@private"},process_params:{"!type":"fn(layer: ?, called: ?, req: ?, res: ?, done: ?)","!doc":"Process any parameters for the layer.\n@private"},use:{"!type":"fn(fn: ?) -> !this","!doc":'Use the given middleware function, with optional path, defaulting to "/".\n\nUse (like `.all`) will run for any http METHOD, but it will not add\nhandlers for those methods so OPTIONS requests will not consider `.use`\nfunctions even if they could respond.\n\nThe other difference is that _route_ path is stripped and not visible\nto the handler function. The main effect of this feature is that mounted\nhandlers can operate without any code changes regardless of the "prefix"\npathname.\n\n@public'},route:{"!type":"fn(path: string) -> proto.route","!doc":"Create a new Route for the given path.\n\nEach route contains a separate middleware stack and VERB handlers.\n\nSee the Route api documentation for details on adding handlers\nand middleware to routes.\n\n@param {String} path\n@return {Route}\n@public"},"<i>":"fn(path: ?) -> !this","!type":"fn(options: ?) -> fn(req: ?, res: ?, next: ?)","!doc":"Initialize a new `Router` with the given `options`.\n\n@param {Object} options\n@return {Router} which is an callable function\n@public"},Route:{prototype:{_handles_method:{"!type":"fn(method: ?) -> bool","!doc":"Determine if the route handles a given method.\n@private"},_options:{"!type":"fn() -> [string]","!doc":"@return {Array} supported HTTP methods\n@private"},dispatch:{"!type":"fn(req: ?, res: ?, done: ?)","!doc":"dispatch req, res into this route\n@private"},all:{"!type":"fn() -> !this","!doc":"Add a handler for all HTTP verbs to this route.\n\nBehaves just like middleware and can respond or call `next`\nto continue processing.\n\nYou can use multiple `.all` call to add multiple handlers.\n\n  function check_something(req, res, next){\n    next();\n  };\n\n  function validate_user(req, res, next){\n    next();\n  };\n\n  route\n  .all(validate_user)\n  .all(check_something)\n  .get(function(req, res, next){\n    res.send('hello world');\n  });\n\n@param {function} handler\n@return {Route} for chaining\n@api public"},"<i>":"fn() -> !this"},"!type":"fn(path: string)","!doc":"Initialize `Route` with the given `path`,\n\n@param {String} path\n@public",path:"string",stack:"[+Layer]",methods:{_all:"bool","<i>":"bool","!doc":"route handlers for various http methods"}},createApplication:{"!type":"fn() -> fn(req: ?, res: ?, next: ?)|+Function","!doc":"Create an express application.\n\n@return {Function}\n@api public"},Layer:{prototype:{handle_error:{"!type":"fn(error: +Error, req: ?, res: ?, next: ?)","!doc":"Handle the error for the layer.\n\n@param {Error} error\n@param {Request} req\n@param {Response} res\n@param {function} next\n@api private"},handle_request:{"!type":"fn(req: ?, res: ?, next: ?)","!doc":"Handle the request for the layer.\n\n@param {Request} req\n@param {Response} res\n@param {function} next\n@api private"},match:{"!type":"fn(path: string) -> bool","!doc":"Check if this route matches `path`, if so\npopulate `.params`.\n\n@param {String} path\n@return {Boolean}\n@api private"}},"!type":"fn(path: string, options: ?, fn: ?) -> +Layer",name:"string",params:{"!doc":"store values"},path:"string",keys:"[?]"},appendMethods:{"!type":"fn(list: [?], addition: ?)","!doc":"append methods to a list of methods"},getPathname:{"!type":"fn(req: ?)","!doc":"get pathname of request"},gettype:{"!type":"fn(obj: ?) -> string","!doc":"get type for error message"},matchLayer:{"!type":"fn(layer: ?, path: string) -> +Error","!doc":"Match path to a layer.\n\n@param {Layer} layer\n@param {string} path\n@private"},mergeParams:{"!type":"fn(params: ?, parent: ?) -> !0","!doc":"merge params with parent params"},restore:{"!type":"fn(fn: ?, obj: ?) -> fn(err: ?)","!doc":"restore obj props after function"},sendOptionsResponse:{"!type":"fn(res: ?, options: [?], next: ?)","!doc":"send an OPTIONS response"},wrap:{"!type":"fn(old: fn(err: ?)|fn(), fn: fn(old: ?, err: ?)) -> fn()","!doc":"wrap a function"},decode_param:{"!type":"fn(val: string) -> !0","!doc":"Decode param value.\n\n@param {string} val\n@return {string}\n@private"},Error:{statusCode:{"!type":"number","!doc":"Respond"},status:"number",code:"string",message:"string"},objectRegExp:"+RegExp"}
}),define("javascript/ternPlugins/resolver",["tern/lib/tern","tern/lib/infer"],function(e,t){function n(e){var t=r(e);return t&&t.file?t.contents?{file:t.file,contents:t.contents}:t.file:null}function r(e){return p[e]}function o(e,t){for(var n=Object.keys(p),r=0;r<n.length;r++){var o=n[r],a=p[o];a&&(a.pending||a.file)||s(e,o,t)}}function s(e,t,n){if(!p[t].pending&&!p[t].err){var r=function(t){clearTimeout(p[t].timeout),p[t].file=null,p[t].contents="",p[t].err="Read operation timed out.",delete p[t].pending,e.finishAsyncAction(p[t].err)};e.startAsyncAction(),p[t].pending=!0,p[t].timeout=setTimeout(r,1e4,t),e.options.getFile({logical:t,file:n,env:p[t].env},function(n,r){clearTimeout(p[t].timeout),p[t].file=r.file,p[t].contents="string"==typeof r.contents?r.contents:"",p[t].logical=r.logical,p[t].err=n,delete p[t].pending,e.finishAsyncAction(n)})}}function a(e){var t=function(){clearTimeout(n),i(e)},n=setTimeout(t,e.options.fetchTimeout)}function i(e){if(e.pending)return a(e);for(var t=!0,n=Object.keys(p),r=0;r<n.length;r++)if(!p[n[r]]){t=!1;break}return t?void 0:a(e)}function l(e,t,n,r){if(Array.isArray(t.dependencies)&&t.dependencies.length>0){for(var s=0;s<t.dependencies.length;s++){var a=c(t.dependencies[s]);if(a){if("object"==typeof p[a])continue;if("object"==typeof n){if(n[a])continue;if("object"==typeof n.node&&n.node[a])continue;if("object"==typeof n.requirejs&&n.requirejs[a])continue}if("function"==typeof r&&!r(a))continue;p[a]=Object.create(null),p[a].env=t.dependencies[s].env}}o(e,t.sourceFile?t.sourceFile.name:null)}}function c(e){return"string"==typeof e?e:e&&"object"==typeof e?e.value:null}var p=Object.create(null);return e.registerPlugin("resolver",function(e){e.loadPlugin("modules"),e.mod.modules.resolvers.push(n),e.on("postParse",function(n){l(e,n,t.cx().definitions,null)}),e.on("preInfer",function(){i(e)})}),{doPostParse:l,doPreInfer:i,getResolved:r}}),function(e,t){"function"==typeof define&&define.amd?define("orion/Deferred",t):"object"==typeof exports?module.exports=t():(e.orion=e.orion||{},e.orion.Deferred=t())}(this,function(){function e(){for(var e;e=s.shift();)e();a=!1}function t(e){s.push(e),a||(a=!0,i())}function n(e){return function(t){e(t)}}function r(e,t,r){try{var o=e(t),s=o&&("object"==typeof o||"function"==typeof o)&&o.then;if("function"==typeof s)if(o===r.promise)r.reject(new TypeError);else{var a=o.cancel;"function"==typeof a?r._parentCancel=a.bind(o):delete r._parentCancel,s.call(o,n(r.resolve),n(r.reject),n(r.progress))}else r.resolve(o)}catch(i){r.reject(i)}}function o(){function e(){for(var e;e=c.shift();){var t=e.deferred,n="fulfilled"===l?"resolve":"reject",o=e[n];"function"==typeof o?r(o,i,t):t[n](i)}}function n(n){delete p._parentCancel,l="rejected",i=n,c.length&&t(e)}function s(r){function a(e){return function(t){l&&"assumed"!==l||e(t)}}delete p._parentCancel;try{var u=r&&("object"==typeof r||"function"==typeof r)&&r.then;if("function"==typeof u)if(r===p)n(new TypeError);else{l="assumed";var d=r&&r.cancel;if("function"!=typeof d){var h=new o;r=h.promise;try{u(h.resolve,h.reject,h.progress)}catch(f){h.reject(f)}d=r.cancel,u=r.then}i=r,u.call(r,a(s),a(n)),p._parentCancel=d.bind(r)}else l="fulfilled",i=r,c.length&&t(e)}catch(m){a(n)(m)}}function a(){var e=p._parentCancel;if(e)delete p._parentCancel,e();else if(!l){var t=new Error("Cancel");t.name="Cancel",n(t)}}var i,l,c=[],p=this;this.resolve=function(e){return l||s(e),p},this.reject=function(e){return l||n(e),p},this.progress=function(e){return l||c.forEach(function(t){if(t.progress)try{t.progress(e)}catch(n){}}),p.promise},this.cancel=function(){return p._parentCancel?setTimeout(a,0):a(),p},this.then=function(n,r,s){var a=new o;return a._parentCancel=p.promise.cancel,c.push({resolve:n,reject:r,progress:s,deferred:a}),("fulfilled"===l||"rejected"===l)&&t(e),a.promise},this.promise={then:p.then,cancel:p.cancel}}var s=[],a=!1,i=function(){if("undefined"!=typeof process&&"function"==typeof process.nextTick){var t=process.nextTick;return function(){t(e)}}if("function"==typeof MutationObserver){var n=document.createElement("div"),r=new MutationObserver(e);return r.observe(n,{attributes:!0}),function(){n.setAttribute("class","_tick")}}return function(){setTimeout(e,0)}}();return o.all=function(e,t){function n(e,t){i||(a[e]=t,0===--s&&l.resolve(a))}function r(e,r){if(!i){if(t)try{return void n(e,t(r))}catch(o){r=o}l.reject(r)}}var s=e.length,a=[],i=!1,l=new o;return l.then(void 0,function(){i=!0,e.forEach(function(e){e.cancel&&e.cancel()})}),0===s?l.resolve(a):e.forEach(function(e,t){e.then(n.bind(void 0,t),r.bind(void 0,t))}),l.promise},o.when=function(e,t,n,r){var s,a;return e&&"function"==typeof e.then?s=e:(a=new o,a.resolve(e),s=a.promise),s.then(t,n,r)},o}),define("javascript/compilationUnit",["orion/Deferred"],function(e){function t(e,t,n){this._blocks=e,this._metadata=t,t&&(this._metadata.contentType={id:"application/javascript"}),this._ec=n,this._deps=[]}return t.prototype._init=function(){var e="",t=0;this._source="",this._blocks.sort(function(e,t){var n=e.offset?e.offset:0,r=t.offset?t.offset:0;return n-r});for(var n=0;n<this._blocks.length;n++){var r=this._blocks[n];r.dependencies&&this._deps.push(r.dependencies);var o=r.offset-t;if(r.isWrappedFunctionCall){if(o<e.length)continue;for(o-=e.length;o>0;)this._source+=" ",o--;this._source+=e,this._source+=r.text,r.text&&";"!==r.text.charAt(r.text.length-1)&&(this._source+=";")}else{for(;o>0;)this._source+=" ",o--;this._source+=r.text}t=this._source.length}},t.prototype.getSource=function(){return this._source||this._init(),this._source},t.prototype.validOffset=function(e){if(!this._blocks||this._blocks.length<1||0>e)return!1;for(var t=0;t<this._blocks.length;t++){var n=this._blocks[t],r=n.offset;if(e>=r&&e<=r+n.text.length)return!0}return!1},t.prototype.getEditorContext=function(){var t=Object.create(null),n=this;return t.getText=function(){return(new e).resolve(n.getSource())},t.getFileMetadata=function(){return(new e).resolve(n._metadata)},t.setText=function(t,r,o){return n._ec?n._ec.setText(t,r,o):(new e).resolve(null)},n._ec&&(t.getSelections=n._ec.getSelections,t.setSelection=n._ec.setSelection,t.syntaxCheck=n._ec.syntaxCheck,t.setCaretOffset=n._ec.setCaretOffset),t},t.prototype.getDependencies=function(){return this._deps},t}),define("javascript/ternPlugins/html",["tern/lib/infer","tern/lib/tern","./resolver","javascript/compilationUnit","javascript/finder"],function(e,t,n,r,o){t.registerPlugin("html",function(t){function s(e){return/(?:html|htm|xhtml)$/g.test(e)}return t._htmlDeps=Object.create(null),t._htmlDeps.map=Object.create(null),t.on("beforeLoad",function(e){this._htmlDeps.file=e.name}),t.on("reset",function(){t._htmlDeps=Object.create(null),t._htmlDeps.map=Object.create(null)}),{passes:{postParse:function(r){if(s(r.sourceFile.name)){var o=t._htmlDeps.map[t._htmlDeps.file];Array.isArray(o)&&(r.dependencies=o.slice(0)),n.doPostParse(t,r,e.cx().definitions)}},preInfer:function(e){if(s(e.sourceFile.name)&&(n.doPreInfer(t),Array.isArray(e.dependencies)))for(var r=0;r<e.dependencies.length;r++){var o=e.dependencies[r],a=n.getResolved(o);a&&a.file&&t.addFile(a.file,a.contents,t._htmlDeps.file)}},preParse:function(e,n){var a=n.directSourceFile.name;if(s(a)){var i=o.findScriptBlocks(e);if(Array.isArray(i)){var l=new r(i,{location:a}),c=l.getSource();return t._htmlDeps.file=a,t._htmlDeps.map[a]=l.getDependencies(),c}}}}}})}),define("javascript/signatures",[],function(){var e={FUNCTION_IMAGE:"iconFunction",CLASS_IMAGE:"iconClass",OBJECT_IMAGE:"iconObject",computeSignature:function(e,t){if(e){if(e.sig)return e.sig;var n=this.getNameFrom(e,t);return{sig:n.name,details:n.details,range:this.getSignatureSourceRangeFrom(e)}}return null},getParamsFrom:function(e){if(e){var t=e.params;if(t&&t.length>0){for(var n=t.length,r="",o=0;n>o;o++)r+=t[o].name?t[o].name:"Object",n-1>o&&(r+=", ");return r}}},getPropertyListFrom:function(e,t){if(t||(t=50),0>t&&(t=0),e){var n=e.properties;if(n&&n.length>0){for(var r,o=n.length,s="{",a=0;o>a;a++){if(r=n[a].key&&n[a].key.name?n[a].key.name:"Object",s.length+r.length>t+1){s+="...";break}s+=r,o-1>a&&(s+=", ")}return s+="}"}}return"{...}"},getNameFrom:function(e,t){var n,r="Anonymous "+e.type;if(e)switch(e.type){case"ClassDeclaration":r="class ",r+=e.id&&e.id.start!==e.id.end?e.id.name:"<anonymous>";break;case"ClassExpression":r="class ",r+=e.id&&e.id.start!==e.id.end?e.id.name:"<anonymous>";break;case"FunctionDeclaration":if(e.id&&e.id.name){r=e.id.name+"(";var o=this.getParamsFrom(e);o&&(r+=o),r+=")"}break;case"MethodDefinition":if(e.key&&e.key.name){r=e.key.name+"(";var s=this.getParamsFrom(e.value);s&&(r+=s),r+=")"}break;case"ArrowFunctionExpression":r="arrow function(";var a=this.getParamsFrom(e);a&&(r+=a),r+=") => {}";break;case"FunctionExpression":r="function(",e.id&&"Identifier"===e.id.type&&e.id.name&&(r=e.id.name+"(");var i=this.getParamsFrom(e);i&&(r+=i),r+=")";break;case"ObjectExpression":r="closure ",n=this.getPropertyListFrom(e);break;case"Property":if(e.value)if("FunctionExpression"===e.value.type){e.key?e.key.name?r=e.key.name+"(":e.key.value&&(r=e.key.value+"("):r="function(";var l=this.getParamsFrom(e.value);l&&(r+=l),r+=")"}else"ObjectExpression"===e.value.type?e.key&&(e.key.name?r=e.key.name+" ":e.key.value&&(r=e.key.value+" "),n=this.getPropertyListFrom(e.value)):e.key&&(e.key.name?r=e.key.name:e.key.value&&(r=e.key.value));break;case"VariableDeclarator":if(e.init)if("ObjectExpression"===e.init.type){switch(t){case"let":r="let ";break;case"const":r="const ";break;default:r="var "}e.id&&e.id.name&&(r+=e.id.name+" = ",n=this.getPropertyListFrom(e.init))}else if("FunctionExpression"===e.init.type)if(e.id&&e.id.name){r=e.id.name+"(";var c=this.getParamsFrom(e.init);c&&(r+=c),r+=")"}else r=this.getNameFrom(e.init);break;case"AssignmentExpression":if(e.left&&e.right){var p="ObjectExpression"===e.right.type;if(p||"FunctionExpression"===e.right.type)if(e.left.name?r=e.left.name:"MemberExpression"===e.left.type&&(r=this.expandMemberExpression(e.left,"")),r)if(p)r+=" ",n=this.getPropertyListFrom(e.right);else{r+="(";var u=this.getParamsFrom(e.right);u&&(r+=u),r+=")"}else r=this.getNameFrom(e.right)}break;case"ReturnStatement":e.argument&&("ObjectExpression"===e.argument.type||"FunctionExpression"===e.argument.type||"ArrowFunctionExpression"===e.argument.type)&&(r="return ",n=this.getPropertyListFrom(e.argument))}return{name:r,details:n}},expandMemberExpression:function(e,t){if("MemberExpression"===e.type){if(e.property){var n=e.property.name;"Literal"===e.property.type&&(n=e.property.value),n&&(t=t&&t.length>0?n+"."+t:n)}return e.object&&e.object.name&&(t=e.object.name+"."+t),this.expandMemberExpression(e.object,t)}return t},getSignatureSourceRangeFrom:function(e){var t=[0,0];return e&&("AssignmentExpression"===e.type?e.left&&e.left.range&&(t=e.left.range):"Property"===e.type?e.key&&e.key.range&&(t=e.key.range):"ReturnStatement"===e.type?(t[0]=e.range[0],t[1]=t[0]+6):"ArrowFunctionExpression"===e.type?t=e.range:"ClassExpression"===e.type||"ClassDeclaration"===e.type?e.id&&e.id.range?t=e.id.range:(t=e.range,t[1]=t[0]+5):e.id&&e.id.range?t=e.id.range:e.range&&(t=e.range,"FunctionExpression"===e.type&&(t[1]=t[0]+8))),t}};return e}),define("javascript/ruleData",["i18n!javascript/nls/problems"],function(e){var t={defaults:{"accessor-pairs":3,"check-tern-plugin":3,curly:0,eqeqeq:3,"missing-doc":0,"missing-nls":0,"missing-requirejs":3,"new-parens":1,"no-caller":1,"no-comma-dangle":0,"no-cond-assign":1,"no-console":0,"no-const-assign":1,"no-constant-condition":1,"no-control-regex":1,"no-debugger":3,"no-dupe-keys":1,"no-duplicate-case":1,"no-else-return":3,"no-empty-block":0,"no-empty-character-class":1,"no-empty-label":1,"no-eq-null":1,"no-eval":0,"no-extend-native":[1,{exceptions:""}],"no-extra-bind":3,"no-extra-boolean-cast":1,"no-extra-parens":[3,"all",{conditionalAssign:!1,returnAssign:!1,nestedBinaryExpressions:!1}],"no-extra-semi":3,"no-fallthrough":1,"no-implicit-coercion":[3,{"boolean":!0,number:!0,string:!0}],"no-implied-eval":0,"no-invalid-regexp":[1,{allowConstructorFlags:""}],"no-invalid-this":3,"no-irregular-whitespace":[0,{skipComments:!1,skipRegExps:!1,skipTemplates:!1}],"no-iterator":1,"no-jslint":3,"no-lone-blocks":0,"no-mixed-spaces-and-tabs":0,"no-native-reassign":[1,{exceptions:""}],"no-negated-in-lhs":1,"no-new-array":3,"no-new-func":3,"no-new-object":3,"no-new-wrappers":3,"no-obj-calls":1,"no-param-reassign":[3,{props:!1}],"no-proto":1,"no-redeclare":3,"no-regex-spaces":1,"no-reserved-keys":0,"no-self-assign":1,"no-self-compare":1,"no-shadow":3,"no-shadow-global":3,"no-sparse-arrays":3,"no-throw-literal":3,"no-trailing-spaces":[0,{skipBlankLines:!0}],"no-undef":1,"no-undef-expression":3,"no-undef-init":3,"no-unreachable":3,"no-unused-expressions":[0,{allowShortCircuit:!1,allowTernary:!1}],"no-unused-params":3,"no-unused-vars":3,"no-use-before-define":3,"no-void":0,"no-with":3,quotes:[0,"double",{avoidEscape:!1,allowTemplateLiterals:!1}],radix:3,semi:[3,"always",{omitLastInOneLineBlock:!1}],"type-checked-consistent-return":0,"unknown-require":3,"unnecessary-nls":0,"use-isnan":1,"valid-typeof":1,yoda:[0,"never",{exceptRange:!1,onlyEquality:!1}]},metadata:{"accessor-pairs":{description:e["accessor-pairs-description"],url:"http://eslint.org/docs/rules/accessor-pairs"},"check-tern-plugin":{description:e["check-tern-plugin-description"]},curly:{description:e["curly-description"],url:"http://eslint.org/docs/rules/curly"},eqeqeq:{description:e["eqeqeq-description"],url:"http://eslint.org/docs/rules/eqeqeq"},"missing-doc":{description:e["missing-doc-description"],url:"http://eslint.org/docs/rules/valid-jsdoc"},"missing-nls":{description:e["missing-nls-description"]},"missing-requirejs":{description:e["missing-requirejs-description"]},"new-parens":{description:e["new-parens-description"],url:"http://eslint.org/docs/rules/new-parens"},"no-caller":{description:e["no-caller-description"],url:"http://eslint.org/docs/rules/no-caller"},"no-comma-dangle":{description:e["no-comma-dangle-description"],url:"http://eslint.org/docs/rules/no-comma-dangle"},"no-cond-assign":{description:e["no-cond-assign-description"],url:"http://eslint.org/docs/rules/no-cond-assign"},"no-console":{description:e["no-console-description"],url:"http://eslint.org/docs/rules/no-console"},"no-constant-condition":{description:e["no-constant-condition-description"],url:"http://eslint.org/docs/rules/no-constant-condition"},"no-const-assign":{description:e["no-const-assign-description"],url:"http://eslint.org/docs/rules/no-const-assign"},"no-control-regex":{description:e["no-control-regex-description"],url:"http://eslint.org/docs/rules/no-control-regex"},"no-debugger":{description:e["no-debugger-description"],url:"http://eslint.org/docs/rules/no-debugger"},"no-dupe-keys":{description:e["no-dupe-keys-description"],url:"http://eslint.org/docs/rules/no-dupe-keys"},"no-duplicate-case":{description:e["no-duplicate-case-description"],url:"http://eslint.org/docs/rules/no-duplicate-case"},"no-else-return":{description:e["no-else-return-description"],url:"http://eslint.org/docs/rules/no-else-return"},"no-empty-block":{description:e["no-empty-block-description"],url:"http://eslint.org/docs/rules/no-empty"},"no-empty-character-class":{description:e["no-empty-character-class-description"],url:"http://eslint.org/docs/rules/no-empty-character-class"},"no-empty-label":{description:e["no-empty-label-description"],url:"http://eslint.org/docs/rules/no-empty-label"},"no-eq-null":{description:e["no-eq-null-description"],url:"http://eslint.org/docs/rules/no-eq-null"},"no-eval":{description:e["no-eval-description"],url:"http://eslint.org/docs/rules/no-eval"},"no-extend-native":{description:e["no-extend-native-description"],url:"http://eslint.org/docs/rules/no-extend-native"},"no-extra-bind":{description:e["no-extra-bind-description"],url:"http://eslint.org/docs/rules/no-extra-bind"},"no-extra-boolean-cast":{description:e["no-extra-boolean-cast-description"],url:"http://eslint.org/docs/rules/no-extra-boolean-cast"},"no-extra-parens":{description:e["no-extra-parens-description"],url:"http://eslint.org/docs/rules/no-extra-parens"},"no-extra-semi":{description:e["no-extra-semi-description"],url:"http://eslint.org/docs/rules/no-extra-semi"},"no-fallthrough":{description:e["no-fallthrough-description"],url:"http://eslint.org/docs/rules/no-fallthrough"},"no-implicit-coercion":{description:e["no-implicit-coercion-description"],url:"http://eslint.org/docs/rules/no-implicit-coercion"},"no-implied-eval":{description:e["no-implied-eval-description"],url:"http://eslint.org/docs/rules/no-implied-eval"},"no-invalid-regexp":{description:e["no-invalid-regexp-description"],url:"http://eslint.org/docs/rules/no-invalid-regexp"},"no-invalid-this":{description:e["no-invalid-this-description"],url:"http://eslint.org/docs/rules/no-invalid-this"},"no-irregular-whitespace":{description:e["no-irregular-whitespace-description"],url:"http://eslint.org/docs/rules/no-irregular-whitespace"},"no-iterator":{description:e["no-iterator-description"],url:"http://eslint.org/docs/rules/no-iterator"},"no-jslint":{description:e["no-jslint-description"]},"no-native-reassign":{description:e["no-native-reassign-description"],url:"http://eslint.org/docs/rules/no-native-reassign"},"no-lone-blocks":{description:e["no-lone-blocks-description"],url:"http://eslint.org/docs/rules/no-lone-blocks"},"no-mixed-spaces-and-tabs":{description:e["no-mixed-spaces-and-tabs-description"],url:"http://eslint.org/docs/rules/no-mixed-spaces-and-tabs"},"no-negated-in-lhs":{description:e["no-negated-in-lhs-description"],url:"http://eslint.org/docs/rules/no-negated-in-lhs"},"no-new-array":{description:e["no-new-array-description"],url:"http://eslint.org/docs/rules/no-array-constructor"},"no-new-func":{description:e["no-new-func-description"],url:"http://eslint.org/docs/rules/no-new-func"},"no-new-object":{description:e["no-new-object-description"],url:"http://eslint.org/docs/rules/no-new-object"},"no-new-wrappers":{description:e["no-new-wrappers-description"],url:"http://eslint.org/docs/rules/no-new-wrappers"},"no-obj-calls":{description:e["no-obj-calls-description"],url:"http://eslint.org/docs/rules/no-obj-calls"},"no-param-reassign":{description:e["no-param-reassign-description"],url:"http://eslint.org/docs/rules/no-param-reassign"},"no-proto":{description:e["no-proto-description"],url:"http://eslint.org/docs/rules/no-proto"},"no-redeclare":{description:e["no-redeclare-description"],url:"http://eslint.org/docs/rules/no-redeclare"},"no-regex-spaces":{description:e["no-regex-spaces-description"],url:"http://eslint.org/docs/rules/no-regex-spaces"},"no-reserved-keys":{description:e["no-reserved-keys-description"],url:"http://eslint.org/docs/rules/no-reserved-keys"},"no-self-compare":{description:e["no-self-compare-description"],url:"http://eslint.org/docs/rules/no-self-compare"},"no-self-assign":{description:e["no-self-assign-description"],url:"http://eslint.org/docs/rules/no-self-assign"},"no-shadow":{description:e["no-shadow-description"],url:"http://eslint.org/docs/rules/no-shadow"},"no-shadow-global":{description:e["no-shadow-global-description"]},"no-sparse-arrays":{description:e["no-sparse-arrays-description"],url:"http://eslint.org/docs/rules/no-sparse-arrays"},"no-throw-literal":{description:e["no-throw-literal-description"],url:"http://eslint.org/docs/rules/no-throw-literal"},"no-trailing-spaces":{description:e["no-trailing-spaces-description"],url:"http://eslint.org/docs/rules/no-trailing-spaces"},"no-undef":{description:e["no-undef-description"],url:"http://eslint.org/docs/rules/no-undef"},"no-undef-expression":{description:e["no-undef-expression-description"]},"no-undef-init":{description:e["no-undef-init-description"],url:"http://eslint.org/docs/rules/no-undef-init"},"no-unreachable":{description:e["no-unreachable-description"],url:"http://eslint.org/docs/rules/no-unreachable"},"no-unused-expressions":{description:e["no-unused-expressions-description"],url:"http://eslint.org/docs/rules/no-unused-expressions"},"no-unused-params":{description:e["no-unused-params-description"]},"no-unused-vars":{description:e["no-unused-vars-description"],url:"http://eslint.org/docs/rules/no-unused-vars"},"no-use-before-define":{description:e["no-use-before-define-description"],url:"http://eslint.org/docs/rules/no-use-before-define"},"no-void":{description:e["no-void-description"],url:"http://eslint.org/docs/rules/no-void"},"no-with":{description:e["no-with-description"],url:"http://eslint.org/docs/rules/no-with"},quotes:{description:e["quotes-description"],url:"http://eslint.org/docs/rules/quotes"},radix:{description:e["radix-description"],url:"http://eslint.org/docs/rules/radix"},semi:{description:e["semi-description"],url:"http://eslint.org/docs/rules/semi"},"unknown-require":{description:e["unknown-require-description"]},"unnecessary-nls":{description:e["unnecessary-nls-description"]},"use-isnan":{description:e["use-isnan-description"],url:"http://eslint.org/docs/rules/use-isnan"},"valid-typeof":{description:e["valid-typeof-description"],url:"http://eslint.org/docs/rules/valid-typeof"},"type-checked-consistent-return":{description:e["type-checked-consistent-return-description"]},yoda:{description:e["yoda-description"],url:"http://eslint.org/docs/rules/yoda"}}};return Object.freeze(t.defaults),t}),define("javascript/ternPlugins/jsdoc",["tern/lib/tern","orion/objects","javascript/finder","javascript/signatures","javascript/util","javascript/ruleData","eslint/conf/environments","i18n!javascript/nls/messages"],function(e,t,n,r,o,s,a,i){function l(e){if(e.options&&e.options.plugins)for(var t=Object.keys(e.options.plugins),n=0,r=t.length;r>n;n++){var o=e.options.plugins[t[n]].env;o&&(w[o]=!0)}}function c(e,t,n){var r=[],o=u(t.end,n.text),s=n.text.charAt(t.end-o.length-1);return"{"===s&&(r=d(o,e,n)),{completions:r}}function p(e,t,n){var r=[],o=u(t.end,n.text),s=n.text.charAt(t.end-o.length-1);return"{"===s?r=d(o,e,n):"."===s?r=g(o,e,t):("*"===s||" "===s)&&(r=b(o,e,t,n)),{completions:r}}function u(e,t){var n=e-1,r="",o=t.charAt(n);if("{*,".indexOf(o)>-1)return r;if("@"===o)return o;if("/"===o&&"/"===t.charAt(n-1))return r;for(;n>=0&&/\S/.test(o);){if(r=o+r,"@"===o||"*"===o||"{"===o)return r;if("/"===o&&"/"===t.charAt(n-1))return r;if(n--,o=t.charAt(n),"{*,".indexOf(o)>-1)return r}return r}function d(e,t,r){var o,s,a,l=[],c={ecma5:!0,ecma6:!0,ecma7:!0};h(r.name)&&(c.browser=!0);var p=m(r.ast,c),u=Object.create(null),d=n.findNodeAfterComment(t,r.ast),g=r.scope;if(d)if(d.scope)g=d.scope;else if(d.parents)for(var b=d.parents.length-1;b>=0;b--)if(d.parents[b]&&d.parents[b].scope){g=d.parents[b].scope;break}for(;g;){for(a in g.props)o=g.props[a],o&&o.types&&o.types.length>0&&(s=f(o.types[0],p,u,e),s&&l.push(s));g=g.prev}var y=S("{}",i.jsDocEmptyObjDesc,e);return y.origin="ecma5",y.doc=i.jsDocEmptyObjDoc,l.push(y),y=S("{prop: propType}",i.jsDocObjPropDesc,e),y.origin="ecma5",y.doc=i.jsDocObjPropDoc,l.push(y),y=S("?",i.jsDocAnyTypeDesc,e),y.origin="ecma5",y.doc=i.jsDocAnyTypeDoc,l.push(y),l}function h(e){return/(?:html|htm|xhtml)$/g.test(e)}function f(e,t,n,r){if(e&&"object"==typeof e&&e.name&&e.origin&&(t[e.origin]||e.origin.indexOf("/")>=0)){var o=e.name;if("<top>"===o)return null;var s=["bool","boolean","string","number","regexp"];if(e.retval&&s.indexOf(e.retval.name)>=0&&s.indexOf(e.name.toLowerCase())<0)return null;if(n[o])return null;n[o]=!0;var a=S(o,"",r);return a.origin=e.origin,a.doc=e.doc,a.url=e.url,a}return null}function m(e,n){var r=Object.create(null);if(t.mixin(r,n),e.comments)for(var o=0;o<e.comments.length;o++){var s=e.comments[o];if("Block"===s.type){var a=s.value.trim(),i=/^(eslint-\w+|eslint|globals?)(\s|$)/.exec(a);if(i&&(a=a.substring(i.index+i[1].length),"eslint-env"===i[1])){var l=a.replace(/\s*,\s*/g,",");l.split(/,+/).forEach(function(e){e=e.trim(),e&&(r[e]=!0)})}}}return r}function g(){return[]}function b(e,t,r,a){var l,c,p,u=[],d=y(r.end,a),h=d.line.slice(0,r.end-d.start-e.length-1);if(/^\/\*$/.test(h.trim())){if(o.looselyMatches(e,"eslint-env")){var f=_(),m="eslint-env ${library:"+f+"}";p=S("eslint-env","",e,m),p.doc=i.eslintEnvDirective,p.url="http://eslint.org/docs/user-guide/configuring.html#specifying-environments",u.push(p)}l=Object.keys(E);for(var g=l.length,b=0;g>b;b++){var T=E[l[b]];o.looselyMatches(e,T.name)&&(p=S(T.name,"",e,T.template),p.url=T.url,p.doc=T.desc,u.push(p))}}else if(null!==(c=/\s*\*\s*\@name\s*(\w*)/gi.exec(d.line))){if(c[1]===e){var O=n.findNodeAfterComment(t,a.ast),C=v(O);C&&u.push(S(C,i.funcProposalDescription,e))}}else if(null!==(c=/\s*\*\s*\@param\s*(?:\{[\w.]*\})?\s*(\w*)/gi.exec(d.line))){if(c[1]===e&&(O=n.findNodeAfterComment(t,a.ast))){var R=x(O);if(Array.isArray(R))for(b=0;b<R.length;b++)C=R[b].name,o.looselyMatches(e,C)&&u.push(S(C,i.funcParamProposalDescription,e))}}else if(/^\s*(?:\/\*)?\s*eslint(?:-enable|-disable)?\s+/gi.test(d.line)){var A=s.metadata,D=Object.keys(A).sort();for(b=0;b<D.length;b++){var M=D[b];if(o.looselyMatches(e,M)){var P=A[M];p=S(M,"",e),p.doc=P.description?P.description:i.eslintRuleProposalDescripton,P.url&&(p.url=P.url),u.push(p)}}}else if(/^\s*(?:\/\*)?\s*eslint-env\s+/gi.test(d.line))for(l=Object.keys(w).sort(),b=0;b<l.length;b++){var N=l[b];"builtin"!==N&&o.looselyMatches(e,N)&&(p=S(N,"",e),p.doc=k[N],p.doc||(p.doc=i.eslintEnvProposalDescription),p.url="http://eslint.org/docs/user-guide/configuring.html#specifying-environments",u.push(p))}else for(l=Object.keys(j),g=l.length,b=0;g>b;b++)T=j[l[b]],o.looselyMatches(e,T.name)&&(p=T.template?S(T.name,"",e,T.template):S(T.name,"",e),p.url=T.url,p.doc=T.desc,u.push(p));return u}function y(e,t){var n="",r=e;if(r>0&&r<=t.text.length){var o=t.text.charAt(r);for("\n"===o&&(r--,o=t.text.charAt(r));"\n"!==o&&r>-1;)n=o+n,r--,o=t.text.charAt(r)}return{line:n,start:r}}function v(e){switch(e.type){case"FunctionDeclaration":return e.id.name;case"Property":if("FunctionExpression"===e.value.type)return e.value.id?e.value.id.name:e.key.name;break;case"ExpressionStatement":var t=e.expression;if(t&&"AssignmentExpression"===t.type&&"FunctionExpression"===t.right.type){if(t.right.id)return t.right.id.name;if("Identifier"===t.left.type)return t.left.name;if("MemberExpression"===t.left.type)return r.expandMemberExpression(t.left,"")}break;case"VariableDeclaration":if(e.declarations.length>0){var n=e.declarations[0];if(n.init&&"FunctionExpression"===n.init.type)return n.init.id?n.init.id.name:n.id.name}}return null}function x(e){switch(e.type){case"FunctionDeclaration":return e.params;case"Property":if("FunctionExpression"===e.value.type)return e.value.params;break;case"ExpressionStatement":var t=e.expression;if(t&&"AssignmentExpression"===t.type&&"FunctionExpression"===t.right.type)return t.right.params;break;case"VariableDeclaration":if(e.declarations.length>0){var n=e.declarations[0];if(n.init&&"FunctionExpression"===n.init.type)return n.init.params}}return[]}function _(){for(var e=[],t=Object.keys(w).sort(),n=0;n<t.length;n++){var r=t[n];"builtin"!==r&&e.push(r)}var o={type:"link",values:e,title:"ESLint Environments",style:"no_emphasis"};return JSON.stringify(o).replace("}","\\}")}function S(e,t,n,r){var o=Object.create(null);return"string"==typeof r?(o.type="jsdoc_template",o.template=r):o.type="doc",o.name=e,o.proposal=e.slice(n.length),o.description=t,o.overwrite=!0,"string"==typeof n&&(o.prefix=n),o}var w={},k={browser:i.browser,node:i.node,commonjs:i.commonjs,worker:i.worker,amd:i.amd,mocha:i.mocha,jasmine:i.jasmine,jest:i.jest,phantomjs:i.phantomjs,protractor:i.protractor,qunit:i.qunit,jquery:i.jquery,prototypejs:i.prototypejs,shelljs:i.shelljs,meteor:i.meteor,mongo:i.mongo,applescript:i.applescript,nashorn:i.nashorn,serviceworker:i.serviceworker,embertest:i.embertest,webextensions:i.webextension,es6:i.es6};e.registerPlugin("jsdoc",function(e){return{passes:{completion:function(r,o){var s=n.findComment(o.end,r.ast);return s?(t.mixin(w,a),l(e),"Line"===s.type?c(s,o,r):p(s,o,r)):null}}}});var E={eslint:{name:"eslint",desc:i.eslintRuleEnableDisable,template:"eslint ${rule-id}:${0/1} ${cursor}",url:"http://eslint.org/docs/user-guide/configuring.html#configuring-rules"},"eslint-enable":{name:"eslint-enable",desc:i.eslintRuleEnable,template:"eslint-enable ${rule-id} ${cursor}",url:"http://eslint.org/docs/user-guide/configuring.html#configuring-rules"},"eslint-disable":{name:"eslint-disable",desc:i.eslintRuleDisable,template:"eslint-disable ${rule-id} ${cursor}",url:"http://eslint.org/docs/user-guide/configuring.html#configuring-rules"}},j={"abstract":{name:"@abstract",url:"http://usejsdoc.org/tags-abstract.html",desc:"This member must be implemented (or overridden) by the inheritor."},access:{name:"@access",url:"http://usejsdoc.org/tags-access.html",desc:"Specify the access level of this member (private, public, or protected)."},alias:{name:"@alias",url:"http://usejsdoc.org/tags-alias.html",desc:"Treat a member as if it had a different name."},augments:{name:"@augments",url:"http://usejsdoc.org/tags-augments.html",desc:"Indicate that a symbol inherits from, ands adds to, a parent symbol."},author:{name:"@author",url:"http://usejsdoc.org/tags-author.html",desc:"Identify the author of an item.",template:"@author ${cursor}"},borrows:{name:"@borrows",url:"http://usejsdoc.org/tags-borrows.html",desc:"This object uses something from another object."},callback:{name:"@callback",url:"http://usejsdoc.org/tags-callback.html",desc:"Document a callback function.",template:"@callback ${cursor}"},"class":{name:"@class",url:"http://usejsdoc.org/tags-class.html",desc:'This function is intended to be called with the "new" keyword.',template:"@class ${cursor}"},classdesc:{name:"@classdesc",url:"http://usejsdoc.org/tags-classdesc.html",desc:"Use the following text to describe the entire class."},constant:{name:"@constant",url:"http://usejsdoc.org/tags-constant.html",desc:"Document an object as a constant."},constructs:{name:"@constructs",url:"http://usejsdoc.org/tags-constructs.html",desc:"This function member will be the constructor for the previous class."},copyright:{name:"@copyright",url:"http://usejsdoc.org/tags-copyright.html",desc:"Document some copyright information."},"default":{name:"@default",url:"http://usejsdoc.org/tags-default.html",desc:"Document the default value."},deprecated:{name:"@deprecated",url:"http://usejsdoc.org/tags-deprecated.html",desc:"Document that this is no longer the preferred way.",template:"@deprecated ${cursor}"},description:{name:"@description",url:"http://usejsdoc.org/tags-description.html",desc:"Describe a symbol.",template:"@description ${cursor}"},"enum":{name:"@enum",url:"http://usejsdoc.org/tags-enum.html",desc:"Document a collection of related properties."},event:{name:"@event",url:"http://usejsdoc.org/tags-event.html",desc:"Document an event."},example:{name:"@example",url:"http://usejsdoc.org/tags-example.html",desc:"Provide an example of how to use a documented item."},exports:{name:"@exports",url:"http://usejsdoc.org/tags-exports.html",desc:"Identify the member that is exported by a JavaScript module."},external:{name:"@external",url:"http://usejsdoc.org/tags-external.html",desc:"Identifies an external class, namespace, or module."},file:{name:"@file",url:"http://usejsdoc.org/tags-file.html",desc:"Describe a file."},fires:{name:"@fires",url:"http://usejsdoc.org/tags-fires.html",desc:"Describe the events this method may fire."},"function":{name:"@function",url:"http://usejsdoc.org/tags-function.html",desc:"Describe a function or method.",template:"@function ${cursor}"},global:{name:"@global",url:"http://usejsdoc.org/tags-global.html",desc:"Document a global object."},ignore:{name:"@ignore",url:"http://usejsdoc.org/tags-ignore.html",desc:"Omit a symbol from the documentation."},"implements":{name:"@implements",url:"http://usejsdoc.org/tags-implements.html",desc:"This symbol implements an interface."},inheritdoc:{name:"@inheritdoc",url:"http://usejsdoc.org/tags-inheritdoc.html",desc:"Indicate that a symbol should inherit its parent's documentation."},inner:{name:"@inner",url:"http://usejsdoc.org/tags-inner.html",desc:"Document an inner object."},instance:{name:"@instance",url:"http://usejsdoc.org/tags-instance.html",desc:"Document an instance member."},"interface":{name:"@interface",url:"http://usejsdoc.org/tags-interface.html",desc:"This symbol is an interface that others can implement."},kind:{name:"@kind",url:"http://usejsdoc.org/tags-kind.html",desc:"What kind of symbol is this?"},lends:{name:"@lends",url:"http://usejsdoc.org/tags-lends.html",desc:"Document properties on an object literal as if they belonged to a symbol with a given name.",template:"@lends ${cursor}"},license:{name:"@license",url:"http://usejsdoc.org/tags-license.html",desc:"Identify the license that applies to this code.",template:"@license ${cursor}"},listens:{name:"@listens",url:"http://usejsdoc.org/tags-listens.html",desc:"List the events that a symbol listens for."},member:{name:"@member",url:"http://usejsdoc.org/tags-member.html",desc:"Document a member."},memberof:{name:"@memberof",url:"http://usejsdoc.org/tags-memberof.html",desc:"This symbol belongs to a parent symbol."},mixes:{name:"@mixes",url:"http://usejsdoc.org/tags-mixes.html",desc:"This object mixes in all the members from another object."},mixin:{name:"@mixin",url:"http://usejsdoc.org/tags-mixin.html",desc:"Document a mixin object."},module:{name:"@module",url:"http://usejsdoc.org/tags-module.html",desc:"Document a JavaScript module."},name:{name:"@name",url:"http://usejsdoc.org/tags-name.html",desc:"Document the name of an object.",template:"@name ${cursor}"},namespace:{name:"@namespace",url:"http://usejsdoc.org/tags-namespace.html",desc:"Document a namespace object."},override:{name:"@override",url:"http://usejsdoc.org/tags-override.html",desc:"Indicate that a symbol overrides its parent."},param:{name:"@param",url:"http://usejsdoc.org/tags-param.html",desc:"Document the parameter to a function.",template:"@param {${type}} ${cursor}"},"private":{name:"@private",url:"http://usejsdoc.org/tags-private.html",desc:"This symbol is meant to be private.",template:"@private ${cursor}"},property:{name:"@property",url:"http://usejsdoc.org/tags-property.html",desc:"Document a property of an object."},"protected":{name:"@protected",url:"http://usejsdoc.org/tags-protected.html",desc:"This symbol is meant to be protected."},"public":{name:"@public",url:"http://usejsdoc.org/tags-public.html",desc:"This symbol is meant to be public.",template:"@public ${cursor}"},readonly:{name:"@readonly",url:"http://usejsdoc.org/tags-readonly.html",desc:"This symbol is meant to be read-only."},requires:{name:"@requires",url:"http://usejsdoc.org/tags-requires.html",desc:"This file requires a JavaScript module."},returns:{name:"@returns",url:"http://usejsdoc.org/tags-returns.html",desc:"Document the return value of a function.",template:"@returns {${type}} ${cursor}"},see:{name:"@see",url:"http://usejsdoc.org/tags-see.html",desc:"Refer to some other documentation for more information.",template:"@see ${cursor}"},since:{name:"@since",url:"http://usejsdoc.org/tags-since.html",desc:"When was this feature added?",template:"@since ${cursor}"},"static":{name:"@static",url:"http://usejsdoc.org/tags-static.html",desc:"Document a static member."},summary:{name:"@summary",url:"http://usejsdoc.org/tags-summary.html",desc:"A shorter version of the full description."},"this":{name:"@this",url:"http://usejsdoc.org/tags-this.html",desc:"What does the 'this' keyword refer to here?"},"throws":{name:"@throws",url:"http://usejsdoc.org/tags-throws.html",desc:"Describe what errors could be thrown.",template:"@throws {${type}} ${cursor}"},todo:{name:"@todo",url:"http://usejsdoc.org/tags-todo.html",desc:"Document tasks to be completed."},tutorial:{name:"@tutorial",url:"http://usejsdoc.org/tags-tutorial.html",desc:"Insert a link to an included tutorial file."},type:{name:"@type",url:"http://usejsdoc.org/tags-type.html",desc:"Document the type of an object."},typedef:{name:"@typedef",url:"http://usejsdoc.org/tags-typedef.html",desc:"Document a custom type."},variation:{name:"@variation",url:"http://usejsdoc.org/tags-variation.html",desc:"Distinguish different objects with the same name."},version:{name:"@version",url:"http://usejsdoc.org/tags-version.html",desc:"Documents the version number of an item."},link:{name:"{@link}",url:"http://usejsdoc.org/tags-inline-link.html",desc:"Link to another item in the documentation."},"inline-tutorial":{name:"{@tutorial}",url:"http://usejsdoc.org/tags-inline-tutorial.html",desc:"Link to a tutorial."}}
}),define("javascript/ternPlugins/mongodb",["tern/lib/tern","javascript/finder","i18n!javascript/nls/messages"],function(e,t,n){var r,o=[{name:"mongodb",nodes:{top:!0,member:!1,prop:!1},template:"var ${name} = require('mongodb');\n",doc:n.mongodbRequire,url:"https://docs.mongodb.com/manual/reference/"},{name:"mongodb client",nodes:{top:!0,member:!1,prop:!1},template:"var MongoClient = require('mongodb').MongoClient;\nvar Server = require('mongodb').Server;\n${cursor}",doc:n.mongodbClient,url:"https://docs.mongodb.com/manual/reference/"},{name:"mongodb open",nodes:{top:!0,member:!1,prop:!1},template:"var MongoClient = require('mongodb').MongoClient;\nvar Server = require('mongodb').Server;\nvar ${client} = new MongoClient(new Server(${host}, ${port}));\ntry {\n	${client}.open(function(error, ${client}) {\n		var ${db} = ${client}.db(${name});\n		${cursor}\n	});\n} finally {\n	${client}.close();\n};",doc:n.mongodbOpen,url:"https://docs.mongodb.com/manual/reference/"},{name:"mongodb connect",nodes:{top:!0,member:!1,prop:!1},template:"var MongoClient = require('mongodb').MongoClient;\nMongoClient.connect(${url}, function(error, db) {\n	${cursor}\n});\n",doc:n.mongodbConnect,url:"https://docs.mongodb.com/manual/reference/"},{name:"mongodb connect (Cloud Foundry)",nodes:{top:!0,member:!1,prop:!1},template:"if (${process}.env.VCAP_SERVICES) {\n	var env = JSON.parse(${process}.env.VCAP_SERVICES);\n	var mongo = env['${mongo-version}'][0].credentials;\n} else {\n	var mongo = {\n		username : 'username',\n		password : 'password',\n		url : 'mongodb://username:password@localhost:27017/database'\n	};\n}\nvar MongoClient = require('mongodb').MongoClient;\nMongoClient.connect(mongo.url, function(error, db) {\n	${cursor}\n});\n",doc:n.mongodbConnectCF,url:"https://docs.mongodb.com/manual/reference/"},{name:"mongodb collection",nodes:{top:!0,member:!1,prop:!1},template:"${db}.collection(${id}, function(${error}, collection) {\n	${cursor}\n});",doc:n.mongodbCollection,url:"https://docs.mongodb.com/manual/reference/"},{name:"mongodb strict collection",nodes:{top:!0,member:!1,prop:!1},template:"${db}.collection(${id}, {strict:true}, function(${error}, collection) {\n	${cursor}\n});",doc:n.mongodbStrictCollection,url:"https://docs.mongodb.com/manual/reference/"}];e.registerPlugin("mongodb",function(){return{defs:s,passes:{completion:function(e,t){r=t},variableCompletion:function(e,n,s,a){if(r.includeTemplates||void 0===r.includeTemplates){var i=t.findCompletionKind(e.ast,s);if(i&&i.kind){var l=t.findTemplatesForKind(o,i.kind,r.ecma?r.ecma:6);l.forEach(function(e){a(e.name,null,0,function(t){t.template=e.template,t.description=e.description,t.doc=e.doc,t.url=e.url,t.type="template",t.ecma=e.ecma,t.origin="mongodb",t.overwrite=!0})})}}}}}});var s={mongodb:{MongoClient:{"!type":"fn(serverConfig: ?, options: ?)",connect:"fn(uri: string, options: ?, callback: fn(err: Error, db: Db))",prototype:{}},Server:{"!type":"fn(host: string, port: number, opts?: ServerOptions)",prototype:{connect:"fn() -> ?"}},Db:{"!type":"fn(databaseName: string, serverConfig: Server, dbOptions?: DbCreateOptions)",prototype:{db:"fn(dbName: string) -> Db",open:"fn(callback: fn(err: Error, db: Db))",close:"fn(forceClose?: bool, callback?: fn(err: Error, result: ?))",admin:"fn(callback: fn(err: Error, result: ?)) -> ?",collectionsInfo:"fn(collectionName: string, callback?: fn(err: Error, result: ?))",collectionNames:"fn(collectionName: string, options: ?, callback?: fn(err: Error, result: ?))",collection:"fn(collectionName: string) -> Collection",collections:"fn(callback: fn(err: Error, collections: [Collection]))",eval:"fn(code: ?, parameters: [?], options?: ?, callback?: fn(err: Error, result: ?))",logout:"fn(options: ?, callback?: fn(err: Error, result: ?))",authenticate:"fn(userName: string, password: string, callback?: fn(err: Error, result: ?))",addUser:"fn(username: string, password: string, callback?: fn(err: Error, result: ?))",removeUser:"fn(username: string, callback?: fn(err: Error, result: ?))",createCollection:"fn(collectionName: string, callback?: fn(err: Error, result: Collection))",command:"fn(selector: Object, callback?: fn(err: Error, result: ?))",dropCollection:"fn(collectionName: string, callback?: fn(err: Error, result: ?))",renameCollection:"fn(fromCollection: string, toCollection: string, callback?: fn(err: Error, result: ?))",lastError:"fn(options: Object, connectionOptions: ?, callback: fn(err: Error, result: ?))",previousError:"fn(options: Object, callback: fn(err: Error, result: ?))",executeDbCommand:"fn(command_hash: ?, callback?: fn(err: Error, result: ?))",executeDbAdminCommand:"fn(command_hash: ?, callback?: fn(err: Error, result: ?))",resetErrorHistory:"fn(callback?: fn(err: Error, result: ?))",createIndex:"fn(collectionName: ?, fieldOrSpec: ?, options: IndexOptions, callback: Function)",ensureIndex:"fn(collectionName: ?, fieldOrSpec: ?, options: IndexOptions, callback: Function)",cursorInfo:"fn(options: ?, callback: Function)",dropIndex:"fn(collectionName: string, indexName: string, callback: Function)",reIndex:"fn(collectionName: string, callback: Function)",indexInformation:"fn(collectionName: string, options: ?, callback: Function)",dropDatabase:"fn(callback: fn(err: Error, result: ?))",stats:"fn(options: ?, callback: Function)",_registerHandler:"fn(db_command: ?, raw: ?, connection: ?, exhaust: ?, callback: Function)",_reRegisterHandler:"fn(newId: ?, object: ?, callback: Function)",_callHandler:"fn(id: ?, document: ?, err: ?) -> ?",_hasHandler:"fn(id: ?) -> ?",_removeHandler:"fn(id: ?) -> ?",_findHandler:"fn(id: ?) -> ret",__executeQueryCommand:"fn(self: ?, db_command: ?, options: ?, callback: ?)",DEFAULT_URL:"string",connect:"fn(url: string, options: Object, callback: fn(err: Error, result: ?))",addListener:"fn(event: string, handler: fn(param: ?)) -> ?"}},SocketOptions:{timeout:"number",noDelay:"bool",keepAlive:"number",encoding:"string"},ServerOptions:{auto_reconnect:"bool",poolSize:"number",socketOptions:"?"},PKFactory:{counter:"number",createPk:"fn()"},DbCreateOptions:{w:"?",wtimeout:"number",fsync:"bool",journal:"bool",readPreference:"string",native_parser:"bool",forceServerObjectId:"bool",pkFactory:"PKFactory",serializeFunctions:"bool",raw:"bool",recordQueryStats:"bool",retryMiliSeconds:"number",numberOfRetries:"number",logger:"Object",slaveOk:"number",promoteLongs:"bool"},ReadPreference:{PRIMARY:"string",PRIMARY_PREFERRED:"string",SECONDARY:"string",SECONDARY_PREFERRED:"string",NEAREST:"string",prototype:{}},CollectionCreateOptions:{readPreference:"string",slaveOk:"bool",serializeFunctions:"bool",raw:"bool",pkFactory:"PKFactory"},CollStats:{ns:"string",count:"number",size:"number",avgObjSize:"number",storageSize:"number",numExtents:"number",nindexes:"number",lastExtentSize:"number",paddingFactor:"number",flags:"number",totalIndexSize:"number",indexSizes:{_id_:"number",username:"number"}},Collection:{insert:"fn(query: ?, callback: fn(err: Error, result: ?))",remove:"fn(selector: Object, callback?: fn(err: Error, result: ?))",rename:"fn(newName: String, callback?: fn(err: Error, result: ?))",save:"fn(doc: ?, callback: fn(err: Error, result: ?))",update:"fn(selector: Object, document: ?, callback?: fn(err: Error, result: ?))",distinct:"fn(key: string, query: Object, callback: fn(err: Error, result: ?))",count:"fn(callback: fn(err: Error, result: ?))",drop:"fn(callback?: fn(err: Error, result: ?))",findAndModify:"fn(query: Object, sort: [?], doc: Object, callback: fn(err: Error, result: ?))",findAndRemove:"fn(query: Object, sort?: [?], callback?: fn(err: Error, result: ?))",find:"fn(callback?: fn(err: Error, result: Cursor)) -> Cursor",findOne:"fn(callback?: fn(err: Error, result: ?)) -> Cursor",createIndex:"fn(fieldOrSpec: ?, callback: fn(err: Error, indexName: string))",ensureIndex:"fn(fieldOrSpec: ?, callback: fn(err: Error, indexName: string))",indexInformation:"fn(options: ?, callback: Function)",dropIndex:"fn(name: string, callback: Function)",dropAllIndexes:"fn(callback: Function)",reIndex:"fn(callback: Function)",mapReduce:"fn(map: Function, reduce: Function, options: MapReduceOptions, callback: Function)",group:"fn(keys: Object, condition: Object, initial: Object, reduce: Function, finalize: Function, command: bool, options: Object, callback: Function)",options:"fn(callback: Function)",isCapped:"fn(callback: Function)",indexExists:"fn(indexes: string, callback: Function)",geoNear:"fn(x: number, y: number, callback: Function)",geoHaystackSearch:"fn(x: number, y: number, callback: Function)",indexes:"fn(callback: Function)",aggregate:"fn(pipeline: [?], callback: fn(err: Error, results: ?))",stats:"fn(options: Object, callback: fn(err: Error, results: CollStats))",hint:"?"},MapReduceOptions:{out:"Object",query:"Object",sort:"Object",limit:"number",keeptemp:"bool",finalize:"?",scope:"Object",jsMode:"bool",verbose:"bool",readPreference:"string"},IndexOptions:{w:"?",wtimeout:"number",fsync:"bool",journal:"bool",unique:"bool",sparse:"bool",background:"bool",dropDups:"bool",min:"number",max:"number",v:"number",expireAfterSeconds:"number",name:"string"},Cursor:{INIT:"number",OPEN:"number",CLOSED:"number",GET_MORE:"number",prototype:{rewind:"fn() -> Cursor",toArray:"fn(callback: fn(err: Error, results: [?]))",each:"fn(callback: fn(err: Error, item: ?))",count:"fn(applySkipLimit: bool, callback: fn(err: Error, count: number))",sort:"fn(keyOrList: ?, callback?: fn(err: Error, result: ?)) -> Cursor",limit:"fn(limit: number, callback?: fn(err: Error, result: ?)) -> Cursor",setReadPreference:"fn(preference: string, callback?: Function) -> Cursor",skip:"fn(skip: number, callback?: fn(err: Error, result: ?)) -> Cursor",batchSize:"fn(batchSize: number, callback?: fn(err: Error, result: ?)) -> Cursor",nextObject:"fn(callback: fn(err: Error, doc: ?))",explain:"fn(callback: fn(err: Error, result: ?))",stream:"fn() -> CursorStream",close:"fn(callback: fn(err: Error, result: ?))",isClosed:"fn() -> bool"}},CursorStream:{"!type":"fn(cursor: Cursor)",prototype:{pause:"fn() -> ?",resume:"fn() -> ?",destroy:"fn() -> ?"}},CollectionFindOptions:{limit:"number",sort:"?",fields:"Object",skip:"number",hint:"Object",explain:"bool",snapshot:"bool",timeout:"bool",tailtable:"bool",tailableRetryInterval:"number",numberOfRetries:"number",awaitdata:"bool",oplogReplay:"bool",exhaust:"bool",batchSize:"number",returnKey:"bool",maxScan:"number",min:"number",max:"number",showDiskLoc:"bool",comment:"String",raw:"bool",readPreference:"String",partial:"bool"},MongoCollectionOptions:{safe:"?",serializeFunctions:"?",raw:"bool",pkFactory:"?",readPreference:"string"}},"!name":"mongodb","!define":{"!known_modules":{mongodb:{"!doc":"MongoDB","!url":"https://www.mongodb.org/",MongoClient:"mongodb.MongoClient",Db:"mongodb.Db",Server:"mongodb.Server",SocketOptions:"mongodb.SocketOptions",ServerOptions:"mongodb.ServerOptions",CollectionFindOptions:"mongodb.CollectionFindOptions",MongoCollectionOptions:"mongodb.MongoCollectionOptions",IndexOptions:"mongodb.IndexOptions",CollectionCreateOptions:"mongodb.CollectionCreateOptions",DbCreateOptions:"mongodb.DbCreateOptions",MapReduceOptions:"mongodb.MapReduceOptions",CollStats:"mongodb.CollStats",ReadPreference:"mongodb.ReadPreference",Collection:"mongodb.Collection",Cursor:"mongodb.Cursor",PKFactory:"mongodb.PKFactory"}}}}}),define("javascript/ternPlugins/mysql",["tern/lib/tern","javascript/finder","i18n!javascript/nls/messages"],function(e,t,n){var r,o=[{name:"mysql",nodes:{top:!0,member:!1,prop:!1},template:"var mysql = require('mysql');\n",doc:n[""],url:"https://github.com/redblaze/node-mysql#apis"},{name:"mysql connection",nodes:{top:!0,member:!1,prop:!1},template:"var mysql = require('mysql');\nvar ${connection} = mysql.createConnection({\n	host : ${host},\n	user : ${username},\n	password : ${password}\n});\ntry {\n	${connection}.connect();\n	${cursor}\n} finally {\n	${connection}.end();\n}",doc:n.mysqlConnection,url:"https://github.com/redblaze/node-mysql#apis"},{name:"mysql query",nodes:{top:!0,member:!1,prop:!1},template:"${connection}.query(${sql}, function(error, rows, fields) {\n	${cursor}\n});\n",doc:n.mysqlQuery,url:"https://github.com/redblaze/node-mysql#apis"}];e.registerPlugin("mysql",function(){return{defs:s,passes:{completion:function(e,t){r=t},variableCompletion:function(e,n,s,a){if(r.includeTemplates||void 0===r.includeTemplates){var i=t.findCompletionKind(e.ast,s);if(i&&i.kind){var l=t.findTemplatesForKind(o,i.kind,r.ecma?r.ecma:6);l.forEach(function(e){a(e.name,null,0,function(t){t.template=e.template,t.description=e.description,t.doc=e.doc,t.url=e.url,t.type="template",t.ecma=e.ecma,t.origin="mysql",t.overwrite=!0})})}}}}}});var s={mysql:{createConnection:"fn(connectionUri: string) -> Connection",createPool:"fn(config: PoolConfig) -> Pool",createPoolCluster:"fn(config?: PoolClusterConfig) -> PoolCluster",escape:"fn(value: ?) -> string",format:"fn(sql: string) -> string",MySql:{createConnection:"fn(connectionUri: string) -> Connection",createPool:"fn(config: PoolConfig) -> Pool",createPoolCluster:"fn(config?: PoolClusterConfig) -> PoolCluster",escape:"fn(value: ?) -> string",format:"fn(sql: string) -> string"},ConnectionStatic:{createQuery:"fn(sql: string) -> Query"},Connection:{config:"ConnectionConfig",threadId:"number",beginTransaction:"fn(callback: fn(err: Error))",connect:"fn()",commit:"fn(callback: fn(err: Error))",changeUser:"fn(options: ConnectionOptions)",query:"QueryFunction",end:"fn()",destroy:"fn()",pause:"fn()",release:"fn()",resume:"fn()",escape:"fn(value: ?) -> string",escapeId:"fn(value: string) -> string",format:"fn(sql: string) -> string",on:"fn(ev: string, callback: fn(args: [?])) -> Connection",rollback:"fn(callback: fn())"},Pool:{config:"PoolConfig",getConnection:"fn(callback: fn(err: Error, connection: Connection))",query:"QueryFunction",end:"fn()",on:"fn(ev: string, callback: fn(args: [?])) -> Pool"},PoolCluster:{config:"PoolClusterConfig",add:"fn(config: PoolConfig)",end:"fn()",getConnection:"fn(callback: fn(err: Error, connection: Connection))",of:"fn(pattern: string) -> Pool",on:"fn(ev: string, callback: fn(args: [?])) -> PoolCluster"},Query:{sql:"string",start:"fn()",determinePacket:"fn(firstByte: number, parser: ?) -> ?",stream:"fn(options: StreamOptions) -> stream.Readable",pipe:"fn(callback: fn(args: [?])) -> Query",on:"fn(ev: string, callback: fn(args: [?])) -> Query"},QueryFunction:{},QueryOptions:{sql:"string",timeout:"number",nestTables:"?",typeCast:"?"},StreamOptions:{highWaterMark:"number",objectMode:"?"},ConnectionOptions:{user:"string",password:"string",database:"string",charset:"string"},ConnectionConfig:{host:"string",port:"number",localAddress:"string",socketPath:"string",timezone:"string",connectTimeout:"number",stringifyObjects:"bool",insecureAuth:"bool",typeCast:"?",queryFormat:"fn(query: string, values: ?)",supportBigNumbers:"bool",bigNumberStrings:"bool",dateStrings:"bool",debug:"?",trace:"bool",multipleStatements:"bool",flags:"?",ssl:"?"},PoolConfig:{acquireTimeout:"number",waitForConnections:"bool",connectionLimit:"number",queueLimit:"number"},PoolClusterConfig:{canRetry:"bool",removeNodeErrorCount:"number",defaultSelector:"string"},SslCredentials:{pfx:"string",key:"string",passphrase:"string",cert:"string",ca:"?",crl:"?",ciphers:"string"},Error:{code:"string",errno:"number",sqlStateMarker:"string",sqlState:"string",fieldCount:"number",stack:"string",fatal:"bool"}},"!name":"mysql","!define":{"!known_modules":{mysql:{createConnection:"fn(connectionUri: string) -> mysql.Connection",createPool:"fn(config: mysql.PoolConfig) -> mysql.Pool",createPoolCluster:"fn(config?: mysql.PoolClusterConfig) -> mysql.PoolCluster",escape:"fn(value: ?) -> string",format:"fn(sql: string) -> string"}}}}}),define("javascript/ternPlugins/occurrences",["tern/lib/tern","estraverse/estraverse","javascript/finder"],function(e,t,n){function r(e,n,r,s,a){if(b)return!0;if(y)return!1;if(s&&!v||!s&&v)return!1;if(a&&!x||!a&&x)return!1;if(e&&(e.parent=n),e&&e.type===t.Syntax.Identifier&&e.name===m.word){var i=f[f.length-1];if(e.parent.type!==t.Syntax.VariableDeclarator||!e.parent.parent||e.parent.parent.type!==t.Syntax.VariableDeclaration||"let"!==e.parent.parent.kind&&"const"!==e.parent.parent.kind||(i.isLet=!0),i.isLet&&i.blocks&&i.blocks.length>0&&(i=i.blocks[i.blocks.length-1]),r){if(g)return i.range[0]<=m.start&&i.range[1]>=m.end?(h=[],g=i,i.occurrences.push({start:e.range[0],end:e.range[1]}),!1):(i.occurrences=[],b=i,!0);if(!(i.range[0]<=m.start&&i.range[1]>=m.end))return i.occurrences=[],b=i,!0;g=i,o(e,i.occurrences)}i.occurrences.push({start:e.range[0],end:e.range[1]})}return!1}function o(e,n){var r=e.parent;if(r&&r.type===t.Syntax.FunctionExpression){var o=r.parent;if(o&&o.type===t.Syntax.CallExpression&&o.callee&&"define"===o.callee.name)for(var s=r,a=0;a<s.params.length;a++)if(s.params[a]===e){if(2===o.arguments.length||3===o.arguments.length){var i=o.arguments[o.arguments.length-2];i.elements&&i.elements.length>a&&n.push({start:i.elements[a].range[0],end:i.elements[a].range[1]})}break}}}function s(e){if(h=[],f=[],m=e,y=!1,g=null,b=null,v=!1,x=!1,m.token){var n=m.token.parent?m.token.parent:m.token.parents&&m.token.parents.length>0?m.token.parents[m.token.parents.length-1]:null;if(y=m.token.type===t.Syntax.ThisExpression,v=!1,n&&n.type===t.Syntax.Property){var r=n.parent;r||(r=e.token.parents&&e.token.parents.length>1?e.token.parents[e.token.parents.length-2]:null),r?r.type!==t.Syntax.ObjectPattern&&(v=m.token===n.key):v=m.token===n.key}else n&&n.type===t.Syntax.MemberExpression?n.object&&n.object.type===t.Syntax.ThisExpression&&!n.computed?v=!0:!n.computed&&n.property&&m.start>=n.property.range[0]&&m.end<=n.property.range[1]&&(v=!0):n&&n.type===t.Syntax.FunctionExpression&&m.token.parents&&m.token.parents.length>1&&m.token.parents[m.token.parents.length-2].type===t.Syntax.Property&&n.id&&n.id.range===m.token.range&&(v=!0);x=n&&(n.type===t.Syntax.LabeledStatement||n.type===t.Syntax.ContinueStatement||n.type===t.Syntax.BreakStatement)}}function a(e,r){var o=e.parent?e.parent:e.parents&&e.parents.length>0?e.parents[e.parents.length-1]:null;if(o&&o.type===t.Syntax.ArrayExpression){var s=o.parent?o.parent:e.parents&&e.parents.length>1?e.parents[e.parents.length-2]:null;if(s&&s.type===t.Syntax.CallExpression&&s.callee&&"define"===s.callee.name)for(var a=o.elements,i=0;i<a.length;i++)if(a[i]===e){var l=s;if(l&&l.arguments&&(2===l.arguments.length||3===l.arguments.length)&&(l=l.arguments[l.arguments.length-1],l.params&&l.params.length>i))return n.findNode(l.params[i].range[0],r,{parents:!0});break}}return null}function i(e,t){if(t.tokens&&t.tokens.length>0){var r=n.findToken(e,t.tokens);if(r){if("Punctuator"===r.type){var o=r.index;if(e===r.range[0]&&null!==o&&o>0){var s=t.tokens[o-1];if(s.range[1]!==r.range[0])return null;r=s}}if("Identifier"===r.type||"String"===r.type||"Keyword"===r.type&&"this"===r.value)return r}}return null}function l(e){if(y)switch(e.type){case t.Syntax.ObjectExpression:if(f.push({range:e.range,occurrences:[],kind:"o"}),g)return!0;break;case t.Syntax.FunctionExpression:if(!e.isprop&&(f.push({range:e.body.range,occurrences:[],kind:"fe"}),g))return!0;break;case t.Syntax.ClassDeclaration:case t.Syntax.ClassExpression:if(f.push({range:e.body.range,occurrences:[],kind:"c"}),g)return!0}else if(v)switch(e.type){case t.Syntax.ClassDeclaration:case t.Syntax.ClassExpression:f.push({range:e.range,occurrences:[],kind:"c"});break;case t.Syntax.ObjectExpression:f.push({range:e.range,occurrences:[],kind:"o"})}else if(x)switch(e.type){case t.Syntax.LabeledStatement:if(f.push({range:e.range,occurrences:[],kind:"ls"}),e.range[0]>m.start||e.range[1]<m.end)return!0}else{var n,r=e.range[0];switch(e.body&&(r=e.body.range[0]),e.type){case t.Syntax.FunctionDeclaration:n="fd",e.params&&e.params.length>0&&(r=e.params[0].range[0]);break;case t.Syntax.FunctionExpression:case t.Syntax.ArrowFunctionExpression:n="fe",e.id?r=e.id.range[0]:e.params&&e.params.length>0&&(r=e.params[0].range[0]);break;case t.Syntax.ClassDeclaration:n="c";break;case t.Syntax.ClassExpression:n="c",e.id&&(r=e.id.range[0])}n&&f.push({range:[r,e.range[1]],occurrences:[],kind:n})}return!1}function c(){var e=f[f.length-1];if(!e.isLet||!e.blocks||0===e.blocks.length)return!1;var t=e.blocks.pop();if(b)return b===t&&(b=null),!1;var n,r,o=t.occurrences.length;if(g&&g===t){for(n=0;o>n;n++)h.push(t.occurrences[n]);return!0}if(e.blocks.length>0)for(r=0;o>r;r++)e.blocks[e.blocks.length-1].occurrences.push(t.occurrences[r]);else for(r=0;o>r;r++)e.occurrences.push(t.occurrences[r]);return!1}function p(){var e=f.pop();if(b)return b===e&&(b=null),!1;var t,n,r=e.occurrences.length;if(g&&g===e){for(t=0;r>t;t++)h.push(e.occurrences[t]);if(g.range[0]===e.range[0]&&g.range[1]===e.range[1]&&g.kind===e.kind)return!0}else if(f.length>0)for(n=0;r>n;n++)f[f.length-1].occurrences.push(e.occurrences[n]);else for(h=[],n=0;r>n;n++)h.push(e.occurrences[n]);return!1}function u(e){switch(e.type){case t.Syntax.Identifier:return e.name;case t.Syntax.ThisExpression:return"this"}}function d(e){if(!e)return!0;if(e.type===t.Syntax.ThisExpression)return!1;if(e.type===t.Syntax.Literal)return!1;if(e.type===t.Syntax.Identifier){var n=e.parent;if(!n&&e.parents&&(n=e.parents[e.parents.length-1]),n){if(n.type===t.Syntax.ImportSpecifier)return n.imported===e;if(n.type===t.Syntax.ExportSpecifier)return n.exported===e}}return e.type!==t.Syntax.Identifier}e.registerPlugin("occurrences",function(){return{}}),e.defineQueryType("occurrences",{takesFile:!0,run:function(e,r,o){if(o.ast){var l="number"==typeof r.start?r.start:r.end,c=r.end,p=i(l,o.ast);if(p){var f=n.findNode(l,o.ast,{parents:!0});if(!d(f)&&p.range[0]>=f.range[0]&&p.range[1]<=f.range[1]){if(f.type===t.Syntax.Literal){var m=a(f,o.ast);if(!m)return[];f=m,l=f.range[0],c=f.range[1]}return s({start:l,end:c,word:u(f),token:f}),t.traverse(o.ast,_),h}}}return[]}});var h=[],f=[],m=null,g=null,b=null,y=!1,v=!1,x=!1,_={enter:function(e,n){var o,s;switch(e.parent=n,e.type){case t.Syntax.Program:f.push({range:e.range,occurrences:[],kind:"p"});break;case t.Syntax.BlockStatement:var a=f[f.length-1];if(a.isLet)var i=f[f.length-1].blocks;i||(i=[]),i.push({range:e.range,occurrences:[],kind:"b"}),f[f.length-1].blocks=i;break;case t.Syntax.FunctionDeclaration:if(r(e.id,e,!0),l(e),b)return t.VisitorOption.Skip;if(e.params)for(o=e.params.length,s=0;o>s;s++){var c=e.params[s];if(c.type===t.Syntax.AssignmentPattern&&c.left&&(c=c.left),r(c,e,!0))return t.VisitorOption.Skip}break;case t.Syntax.FunctionExpression:case t.Syntax.ArrowFunctionExpression:if(l(e))return t.VisitorOption.Skip;if(r(e.id,e,!0),e.params)for(o=e.params.length,s=0;o>s;s++)if(c=e.params[s],c.type===t.Syntax.AssignmentPattern&&c.left&&(c=c.left),c.type===t.Syntax.ObjectPattern)c.properties.forEach(function(t){r(t.key,e,!0,!1),r(t.value,e)});else if(r(c,e,!0))return t.VisitorOption.Skip;break;case t.Syntax.ClassDeclaration:if(r(e.id,e,!0),r(e.superClass,e),l(e))return t.VisitorOption.Skip;break;case t.Syntax.ClassExpression:if(l(e))return t.VisitorOption.Skip;r(e.id,e,!0),r(e.superClass,e);break;case t.Syntax.AssignmentExpression:e.left.type===t.Syntax.ArrayPattern?e.left.elements.forEach(function(t){r(t,e.left)}):e.left.type===t.Syntax.ObjectPattern?e.left.properties.forEach(function(t){r(t.key,e.left)}):r(e.left,e),r(e.right,e);break;case t.Syntax.ExpressionStatement:r(e.expression,e);break;case t.Syntax.ArrayExpression:if(e.elements)for(o=e.elements.length,s=0;o>s;s++)r(e.elements[s],e);break;case t.Syntax.MemberExpression:r(e.object,e),e.computed?r(e.property,e):r(e.property,e,!1,!0);break;case t.Syntax.BinaryExpression:r(e.left,e),r(e.right,e);break;case t.Syntax.UnaryExpression:r(e.argument,e);break;case t.Syntax.SwitchStatement:r(e.discriminant,e);break;case t.Syntax.UpdateExpression:r(e.argument,e);break;case t.Syntax.ConditionalExpression:r(e.test,e),r(e.consequent,e),r(e.alternate,e);break;case t.Syntax.CallExpression:if(r(e.callee,e,!1),e.arguments)for(o=e.arguments.length,s=0;o>s;s++)r(e.arguments[s],e);break;case t.Syntax.ReturnStatement:r(e.argument,e);break;case t.Syntax.ObjectExpression:if(l(e))return t.VisitorOption.Skip;if(e.properties)for(o=e.properties.length,s=0;o>s;s++){var p=e.properties[s];p.value&&p.value.type===t.Syntax.FunctionExpression&&(y?p.value.isprop=!0:r(p.value.id,e,!1,!0)),r(p.key,e,!0,!0),r(p.value,e)}break;case t.Syntax.VariableDeclarator:e.id.type===t.Syntax.ArrayPattern?e.id.elements.forEach(function(n){n.type===t.Syntax.AssignmentPattern?(r(n.left,n,!0),r(n.right,n)):r(n,e.id,!0)}):e.id.type===t.Syntax.ObjectPattern?e.id.properties.forEach(function(t){r(t.key,e.id,!0,!1),t.key!==t.value&&r(t.value,e.id)}):r(e.id,e,!0),r(e.init,e);break;case t.Syntax.NewExpression:if(r(e.callee,e,!1),e.arguments)for(o=e.arguments.length,s=0;o>s;s++)r(e.arguments[s],e);break;case t.Syntax.LogicalExpression:r(e.left,e),r(e.right,e);break;case t.Syntax.ThisExpression:if(y){var a=f[f.length-1];a.occurrences.push({start:e.range[0],end:e.range[1]}),e.range[0]===m.token.range[0]&&(g=a)}break;case t.Syntax.IfStatement:case t.Syntax.DoWhileStatement:case t.Syntax.WhileStatement:r(e.test,e);break;case t.Syntax.ForStatement:r(e.init,e);break;case t.Syntax.ForInStatement:r(e.left,e),r(e.right,e);break;case t.Syntax.ForOfStatement:r(e.left,e),r(e.right,e);break;case t.Syntax.WithStatement:r(e.object,e);break;case t.Syntax.ThrowStatement:r(e.argument,e);break;case t.Syntax.LabeledStatement:l(e),r(e.label,e,!0,!1,!0);break;case t.Syntax.ContinueStatement:r(e.label,e,!1,!1,!0);break;case t.Syntax.BreakStatement:r(e.label,e,!1,!1,!0);break;case t.Syntax.AssignmentPattern:r(e.right,e);break;case t.Syntax.ExportDefaultDeclaration:r(e.declaration,e);break;case t.Syntax.ExportSpecifier:r(e.local,e);break;case t.Syntax.ImportDefaultSpecifier:r(e.local,e,!0);break;case t.Syntax.ImportNamespaceSpecifier:r(e.local,e,!0);break;case t.Syntax.ImportSpecifier:r(e.local,e,!0);break;case t.Syntax.MethodDefinition:r(e.key,e,!0);break;case t.Syntax.YieldExpression:r(e.argument,e)}},leave:function(e){if(y)switch(e.type){case t.Syntax.FunctionExpression:if(e.isprop){delete e.isprop;break}case t.Syntax.ObjectExpression:case t.Syntax.Program:case t.Syntax.ClassDeclaration:case t.Syntax.ClassExpression:if(g||(b=f[f.length-1]),p())return t.VisitorOption.Break}else if(v)switch(e.type){case t.Syntax.ClassDeclaration:case t.Syntax.ClassExpression:case t.Syntax.ObjectExpression:case t.Syntax.Program:if(p())return t.VisitorOption.Break}else if(x)switch(e.type){case t.Syntax.LabeledStatement:if(p())return t.VisitorOption.Break}else switch(e.type){case t.Syntax.FunctionExpression:case t.Syntax.FunctionDeclaration:case t.Syntax.ArrowFunctionExpression:case t.Syntax.ClassDeclaration:case t.Syntax.ClassExpression:if(p())return t.VisitorOption.Break;break;case t.Syntax.Program:p();break;case t.Syntax.BlockStatement:if(c())return t.VisitorOption.Break}}}}),define("javascript/ternPlugins/open_impl",["tern/lib/infer","tern/lib/tern","javascript/finder"],function(e,t,n){t.registerPlugin("open_impl",function(){return{}}),t.defineQueryType("implementation",{run:function(t,n){n.end&&!n.start&&(n.start=n.end);var r=t.fileMap[n.file],o=this.findImplRecurse(n.end,r,{},t);return!n.guess&&e.didGuess()?null:(o.implementation||(o.implementation={}),o.implementation.guess=e.didGuess(),o)},findImplRecurse:function(e,r,o,s){var a,i,l;if(r){var c=n.findNode(e,r.ast,{parents:!0});if(c&&"Identifier"===c.type){var p=c.parents[c.parents.length-1];if(p){"MemberExpression"===p.type&&c.parents.length>=2&&(p=c.parents[c.parents.length-2]);var u;if("VariableDeclarator"===p.type&&p.init?u=p.init:"AssignmentExpression"===p.type&&p.right?u=p.right:"Property"===p.type&&p.value&&(u=p.value),u){if("Literal"===u.type||"FunctionExpression"===u.type)return{implementation:{start:c.start,end:c.end,file:r.name}};if(a={start:u.start,end:u.end,file:r.name,guess:!0},i=t.findDef(s,a,r),i&&"number"==typeof i.start&&"number"==typeof i.end&&(i.start!==c.start||i.end!==c.end))return l=s.fileMap[i.file],this.findImplRecurse(i.end,l,{implementation:{start:i.start,end:i.end,file:i.file}},s)}}if(a={start:c.start,end:c.end,file:r.name,guess:!0},i=t.findDef(s,a,r))if("number"==typeof i.start&&"number"==typeof i.end){if(i.start!==c.start||i.end!==c.end)return l=s.fileMap[i.file],this.findImplRecurse(i.end,l,{implementation:{start:i.start,end:i.end,file:i.file}},s)}else{if("string"==typeof i.origin)return{implementation:{origin:i.origin}};if(!o.implementation)return{}}return{implementation:{start:c.start,end:c.end,file:r.name}}}}return o}})}),define("javascript/ternPlugins/outliner",["tern/lib/tern","estraverse/estraverse","javascript/signatures"],function(e,t,n){e.registerPlugin("outliner",function(){return{}}),e.defineQueryType("outline",{takesFile:!0,run:function(e,r,o){function s(e,t){if(e){var n={label:e.sig,labelPost:e.details,start:e.range[0],end:e.range[1]};if(t&&(n.classNamePre=t),l.length<1)i.push(n);else{var r=l[l.length-1];r.children||(r.children=[]),r.children.push(n)}return n}}function a(e){return e.type===t.Syntax.FunctionExpression||e.type===t.Syntax.ObjectExpression||e.type===t.Syntax.ClassExpression||e.type===t.Syntax.ArrowFunctionExpression}if(o.ast){var i=[],l=[];t.traverse(o.ast,{enter:function(e){var r;switch(e.type){case t.Syntax.ClassDeclaration:r=s(n.computeSignature(e),n.CLASS_IMAGE),r&&l.push(r),delete e.sig;break;case t.Syntax.ClassExpression:r=s(n.computeSignature(e),n.CLASS_IMAGE),r&&l.push(r),delete e.sig;break;case t.Syntax.MethodDefinition:r=s(n.computeSignature(e),n.FUNCTION_IMAGE),r&&l.push(r),e.value.md=!0,delete e.sig;break;case t.Syntax.FunctionDeclaration:r=s(n.computeSignature(e),n.FUNCTION_IMAGE),r&&l.push(r);break;case t.Syntax.FunctionExpression:if(e.md){delete e.sig;break}r=s(n.computeSignature(e),n.FUNCTION_IMAGE),r&&l.push(r),delete e.sig;break;case t.Syntax.ArrowFunctionExpression:r=s(n.computeSignature(e),n.FUNCTION_IMAGE),r&&l.push(r),delete e.sig;break;case t.Syntax.ObjectExpression:r=s(n.computeSignature(e),n.OBJECT_IMAGE),r&&l.push(r),delete e.sig,e.properties&&e.properties.forEach(function(e){e.value&&(a(e.value)?e.value.sig=n.computeSignature(e):s(n.computeSignature(e)))});break;case t.Syntax.VariableDeclaration:e.declarations&&e.declarations.forEach(function(r){r.init&&r.init.type===t.Syntax.ObjectExpression&&(r.init.sig=n.computeSignature(r,e.kind))});break;case t.Syntax.AssignmentExpression:e.left&&e.right&&a(e.right)&&(e.right.sig=n.computeSignature(e));break;case t.Syntax.ReturnStatement:e.argument&&a(e.argument)&&(e.argument.sig=n.computeSignature(e))}},leave:function(e){switch(e.type){case t.Syntax.ObjectExpression:case t.Syntax.FunctionDeclaration:case t.Syntax.ClassDeclaration:case t.Syntax.ClassExpression:case t.Syntax.MethodDefinition:case t.Syntax.ArrowFunctionExpression:l.pop();break;case t.Syntax.FunctionExpression:if(e.md){delete e.md;break}l.pop()}}})}return i}})}),define("javascript/ternPlugins/plugins",["tern/lib/tern"],function(e){e.registerPlugin("plugins",function(){return{}}),e.defineQueryType("installed_plugins",{run:function(e){return e.options&&"object"==typeof e.options.plugins?e.options.plugins:null}}),e.defineQueryType("installed_defs",{run:function(e){return e.options&&"object"==typeof e.options.defs?e.options.defs:null}}),e.defineQueryType("environments",{run:function(e){if(e.options&&"object"==typeof e.options.plugins){for(var t=e.options.plugins,n=Object.keys(t),r=Object.create(null),o=0;o<n.length;o++){var s=n[o],a=t[s].env;a?r[a]=!0:r[t[s]]=!0}return r}return null}})}),define("javascript/ternPlugins/postgres",["tern/lib/tern","javascript/finder","i18n!javascript/nls/messages"],function(e,t,n){var r,o=[{name:"postgres",nodes:{top:!0,member:!1,prop:!1},template:"var pg = require('pg');\n",doc:n.postgresRequire,url:"https://github.com/brianc/node-postgres/wiki"},{name:"postgres client",nodes:{top:!0,member:!1,prop:!1},template:"var pg = require('pg');\nvar url = \"postgres://postgres:${port}@${host}/${database}\";\nvar ${client} = new pg.Client(url);\n",doc:n.postgresClient,url:"https://github.com/brianc/node-postgres/wiki"},{name:"postgres connect",nodes:{top:!0,member:!1,prop:!1},template:"var pg = require('pg');\nvar url = \"postgres://postgres:${port}@${host}/${database}\";\nvar ${client} = new pg.Client(url);\n${client}.connect(function(error) {\n	${cursor}\n});\n",doc:n.postgresConnect,url:"https://github.com/brianc/node-postgres/wiki"},{name:"postgres query",nodes:{top:!0,member:!1,prop:!1},template:"${client}.query(${sql}, function(error, result) {\n	${cursor}\n});\n",doc:n.postgresQuery,url:"https://github.com/brianc/node-postgres/wiki"}];
e.registerPlugin("postgres",function(){return{defs:s,passes:{completion:function(e,t){r=t},variableCompletion:function(e,n,s,a){if(r.includeTemplates||void 0===r.includeTemplates){var i=t.findCompletionKind(e.ast,s);if(i&&i.kind){var l=t.findTemplatesForKind(o,i.kind,r.ecma?r.ecma:6);l.forEach(function(e){a(e.name,null,0,function(t){t.template=e.template,t.description=e.description,t.doc=e.doc,t.url=e.url,t.type="template",t.ecma=e.ecma,t.origin="pg",t.overwrite=!0})})}}}}}});var s={pg:{connect:"fn(connection: string, callback: fn(err: Error, client: Client, done: fn()))",end:"fn()",ConnectionConfig:{user:"string",database:"string",password:"string",port:"number",host:"string"},Defaults:{poolSize:"number",poolIdleTimeout:"number",reapIntervalMillis:"number",binary:"bool",parseInt8:"bool"},ClientConfig:{ssl:"bool"},QueryConfig:{name:"string",text:"string",values:"[?]"},QueryResult:{rows:"[?]"},ResultBuilder:{command:"string",rowCount:"number",oid:"number",addRow:"fn(row: ?)"},Client:{"!type":"fn(connection: string)",prototype:{connect:"fn(callback?: fn(err: Error))",end:"fn()",query:"fn(queryText: string, callback?: fn(err: Error, result: QueryResult)) -> Query",copyFrom:"fn(queryText: string) -> stream.Writable",copyTo:"fn(queryText: string) -> stream.Readable",pauseDrain:"fn()",resumeDrain:"fn()",on:"fn(event: string, listener: fn()) -> Client"}},Query:{prototype:{on:"fn(event: string, listener: fn(row: ?, result?: ResultBuilder)) -> Query"}},Events:{prototype:{on:"fn(event: string, listener: fn(err: Error, client: Client)) -> Events"}}},"!name":"pg","!define":{"!known_modules":{pg:{connect:"fn(connection: string, callback: fn(err: Error, client: Client, done: fn()))",end:"fn()",Client:"pg.Client"}}}}}),define("javascript/ternPlugins/redis",["tern/lib/tern","javascript/finder","i18n!javascript/nls/messages"],function(e,t,n){var r,o=[{name:"redis",nodes:{top:!0,member:!1,prop:!1},template:"var ${name} = require('redis');\n",doc:n.redisRequire,url:"https://github.com/NodeRedis/node_redis#api"},{name:"redis client",nodes:{top:!0,member:!1,prop:!1},template:"var ${name} = require('redis');\nvar ${client} = ${name}.createClient(${port}, ${host}, ${options});\n",doc:n.redisClient,url:"https://github.com/NodeRedis/node_redis#api"},{name:"redis connect",nodes:{top:!0,member:!1,prop:!1},template:"var ${name} = require('redis');\nvar ${client} = ${name}.createClient(${port}, ${host}, ${options});\ntry {\n	${cursor}\n} finally {\n	${client}.close();\n}\n",doc:n.redisConnect,url:"https://github.com/NodeRedis/node_redis#api"},{name:"redis set",nodes:{top:!0,member:!1,prop:!1},template:"client.set(${key}, ${value});\n",doc:n.redisSet,url:"https://github.com/NodeRedis/node_redis#api"},{name:"redis get",nodes:{top:!0,member:!1,prop:!1},template:"client.get(${key}, function(${error}, ${reply}) {\n	${cursor}\n});\n",doc:n.redisGet,url:"https://github.com/NodeRedis/node_redis#api"},{name:"redis on",nodes:{top:!0,member:!1,prop:!1},template:"client.on(${event}, function(${arg}) {\n	${cursor}});\n",doc:n.redisOn,url:"https://github.com/NodeRedis/node_redis#api"}];e.registerPlugin("redis",function(){return{defs:s,passes:{completion:function(e,t){r=t},variableCompletion:function(e,n,s,a){if(r.includeTemplates||void 0===r.includeTemplates){var i=t.findCompletionKind(e.ast,s);if(i&&i.kind){var l=t.findTemplatesForKind(o,i.kind,r.ecma?r.ecma:6);l.forEach(function(e){a(e.name,null,0,function(t){t.template=e.template,t.description=e.description,t.doc=e.doc,t.url=e.url,t.type="template",t.ecma=e.ecma,t.origin="redis",t.overwrite=!0})})}}}}}});var s={"!name":"redis","!define":{"!known_modules":{redis:{createClient:"fn(port_arg: number, host_arg?: string, options?: ClientOpts) -> RedisClient",print:"fn(err: Error, reply: ?)",debug_mode:"bool",ClientOpts:"redis.ClientOpts"}}},ClientOpts:{parser:"string",return_buffers:"bool",detect_buffers:"bool",socket_nodelay:"bool",no_ready_check:"bool",enable_offline_queue:"bool",retry_max_delay:"number",connect_timeout:"number",max_attempts:"number",auth_pass:"string"},RedisClient:{on:"fn(event: string, action: fn())",connected:"bool",retry_delay:"number",retry_backoff:"number",command_queue:"[?]",offline_queue:"[?]",server_info:"ServerInfo",end:"fn()",auth:"fn(password: string, callback?: ?)",ping:"fn(callback?: ?)",append:"fn(key: string, value: string, callback?: ?)",bitcount:"fn(key: string, callback?: ?)",set:"fn(key: string, value: string, callback?: ?)",get:"fn(key: string, callback?: ?)",exists:"fn(key: string, value: string, callback?: ?)",publish:"fn(channel: string, value: ?)",subscribe:"fn(channel: string)",setnx:"fn(args: [?], callback?: ?)",setex:"fn(args: [?], callback?: ?)",strlen:"fn(args: [?], callback?: ?)",del:"fn(args: [?], callback?: ?)",setbit:"fn(args: [?], callback?: ?)",getbit:"fn(args: [?], callback?: ?)",setrange:"fn(args: [?], callback?: ?)",getrange:"fn(args: [?], callback?: ?)",substr:"fn(args: [?], callback?: ?)",incr:"fn(args: [?], callback?: ?)",decr:"fn(args: [?], callback?: ?)",mget:"fn(args: [?], callback?: ?)",rpush:"fn(args: [?])",lpush:"fn(args: [?], callback?: ?)",rpushx:"fn(args: [?], callback?: ?)",lpushx:"fn(args: [?], callback?: ?)",linsert:"fn(args: [?], callback?: ?)",rpop:"fn(args: [?], callback?: ?)",lpop:"fn(args: [?], callback?: ?)",brpop:"fn(args: [?], callback?: ?)",brpoplpush:"fn(args: [?], callback?: ?)",blpop:"fn(args: [?], callback?: ?)",llen:"fn(args: [?], callback?: ?)",lindex:"fn(args: [?], callback?: ?)",lset:"fn(args: [?], callback?: ?)",lrange:"fn(args: [?], callback?: ?)",ltrim:"fn(args: [?], callback?: ?)",lrem:"fn(args: [?], callback?: ?)",rpoplpush:"fn(args: [?], callback?: ?)",sadd:"fn(args: [?], callback?: ?)",srem:"fn(args: [?], callback?: ?)",smove:"fn(args: [?], callback?: ?)",sismember:"fn(args: [?], callback?: ?)",scard:"fn(args: [?], callback?: ?)",spop:"fn(args: [?], callback?: ?)",srandmember:"fn(args: [?], callback?: ?)",sinter:"fn(args: [?], callback?: ?)",sinterstore:"fn(args: [?], callback?: ?)",sunion:"fn(args: [?], callback?: ?)",sunionstore:"fn(args: [?], callback?: ?)",sdiff:"fn(args: [?], callback?: ?)",sdiffstore:"fn(args: [?], callback?: ?)",smembers:"fn(args: [?], callback?: ?)",zadd:"fn(args: [?], callback?: ?)",zincrby:"fn(args: [?], callback?: ?)",zrem:"fn(args: [?], callback?: ?)",zremrangebyscore:"fn(args: [?], callback?: ?)",zremrangebyrank:"fn(args: [?], callback?: ?)",zunionstore:"fn(args: [?], callback?: ?)",zinterstore:"fn(args: [?], callback?: ?)",zrange:"fn(args: [?], callback?: ?)",zrangebyscore:"fn(args: [?], callback?: ?)",zrevrangebyscore:"fn(args: [?], callback?: ?)",zcount:"fn(args: [?], callback?: ?)",zrevrange:"fn(args: [?], callback?: ?)",zcard:"fn(args: [?], callback?: ?)",zscore:"fn(args: [?], callback?: ?)",zrank:"fn(args: [?], callback?: ?)",zrevrank:"fn(args: [?], callback?: ?)",hset:"fn(args: [?], callback?: ?)",hsetnx:"fn(args: [?], callback?: ?)",hget:"fn(args: [?], callback?: ?)",hmset:"fn(args: [?], callback?: ?)",hmget:"fn(args: [?], callback?: ?)",hincrby:"fn(args: [?], callback?: ?)",hdel:"fn(args: [?], callback?: ?)",hlen:"fn(args: [?], callback?: ?)",hkeys:"fn(args: [?], callback?: ?)",hvals:"fn(args: [?], callback?: ?)",hgetall:"fn(args: [?], callback?: ?)",hexists:"fn(args: [?], callback?: ?)",incrby:"fn(args: [?], callback?: ?)",decrby:"fn(args: [?], callback?: ?)",getset:"fn(args: [?], callback?: ?)",mset:"fn(args: [?], callback?: ?)",msetnx:"fn(args: [?], callback?: ?)",randomkey:"fn(args: [?], callback?: ?)",select:"fn(args: [?], callback?: ?)",move:"fn(args: [?], callback?: ?)",rename:"fn(args: [?], callback?: ?)",renamenx:"fn(args: [?], callback?: ?)",expire:"fn(args: [?], callback?: ?)",expireat:"fn(args: [?], callback?: ?)",keys:"fn(args: [?], callback?: ?)",dbsize:"fn(args: [?], callback?: ?)",echo:"fn(args: [?], callback?: ?)",save:"fn(args: [?], callback?: ?)",bgsave:"fn(args: [?], callback?: ?)",bgrewriteaof:"fn(args: [?], callback?: ?)",shutdown:"fn(args: [?], callback?: ?)",lastsave:"fn(args: [?], callback?: ?)",type:"fn(args: [?], callback?: ?)",multi:"fn(args: [?], callback?: ?)",exec:"fn(args: [?], callback?: ?)",discard:"fn(args: [?], callback?: ?)",sync:"fn(args: [?], callback?: ?)",flushdb:"fn(args: [?], callback?: ?)",flushall:"fn(args: [?], callback?: ?)",sort:"fn(args: [?], callback?: ?)",info:"fn(args: [?], callback?: ?)",monitor:"fn(args: [?], callback?: ?)",ttl:"fn(args: [?], callback?: ?)",persist:"fn(args: [?], callback?: ?)",slaveof:"fn(args: [?], callback?: ?)",debug:"fn(args: [?], callback?: ?)",config:"fn(args: [?], callback?: ?)",unsubscribe:"fn(args: [?], callback?: ?)",psubscribe:"fn(args: [?], callback?: ?)",punsubscribe:"fn(args: [?], callback?: ?)",watch:"fn(args: [?], callback?: ?)",unwatch:"fn(args: [?], callback?: ?)",cluster:"fn(args: [?], callback?: ?)",restore:"fn(args: [?], callback?: ?)",migrate:"fn(args: [?], callback?: ?)",dump:"fn(args: [?], callback?: ?)",object:"fn(args: [?], callback?: ?)",client:"fn(args: [?], callback?: ?)",eval:"fn(args: [?], callback?: ?)",evalsha:"fn(args: [?], callback?: ?)",quit:"fn(args: [?], callback?: ?)"},createClient:"fn(port_arg: number, host_arg?: string, options?: ClientOpts) -> RedisClient",print:"fn(err: Error, reply: ?)",debug_mode:"bool",MessageHandler:{},ServerInfo:{redis_version:"string",versions:"[number]"}}}),define("javascript/ternPlugins/refs",["tern/lib/infer","tern/lib/tern","javascript/finder"],function(e,t,n){function r(r,s,i){var l,c=n.findComment(r.end,s.ast);if(c)l={guess:!1,type:void 0,name:void 0,category:"Block"===c.type?"blockcomments":"linecomments"};else{var p,u,d,h=t.findQueryExpr(s,r);try{u=t.findExprType(i,r,s,h),d=u,u=r.preferFunction?u.getFunctionType()||u.getType():u.getType(),h&&("Identifier"===h.node.type?p=h.node.name:"MemberExpression"!==h.node.type||h.node.computed||(p=h.node.property.name))}catch(f){}l={guess:e.didGuess(),type:e.toString(d),name:u&&u.name,exprName:p},o(r,s,l),u?t.storeTypeDocs(r,u,l):a(r,s,l),!l.doc&&d&&d.doc&&(l.doc=t.parseDoc(r,d.doc))}return l}function o(e,t,r){if(Array.isArray(t.ast.errors)&&t.ast.errors.length>0)return void(r.category="parseerrors");var o=n.findNode(e.end-1,t.ast,{parents:!0});if(o){if("Identifier"===o.type){var a=o.parents.pop();a.parents=o.parents,o=a}switch(o.type){case"Program":r.category="uncategorized";break;case"FunctionDeclaration":case"FunctionExpression":for(var i=0,l=o.params.length;l>i;i++)if(s(e.end,o.params[i])){r.category="vardecls";break}r.category||(r.category="funcdecls");break;case"Property":s(e.end,o.key)?r.category=o.value&&"FunctionExpression"===o.value.type?"funcdecl":"propwrite":s(e.end,o.value)&&(r.category="FunctionExpression"===o.value.type?"funcdecls":"Identifier"===o.value.type?"varaccess":"propwrite");break;case"CallExpression":if(s(e.end,o.callee)&&(r.category="funccalls"),o.arguments.length>0)for(i=0,l=o.arguments.length;l>i;i++){var c=o.arguments[i];s(e.end,c)&&("Identifier"===c.type?r.category="varaccess":"MemberExpression"===c.type&&(r.category="propaccess"))}break;case"AssignmentExpression":s(e.end,o.left)?r.category="Identifier"===o.left.type?"varwrite":"propwrite":s(e.end,o.right)&&("Identifier"===o.right.type?r.category="varaccess":"MemberExpression"===o.right.type&&(r.category="propaccess"));break;case"VariableDeclarator":s(e.end,o.id)?r.category="vardecls":s(e.end,o.init)&&(r.category="varaccess");break;case"Literal":o.regex?r.category="regex":"string"==typeof o.value&&(r.category="strings");break;case"NewExpression":o.callee&&s(e.end,o.callee)&&(r.category="funccalls");break;case"MemberExpression":if(o.object&&"Identifier"===o.object.type&&s(e.end,o.object)){r.category="varaccess";break}for(var p;"MemberExpression"===o.type;)p=o.property,a=o.parents.pop(),a.parents=o.parents,o=a;if(o&&("CallExpression"===o.type||"NewExpression"===o.type)&&s(e.end,p)){if(o.callee&&s(e.end,o.callee))r.category="funccalls";else if(o.arguments&&o.arguments.length>0)for(i=0,l=o.arguments.length;l>i;i++)s(e.end,o.arguments[i])&&(r.category="propaccess")}else r.category=o&&"AssignmentExpression"===o.type&&s(e.end,o.left)?o.right&&"FunctionExpression"===o.right.type?"funcdecls":s(e.end,p)?"propwrite":"propaccess":"propaccess";break;case"UpdateExpression":"Identifier"===o.argument.type?r.category="varaccess":"MemberExpression"===o.argument.type&&(r.category="propaccess");break;case"BinaryExpression":"Identifier"===o.left.type&&s(e.end,o.left)?r.category="varaccess":"Identifier"===o.right.type&&s(e.end,o.right)&&(r.category="varaccess");break;case"BreakStatement":case"ConditionalExpression":case"ContinueStatement":case"IfStatement":case"DoWhileStatement":case"ForInStatement":case"ForStatement":case"LogicalExpression":case"SwitchStatement":case"SwitchCase":case"WithStatement":case"WhileStatement":r.category="varaccess";break;case"LetStatement":case"LabeledStatement":r.category="varwrite";break;case"Block":r.category="blockcomments";break;case"Line":r.category="linecomments";break;case"UnaryExpression":o.argument&&s(e.end,o.argument)&&(r.category="varaccess")}}r.category||(r.category="uncategorized")}function s(e,t){return t&&t.range[0]<=e&&e<=t.range[1]}function a(e,t,r){var o=n.findNode(e.end,t.ast,{parents:!0});o?i(e,o,r):r.staticCheck={confidence:0}}function i(e,t,n){switch(t.type){case"FunctionDeclaration":case"FunctionExpression":case"VariableDeclarator":case"Literal":n.staticCheck={confidence:0};break;case"Identifier":if(Array.isArray(t.parents)){var r=t.parents.slice(t.parents.length-1)[0];i(e,r,n)}else n.staticCheck={confidence:25};break;case"AssignmentExpression":n.staticCheck="Identifier"===t.left.type&&t.left.name===e.origin.type.exprName?{confidence:25}:"Identifier"===t.right.type&&t.right.name===e.origin.type.exprName?{confidence:25}:{confidence:5};break;case"MemberExpression":n.staticCheck={confidence:10};break;case"CallExpression":t.callee.name===e.origin.type.exprName&&(n.staticCheck="fn()"===e.origin.type.type?{confidence:25}:{confidence:0});for(var o=0,s=t.arguments.length;s>o;o++){var a=t.arguments[o];"Identifier"===a.type?n.staticCheck="fn()"===e.origin.type.type?{confidence:0}:{confidence:40}:"FunctionExpression"===a.type&&a.id===e.origin.type.exprName&&(n.staticCheck={confidence:0})}break;default:n.staticCheck={confidence:0}}}t.registerPlugin("refs",function(){return{}}),t.defineQueryType("checkRef",{takesFile:!0,run:function(e,t,n){return r(t,n,e)}})}),define("javascript/ternPlugins/templates",["tern/lib/tern","javascript/finder","i18n!javascript/nls/messages"],function(e,t,n){var r,o={type:"link",values:["boolean","function","number","object","string","symbol","undefined"],title:n.typeofOptions,style:"emphasis"},s=[{prefix:"if",name:"if statement",nodes:{top:!0,member:!1,prop:!1},template:"if (${condition}) {\n	${cursor}\n}",url:"https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Statements/if...else",doc:n.ifSimple,ecma:5},{prefix:"if",name:"if..else statement",nodes:{top:!0,member:!1,prop:!1},template:"if (${condition}) {\n	${cursor}\n} else {\n	\n}",url:"https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Statements/if...else",doc:n.ifElseSimple,ecma:5},{prefix:"for",name:"for statement",nodes:{top:!0,member:!1,prop:!1},template:"for (var ${i} = 0; ${i} < ${array}.length; ${i}++) {\n	${cursor}\n}",url:"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for",doc:n.forArray,ecma:5},{prefix:"for",name:"for statement (with loop variable)",nodes:{top:!0,member:!1,prop:!1},template:"for (var ${i} = 0; ${i} < ${array}.length; ${i}++) {\n	var ${value} = ${array}[${i}];\n	${cursor}\n}",url:"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for",doc:n.forArrayVar,ecma:5},{prefix:"for",name:"for..in statement",nodes:{top:!0,member:!1,prop:!1},template:"for (var ${property} in ${object}) {\n	if (${object}.hasOwnProperty(${property})) {\n		${cursor}\n	}\n}",url:"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...in",doc:n.forInSimple,ecma:5},{prefix:"while",name:"while statement",nodes:{top:!0,member:!1,prop:!1},template:"while (${condition}) {\n	${cursor}\n}",url:"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/while",doc:n.whileSimple,ecma:5},{prefix:"do",name:"do..while statement",nodes:{top:!0,member:!1,prop:!1},template:"do {\n	${cursor}\n} while (${condition});",url:"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/do...while",doc:n.doSimple,ecma:5},{prefix:"eslint",name:"eslint",nodes:{top:!0,member:!1,prop:!1,doc:!1,jsdoc:!1},template:"/* eslint ${rule-id}:${0/1}*/",url:"http://eslint.org/docs/user-guide/configuring.html#configuring-rules",doc:n.eslintRuleEnableDisable,ecma:5},{prefix:"eslint-env",name:"eslint-env",nodes:{top:!0,member:!1,prop:!1,doc:!1,jsdoc:!1},template:"/* eslint-env ${library}*/",url:"http://eslint.org/docs/user-guide/configuring.html#specifying-environments",doc:n.eslintEnvDirective,ecma:5},{prefix:"eslint-enable",name:"eslint-enable",nodes:{top:!0,member:!1,prop:!1,doc:!1,jsdoc:!1},template:"/* eslint-enable ${rule-id} */",url:"http://eslint.org/docs/user-guide/configuring.html#configuring-rule",doc:n.eslintRuleEnable,ecma:5},{prefix:"eslint-disable",name:"eslint-disable",nodes:{top:!0,member:!1,prop:!1,doc:!1,jsdoc:!1},template:"/* eslint-disable ${rule-id} */",url:"http://eslint.org/docs/user-guide/configuring.html#configuring-rules",doc:n.eslintRuleDisable,ecma:5},{prefix:"switch",name:"switch statement",nodes:{top:!0,member:!1,prop:!1},template:"switch (${expression}) {\n	case ${value1}:\n		${cursor}\n		break;\n	default:\n		break;\n}",url:"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/switch",doc:n.switchSimple,ecma:5},{prefix:"case",name:"case statement",nodes:{top:!0,member:!1,prop:!1,swtch:!0},template:"case ${value}:\n	${cursor}\n	break;",url:"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/switch",doc:n.caseSimple,ecma:5},{prefix:"try",name:"try..catch statement",nodes:{top:!0,member:!1,prop:!1},template:"try {\n	${cursor}\n} catch (${err}) {\n}",url:"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/try...catch",doc:n.tryCatch,ecma:5},{prefix:"try",name:"try..catch..finally statement",nodes:{top:!0,member:!1,prop:!1},template:"try {\n	${cursor}\n} catch (${err}) {\n} \n finally {\n}",url:"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/try...catch",doc:n.tryCatchFinally,ecma:5},{prefix:"typeof",name:"typeof expression",nodes:{top:!0,member:!1,prop:!1},template:'typeof ${object} === "${type:'+JSON.stringify(o).replace("}","\\}")+'}"',url:"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/typeof",doc:n.typeofSimple,ecma:5},{prefix:"instanceof",name:"instanceof expresion",nodes:{top:!0,member:!1,prop:!1},template:"${object} instanceof ${type}",url:"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/instanceof",doc:n.instanceofSimple,ecma:5},{prefix:"with",name:"with statement",nodes:{top:!0,member:!1,prop:!1},template:"with (${object}) {\n	${cursor}\n}",url:"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/with",doc:n.withSimple,ecma:5},{prefix:"function",name:"function declaration",nodes:{top:!0,member:!1,prop:!1},template:"/**\n * @param ${parameter}\n */\nfunction ${name} (${parameter}) {\n	${cursor}\n}",url:"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/function",doc:n.functionSimple,ecma:5},{prefix:"function",name:"function expression (as object property)",nodes:{top:!1,member:!1,prop:!1,obj:!0},template:"/**\n * @name ${name}\n * @function\n * @param ${parameter}\n */\n${name}: function(${parameter}) {\n	${cursor}\n}",url:"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/function",doc:n.functionProp,ecma:5},{prefix:"function",name:"function expression (as property value)",nodes:{top:!1,member:!1,prop:!0,obj:!1},template:"function(${parameter}) {\n	${cursor}\n}",url:"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/function",doc:n.functionProp,ecma:5},{prefix:"define",name:"define function call",nodes:{top:!0,member:!1,prop:!1},template:"/* eslint-env amd */\ndefine('${name}', [\n'${import}'\n], function(${importname}) {\n	${cursor}\n});",url:"http://requirejs.org/docs/api.html#deffunc",doc:n.defineSimple,ecma:5},{prefix:"nls",name:"nls comment",nodes:{top:!0,member:!1,prop:!1},template:"${cursor} //$NON-NLS-${0}$",doc:n.nlsSimple,ecma:5},{prefix:"log",name:"log function call",nodes:{top:!0,member:!1,prop:!1},template:"console.log(${object});",url:"https://developer.mozilla.org/en/docs/Web/API/Console/log",doc:n.logSimple,ecma:5},{prefix:"require",name:"require function call",nodes:{top:!0,member:!1,prop:!1,doc:!1,jsdoc:!1},template:"var lib = require('${cursor}');",url:"https://nodejs.org/api/modules.html#modules_modules",doc:n.requireSimple,ecma:5},{prefix:"arrow",name:"arrow expression",nodes:{top:!0,member:!1,prop:!1},template:"${param} => {${cursor}}",url:"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions",doc:n.arrowFunc,ecma:6},{prefix:"arrow",name:"arrow expression with object",nodes:{top:!0,member:!1,prop:!1},template:"var ${name} = () => ({ ${prop}: ${val}${cursor} });",url:"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions",doc:n.arrowFuncObj,ecma:6},{prefix:"class",name:"class definition",nodes:{top:!0,member:!1,prop:!1},template:"class ${name} extends ${superClass}; {\n	constructor() {\n		${cursor}\n	}\n}\n",url:"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes",doc:n.classSimple,ecma:6},{prefix:"class",name:"class expression",nodes:{top:!0,member:!1,prop:!1},template:"var ${name} = class ${className} extends ${superClass}; {\n	constructor() {\n		${cursor}\n	}\n}\n",url:"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/class",doc:n.classExpr,ecma:6},{prefix:"const",name:"const expression",nodes:{top:!0,member:!1,prop:!1},template:"const ${name} = ${value};",url:"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/const",doc:n.constSimple,ecma:6},{prefix:"export",name:"export statement",nodes:{top:!0,member:!1,prop:!1},template:"export ${value};",url:"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/export",doc:n.exportSimple,ecma:6},{prefix:"export",name:"export statement (as default)",nodes:{top:!0,member:!1,prop:!1},template:"export default ${value};",url:"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/export",doc:n.exportDefault,ecma:6},{prefix:"for",name:"for..of statement",nodes:{top:!0,member:!1,prop:!1},template:"for (${variable} of ${iterable}) {\n    ${cursor}\n}",url:"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...of",doc:n.forOf,ecma:6},{prefix:"function*",name:"function declaration (generator)",nodes:{top:!0,member:!1,prop:!1},template:"function* ${name}(${param}) {\n    ${cursor}\n}",url:"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/function*",doc:n.funcGenerator,ecma:6},{prefix:"import",name:"import statement (default member)",nodes:{top:!0,member:!1,prop:!1},template:'import ${member} from "${module}";',url:"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import",doc:n.importSimpleDefault,ecma:6},{prefix:"import",name:"import statement (all as star)",nodes:{top:!0,member:!1,prop:!1},template:'import * as ${name} from "${module}";',url:"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import",doc:n.importStarAs,ecma:6},{prefix:"import",name:"import statement (multiple members)",nodes:{top:!0,member:!1,prop:!1},template:'import { ${member1} , ${member2} } from "${module}";',url:"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import",doc:n.importMultiMember,ecma:6},{prefix:"import",name:"import statement (module only)",nodes:{top:!0,member:!1,prop:!1},template:'import "${module}"',url:"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import",doc:n.importSideEffects,ecma:6},{prefix:"let",name:"let expression",nodes:{top:!0,member:!1,prop:!1},template:"let ${name} = ${value};",url:"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let",doc:n.letSimple,ecma:6},{prefix:"yield",name:"yield expression",nodes:{top:!0,member:!1,prop:!1},template:"yield ${expression};",url:"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/yield",doc:n.yieldSimple,ecma:6},{prefix:"yield",name:"yield expression with return",nodes:{top:!0,member:!1,prop:!1},template:"${value} = yield ${expression};",url:"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/yield",doc:n.yieldSimpleReturn,ecma:6},{prefix:"yield*",name:"yield expression delegate",nodes:{top:!0,member:!1,prop:!1},template:"yield* ${gennerator};",url:"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/yield*",doc:n.yieldDelegate,ecma:6}];e.registerPlugin("templates",function(){return{passes:{completion:function(e,t){r=t},variableCompletion:function(e,n,o,a){if(r.includeTemplates||void 0===r.includeTemplates){var i=t.findCompletionKind(e.ast,o);if(i&&i.kind){var l=t.findTemplatesForKind(s,i.kind,r.ecma?r.ecma:6);l.forEach(function(e){a(e.name,null,0,function(t){t.template=e.template,t.doc=e.doc,t.url=e.url,t.type="template",t.ecma=e.ecma,t.overwrite=!0})})}}}}}})}),define("javascript/ternPlugins/quickfixes",["javascript/finder","tern/lib/tern"],function(e,t){function n(e,t){var n=x[e.problemId];if("function"==typeof n){var r=n.call(this,e.annotation,e.annotations,t);if(Array.isArray(r))return r;if(r)return[r]}return[]}function r(e,t){if(!e)return 0;if(0>t)return 0;for(var n=t,r=e[n];n>-1&&!/[\r\n]/.test(r);)r=e[--n];return n+1}function o(e,t){if(!e)return 0;if(0>t)return 0;for(var n=t,r=e[n];n<e.length&&!/[\r\n]/.test(r);)r=e[++n];return n}function s(e,t,n){if(!e||0>t)return"";for(var r=t,o=e[r],s=n?"	":"";" "===o||"	"===o;)s+=o,o=e[++r];return s}function a(e,t,n){if(!e||!t)return"";for(var r=t.start,o=e[r],s="",a=!1;r>=t.start&&r<=t.end;){if("\n"===o){a=!0;break}o=e[r++]}return a||(s+="\n"),"undefined"!=typeof n&&(s+=n),s}function i(e,t){return"*"===e.charAt(t+1)?"*"===e.charAt(t+2)?3:2:0}function l(e,t,n,r){return r&&""!==e.slice(t.length).trim()?e.trim()+", "+n:e.trim()+" "+n}function c(e,t,n){var r=e.indexOf(n,t.length);if(r>=0){var o=r+n.length;return","===e[o]&&o++,e.slice(0,r).trim()===t&&""===e.slice(o).trim()?{all:!0,start:r,end:o}:{start:r,end:o}}return null}function p(e,t){if(e&&e.length)for(var n=0;n<e.length;n++){var r=e[n];if(r&&t.range[0]===r.range[0]&&t.range[1]===r.range[1])return n}return-1}function u(e,t,n,r){if(!(0>t||t>e.length)){var o=e[t];return 1===e.length?{start:o.range[0],end:r?r.range[1]-1:o.range[1],text:""}:t===e.length-1?{start:e[t-1].range[1],end:r?r.range[1]-1:o.range[1],text:""}:o?0===t?1===e.length?{start:o.range[0],end:o.range[1],text:""}:{start:o.range[0],end:e[t+1].range[0],text:""}:n?{start:e[t-1].range[1],end:e[t+1].range[0],text:""}:{start:e[t-1].range[1],end:o.range[1],text:""}:null}}function d(e,t,n){if(e.leadingComments&&e.leadingComments.length>0)for(var r=e.leadingComments.length-1;r>-1;r--){var o=e.leadingComments[r],s=new RegExp("(\\s*[*]+\\s*(?:@param)\\s*(?:\\{.*\\})?\\s*(?:"+n+")+.*)").exec(o.value);if(s){var a=o.range[0]+s.index+i(t,o.range[0]);return{start:a,end:a+s[1].length,text:""}}}return null}function h(e,t){if(t.leadingComments)for(var n=0;n<t.leadingComments.length;n++)for(var r=t.leadingComments[n],o=0,s=e.length;s>o;o++){var a=e[o];if(r.value.indexOf(a)>-1)return!0}return!1}function f(e){if("Program"===e.type&&e.body&&e.body.length>0){var t=e.body[0],n=-1;switch(t.type){case"FunctionDeclaration":return n=b(t),n>-1?n:(n=b(t.id),n>-1?n:t.range[0]);case"ExpressionStatement":return t.expression&&t.expression.right&&"FunctionExpression"===t.expression.right.type?(n=b(t),n>-1?n:(n=b(t.expression.left),n>-1?n:t.range[0])):t.range[0]}return t.range[0]}return e.range[0]}function m(e){return"Program"===e.type?e.body&&e.body.length>0?e.body[0].start:e.end:0}function g(e){var t=m(e),n=t;return e.comments&&e.comments.length>0&&(n=e.comments[0].range[0]),Math.min(t,n)}function b(e){if(e.leadingComments&&e.leadingComments.length>0){var t=e.leadingComments[e.leadingComments.length-1];if(/(?:@param|@return|@returns|@type|@constructor|@name|@description)/gi.test(t.value))return t.range[0]}return-1}function y(e){if(!e||!e.parents)return null;for(var t=e.parents.length-1,n=e.parents[t];n&&t>-1;){if(_.indexOf(n.type)>-1)return n;n=e.parents[--t]}}function v(e,t){var n=[];e.forEach(function(e){var r=t(e);r&&(Array.isArray(r)?r.forEach(function(e){n.push(e)}):n.push(r))}),n=n.sort(function(e,t){return e.start-t.start});for(var r=[],o=!1,s=0;s<n.length;s++){if(s===n.length-1&&!o){r.push(n[s]);break}if(s===n.length-1)break;var a=o?r.pop():n[s],i=n[s+1];a.end>=i.start?(r.push({start:a.start,end:i.end,text:a.text+i.text}),o=!0):(r.push(a),o=!1)}return r}t.registerPlugin("quickfixes",function(){return{}}),t.defineQueryType("fixes",{takesFile:!0,run:function(e,t,r){return n(t,r)}});var x={radix:function(t,n,r){return v(n,function(t){var n=e.findNode(t.start,r.ast,{parents:!0});if(n&&"Identifier"===n.type&&(n=n.parents[n.parents.length-1],"CallExpression"===n.type&&Array.isArray(n.arguments))){var o=n.arguments[n.arguments.length-1];return{text:", 10",start:o.range[1],end:o.range[1]}}})},curly:function(t,n,a){var i=e.findToken(t.start,a.ast.tokens);if(i){i=a.ast.tokens[i.index-1];for(var l=i.range[1],c=i.range[1],p=t.end,u=!1;l<t.start;){if("\n"===a.ast.sourceFile.text.charAt(l)){u=!0;break}l++}var d=" {"+a.ast.sourceFile.text.slice(c,p);if(u){var h=e.findNode(t.start,a.ast,{parents:!0});if(h){var f=h.parents[h.parents.length-1],m=r(a.ast.sourceFile.text,f.range[0]),g=y(h);g&&(m=r(a.ast.sourceFile.text,g.range[0]));var b=o(a.ast.sourceFile.text,p),v="",x=e.findNodesForRange(a.ast,p,b);b>p&&x.length<1&&(v+=a.ast.sourceFile.text.slice(p,b),p=b),d+=v+"\n"+s(a.ast.sourceFile.text,m,0)+"}"}}else d+=" }";return{text:d,start:c,end:p}}},"no-new-wrappers":function(t,n,r){var o=e.findNode(t.start,r.ast,{parents:!0});if(o){var s=o.parents[o.parents.length-1];if("NewExpression"===s.type){var a=e.findToken(s.range[0],r.ast.tokens);if(a&&"Keyword"===a.type&&"new"===a.value){var i="",l=a.range[1],c=a.range[0],p=r.ast.tokens[a.index-1];return p.range[1]<a.range[0]?(l=o.range[0],c=p.range[1]+1):o.range[0]-l>1&&(l+=o.range[0]-l-1),("Math"===s.callee.name||"JSON"===s.callee.name)&&(l=s.range[1],i=s.callee.name),{text:i,start:c,end:l}}}}},"no-new-wrappers-literal":function(t,n,r){var o=e.findNode(t.start,r.ast,{parents:!0});if(o){var s=o.parents[o.parents.length-1];if("NewExpression"===s.type)switch(s.callee.name){case"Math":case"JSON":return{text:s.callee.name,start:s.range[0],end:s.range[1]};case"String":var a="";if(s.arguments.length>0){var i=s.arguments[0];"Literal"===i.type?a=String(i.value):"Identifier"===i.type&&(a=String("undefined"===i.name?void 0:"NaN"===i.name?0/0:i.name))}else a=String();return{text:'"'+a.toString()+'"',start:s.range[0],end:s.range[1]};case"Number":var l;if(s.arguments.length>0){var c=s.arguments[0];l=Number("Literal"===c.type?c.value:"Identifier"===c.type?"undefined"===c.name?void 0:"NaN"===c.name?0/0:c.name:c)}else l=Number();return{text:l.toString(),start:s.range[0],end:s.range[1]};case"Boolean":var p;if(s.arguments.length>0){var u=s.arguments[0];"ObjectExpression"===u.type?p=!0:"Literal"===u.type?p=Boolean(u.value):"Identifier"===u.type?p=Boolean("undefined"===u.name?void 0:"NaN"===u.name?0/0:u.name):"UnaryExpression"===u.type&&"-"===u.operator&&"Literal"===u.argument.type&&"number"==typeof u.argument.value&&(p=!1)}else p=!1;return{text:p.toString(),start:s.range[0],end:s.range[1]}}}},"no-debugger":function(t,n,r){return v(n,function(t){var n=t.end,o=e.findToken(t.end,r.ast.tokens);
return o&&"Punctuator"===o.type&&";"===o.value&&(n=o.range[1]),{text:"",start:t.start,end:n}})},eqeqeq:function(e,t){return v(t,function(e){var t=/^.*\'(\!==|===)\'/.exec(e.title);return{text:t[1],start:e.start,end:e.end}})},"no-eq-null":function(e,t){return v(t,function(e){var t=/^.*\'(\!==|===)\'/.exec(e.title);return{text:t[1],start:e.start,end:e.end}})},"no-undef-init":function(t,n,r){return v(n,function(t){var n=e.findNode(t.start,r.ast,{parents:!0});if(n){var o=n.parents[n.parents.length-1];if("VariableDeclarator"===o.type)return{text:"",start:o.id.range[1],end:o.range[1]}}})},"no-self-assign":function(t,n,r){return v(n,function(t){var n=e.findNode(t.start,r.ast,{parents:!0});if(n){var o=n.parents[n.parents.length-1];switch(o.type){case"AssignmentExpression":var s=o.range[1],a=r.ast.tokens,i=e.findToken(s,a);return i&&(("Punctuator"!==i.type||";"!==i.value)&&a.length>i.index+1&&(i=a[i.index+1]),i&&"Punctuator"===i.type&&";"===i.value&&(s=i.range[1])),{text:"",start:o.range[0],end:s};case"VariableDeclarator":var l=o;return{text:"",start:l.id.range[1],end:l.range[1]}}}})},"new-parens":function(t,n,r){var o=e.findNode(t.start,r.ast,{parents:!0});return o&&"Identifier"===o.type?{text:"()",start:o.range[1],end:o.range[1]}:void 0},"missing-nls":function(e,t,n){return v(t,function(e){if(e.data&&"number"==typeof e.data.indexOnLine){var t=o(n.ast.sourceFile.text,e.end),r=" //$NON-NLS-"+(e.data.indexOnLine+1)+"$";return{text:r,start:t,end:t}}})},"no-comma-dangle":function(e,t){return v(t,function(e){var t=e.end;return e.start+1!==t&&(t=e.start+1),{text:"",start:e.start,end:t}})},"no-empty-block":function(e,t,n){var o=r(n.ast.sourceFile.text,e.start),i="//TODO empty block",l=s(n.ast.sourceFile.text,o,!0);return i="\n"+l+i,i+=a(n.ast.sourceFile.text,e),{text:i,start:e.start+1,end:e.start+1}},"no-extra-parens":function(t,n,r){return v(n,function(t){var n=r.ast.tokens,o=e.findToken(t.start,n),s=n[o.index-1];if("("===s.value){var a=e.findToken(t.end,n);if(")"!==a.value&&n.length>a.index+1&&(a=n[a.index+1]),")"===a.value){var i="";if(o.index>=2){var l=r.ast.tokens[o.index-2];l.range[1]!==s.range[0]||"Identifier"!==l.type&&"Keyword"!==l.type||o.range[0]===s.range[1]&&(i=" ")}return[{text:i,start:s.range[0],end:s.range[1]},{text:"",start:a.range[0],end:a.range[1]}]}}})},"no-extra-semi":function(e,t){return v(t,function(e){return{text:"",start:e.start,end:e.end}})},"no-fallthrough":function(e,t,n){var o=r(n.ast.sourceFile.text,e.start),i="//$FALLTHROUGH$",l=s(n.ast.sourceFile.text,o);return i+=a(n.ast.sourceFile.text,e,l),{text:i,start:e.start,end:e.start}},"no-fallthrough-break":function(e,t,n){var o=r(n.ast.sourceFile.text,e.start),i="break;",l=s(n.ast.sourceFile.text,o);return i+=a(n.ast.sourceFile.text,e,l),{text:i,start:e.start,end:e.start}},"no-new-array":function(t,n,r){var o=e.findNode(t.start,r.ast,{parents:!0});if(o&&o.parents){var s=o.parents[o.parents.length-1];if("CallExpression"===s.type||"NewExpression"===s.type){var a="";if(s.arguments.length>0){var i=s.arguments[0].range[0],l=s.arguments[s.arguments.length-1].range[1];a+="["+r.ast.sourceFile.text.substring(i,l)+"]"}else a+="[]";return{text:a,start:s.start,end:s.end}}}},"no-reserved-keys":function(t,n,r){return v(n,function(t){var n=e.findNode(t.start,r.ast,{parents:!0});if(n&&"Identifier"===n.type){var o=n.parents.pop();return o&&"MemberExpression"===o.type?{text:'["'+n.name+'"]',start:o.object.range[1],end:n.range[1]}:{text:'"'+n.name+'"',start:n.range[0],end:n.range[1]}}})},"no-throw-literal":function(t,n,r){var o=e.findNode(t.start,r.ast,{parents:!0}),s=o.raw||r.ast.sourceFile.text.slice(o.range[0],o.range[1]);return{text:"new Error("+s+")",start:t.start,end:t.end}},"no-undef-defined":function(t,n,o){function a(e){if(e&&e.parents&&e.parents.length>0&&"Identifier"===e.type){var t=e.parents.pop();return t&&("AssignmentExpression"===t.type||"UpdateExpression"===t.type)}return!1}var i=t.data;if(i&&"object"==typeof i&&(i=i.data),null!==i&&"undefined"!=typeof i){var c=null,p=0,u=i,d=e.findNode(t.start,o.ast,{parents:!0});if(a(d)&&(u+=":true"),c=e.findDirective(o.ast,"globals"))return p=c.range[0]+2,{text:l(c.value,"globals",u),start:p,end:p+c.value.length};var h=f(o.ast),m=r(o.ast.sourceFile.text,h),g=s(o.ast.sourceFile.text,m,!1),b="/*globals "+u+" */\n"+g;return{text:b,start:h,end:h}}},"no-undef-defined-inenv":function(t,n,o){function a(t){switch(t){case"require":if(o.ast.environments){if(o.ast.environments.node&&!o.ast.environments.amd)return"node";if(o.ast.environments.node&&o.ast.environments.amd)return"amd";if(o.ast.environments.amd)return"amd"}break;case"console":if(o.ast.environments)return o.ast.environments.node&&!o.ast.environments.amd?"node":"browser"}return e.findESLintEnvForMember(t)}var c=t.data;if(c&&"object"==typeof c&&(c=c.data),c){var p=null,u=0,d=a(c);if(d){if(p=e.findDirective(o.ast,"eslint-env"))return u=i(o.ast.sourceFile.text,p.range[0])+p.range[0],{text:l(p.value,"eslint-env",d,!0),start:u,end:u+p.value.length};var h=f(o.ast),m=r(o.ast.sourceFile.text,h),g=s(o.ast.sourceFile.text,m,!1),b="/*eslint-env "+d+" */\n"+g;return{text:b,start:h,end:h}}}},"unknown-require-missing-env":function(t,n,o){var a=t.data;if(a&&"object"==typeof a&&(a=a.data),"string"==typeof a){var c,p=e.findDirective(o.ast,"eslint-env");if(p)return c=i(o.ast.sourceFile.text,p.range[0])+p.range[0],{text:l(p.value,"eslint-env",a,!0),start:c,end:c+p.value.length};var u=f(o.ast),d=r(o.ast.sourceFile.text,u),h=s(o.ast.sourceFile.text,d,!1),m="/*eslint-env "+a+" */\n"+h;return{text:m,start:u,end:u}}},"no-unreachable":function(e){return{text:"",start:e.start,end:e.end}},"no-unused-params":function(t,n,r){var o=!1,s={};return v(n,function(t){if(!o){for(var a=n.length-1;a>=0;a--){var i=n[a],l=e.findNode(i.start,r.ast,{parents:!0}),c=l.parents.pop();if(c){var p=c.start.toString()+":"+c.end.toString();(s[p]||!(s[p]=0))&&(s[p]+=1)}}o=!0}var h=e.findNode(t.start,r.ast,{parents:!0});if(h){var f=[],m=h.parents.pop(),g=m.start.toString()+":"+m.end.toString(),b=-1,y=!1;for(a=0;a<m.params.length;a++){var v=m.params[a];if(h.range[0]===v.range[0]&&h.range[1]===v.range[1]){b=a;break}}1===b&&s[g]===m.params.length-1&&(y=!0);var x=u(m.params,b,y);switch(x&&f.push(x),m.type){case"FunctionExpression":var _=h.parents.pop();if("CallExpression"!==_.type||"define"!==_.callee.name&&"require"!==_.callee.name)"Property"===_.type&&_.key.leadingComments&&_.key.leadingComments.length>0?(x=d(_.key,r.ast.sourceFile.text,m.params[b].name),x&&f.push(x)):"Property"===_.type&&_.leadingComments&&_.leadingComments.length>0&&(x=d(_,r.ast.sourceFile.text,m.params[b].name),x&&f.push(x));else{var S=_.arguments;for(a=0;a<S.length;a++){var w=S[a];if("ArrayExpression"===w.type){x=1===w.elements.length?{start:w.range[0],end:w.range[1],text:"[]"}:u(w.elements,b,!1,w),x&&f.push(x);break}}}break;case"FunctionDeclaration":x=d(m,r.ast.sourceFile.text,m.params[b].name),x&&f.push(x)}return f}})},"no-unused-params-expr":function(t,n,o){function a(e,t,n){if(Array.isArray(n)){var o=n[n.length-1];if("Block"===o.type){var a=o.range[0]+o.value.length+i(t.sourceFile.text,o.range[0]),l=r(t.sourceFile.text,a),c=s(t.sourceFile.text,l),p="* @callback\n"+c;return{text:p,start:a-1,end:a-1}}}return l=r(t.sourceFile.text,e.range[0]),c=s(t.sourceFile.text,l),{text:"/**\n"+c+" * @callback\n"+c+" */\n"+c,start:e.range[0],end:e.range[0]}}var l=e.findNode(t.start,o.ast,{parents:!0});if(l&&l.parents&&l.parents.length>0){var c,p=l.parents.pop(),u=l.parents.pop();switch(u.type){case"Property":h(["@callback","@public"],u)||h(["@callback","@public"],u.key)||(c=a(u,o.ast,u.leadingComments?u.leadingComments:u.key.leadingComments));break;case"AssignmentExpression":var d=u.left,f=null;l.parents.length>0&&(f=l.parents.pop()),null===f&&(f=d),"MemberExpression"!==d.type||h(["@callback","@public"],f)?"Identifier"!==d.type||h(["@callback","@public"],f)||(c=a(u.left,o.ast,f.leadingComments)):c=a(d,o.ast,f.leadingComments);break;case"VariableDeclarator":var m=u;if(u=l.parents.pop(),u.declarations[0].range[0]===m.range[0]&&u.declarations[0].range[1]===m.range[1]){var g=m.leadingComments;g||(g=u.leadingComments),c=a(u,o.ast,g)}else h(["@callback","@public"],m.id)||(c=a(m,o.ast,m.leadingComments))}if(!c&&!h(["@callback","@public"],p))return{text:"/* @callback */ ",start:p.range[0],end:p.range[0]}}return c},"no-unused-vars-unused":function(t,n,r){var o=e.findNode(t.start,r.ast,{parents:!0});if(o&&o.parents&&o.parents.length>0){var s=o.parents.pop();if("VariableDeclarator"===s.type){var a=o.parents.pop();if("VariableDeclaration"===a.type){if(1===a.declarations.length)return{text:"",start:a.range[0],end:a.range[1]};var i=p(a.declarations,s);if(i>-1){var l=u(a.declarations,i);if(l)return{text:l.text,start:l.start,end:l.end}}}}else if("ClassDeclaration"===s.type)return{text:"",start:s.range[0],end:s.range[1]}}},"no-unused-vars-unread":function(t,n,r){function o(e,t,n){if(0===n.length)return null;var r,s,a,i;switch(e.type){case"VariableDeclarator":return o(n.pop(),e,n);case"VariableDeclaration":if(1===e.declarations.length)return{text:"",start:e.range[0],end:e.range[1]};if(r=p(e.declarations,t),r>-1&&(s=u(e.declarations,r)))return{text:s.text,start:s.start,end:s.end};break;case"ArrayPattern":var l=e.elements;if(1===l.length)return o(n.pop(),e,n);var c=p(l,t);if(c>-1){var d=l[c];if(d)return{text:"",start:d.range[0],end:d.range[1]}}break;case"Identifier":return o(n.pop(),e,n);case"Property":return o(n.pop(),e,n);case"ObjectPattern":if(a=e.properties,1===a.length)return o(n.pop(),e,n);if(i=p(a,t),i>-1&&(s=u(a,i)))return{text:s.text,start:s.start,end:s.end}}return null}var s=e.findNode(t.start,r.ast,{parents:!0});if(s&&s.parents&&s.parents.length>0){var a=o(s,null,s.parents);if(a)return a}},"no-unused-vars-unused-funcdecl":function(t,n,r){var o=e.findNode(t.start,r.ast,{parents:!0});if(o&&o.parents&&o.parents.length>0){var s=o.parents.pop();if("FunctionDeclaration"===s.type)return{text:"",start:s.range[0],end:s.range[1]}}},"use-isnan":function(t,n,r){return v(n,function(t){var n=e.findNode(t.start,r.ast,{parents:!0});if(n&&n.parents&&n.parents.length>0){var o=n.parents.pop();if("BinaryExpression"===o.type){var s;if("Identifier"===o.left.type&&"NaN"===o.left.name?s=o.right:"Identifier"===o.right.type&&"NaN"===o.right.name&&(s=o.left),s){var a=r.ast.sourceFile.text.slice(s.range[0],s.range[1]),i="";return"!"===o.operator.charAt(0)&&(i="!"),{text:i+"isNaN("+a+")",start:o.range[0],end:o.range[1]}}}}})},semi:function(e,t){return v(t,function(e){if(e.data)switch(e.data.kind){case"missing":return{text:";",start:e.end,end:e.end};case"extra":return{text:"",start:e.start,end:e.end}}})},"unnecessary-nls":function(t,n,r){return v(n,function(t){var n=e.findComment(t.start+2,r.ast),o=t.data.nlsComment;if(n&&"line"===n.type.toLowerCase()&&o){var s=n.value.indexOf(o);if(s>0){for(var a=t.start;" "===r.ast.sourceFile.text.charAt(a-1)||"	"===r.ast.sourceFile.text.charAt(a-1);)a--;return{text:"",start:a,end:t.end}}if(0===s){var i=n.value.substring(s+o.length);a=t.start;var l=t.end;if(i.match(/^(\s*|\s*\/\/.*)$/))for(;" "===r.ast.sourceFile.text.charAt(a-1)||"	"===r.ast.sourceFile.text.charAt(a-1);)a--;else a+=2;if(i.match(/^\s*$/))for(l=n.range[1];" "===r.ast.sourceFile.text.charAt(a-1)||"	"===r.ast.sourceFile.text.charAt(a-1);)a--;return{text:"",start:a,end:l}}}})},"no-else-return":function(t,n,r){return v(n,function(t){for(var n=e.findNode(t.start,r.ast,{parents:!0});n&&"IfStatement"!==n.type;)n=n.parents.pop();var o=n.consequent,s=n.alternate,a=n.parent||{},i="\n";if(("BlockStatement"===a.type||"IfStatement"===a.type)&&(i=n.sourceFile.text.substring(a.start+1,a.body[0].start),"\n"!==i.charAt(0)&&(i="\n"+i)),"BlockStatement"===s.type){var l=s.body[0],c=l.start;l.leadingComments&&(c=l.leadingComments[0].start);var p=s.body[s.body.length-1],u=p.end,d=p.trailingComments;return d&&(u=d[d.length-1].end),[{text:i,start:o.end,end:c},{text:"",start:u,end:s.end}]}return c=s.start,s.leadingComments&&(c=s.leadingComments[0].start),{text:i,start:o.end+1,end:c}})},"no-cond-assign":function(t,n,r){return v(n,function(t){var n=e.findNode(t.start,r.ast,{parents:!0}),o=n.parents.pop();if(o&&"AssignmentExpression"===o.type){var s=o.range[0],a=o.range[1];return[{text:"(",start:s,end:s},{text:")",start:a,end:a}]}})},"no-extra-bind":function(t,n,r){return v(n,function(t){var n=e.findNode(t.start,r.ast,{parents:!0}),o=n.parents.pop(),s=n.parents.pop();if(o&&s){var a=o.object;return"ArrowFunctionExpression"===a.type?[{text:"",start:s.range[0],end:a.range[0]},{text:"",start:a.range[1],end:s.range[1]}]:{text:"",start:o.object.range[1],end:s.range[1]}}})},quotes:function(t,n,r){function o(e,t){var n=e[0];return t===n?e:t+e.slice(1,-1).replace(/\\(\${|\r\n?|\n|.)|["'`]|\${|(\r\n?|\n)/g,function(e,r,o){return r===n||"`"===n&&"${"===r?r:e===t||"`"===t&&"${"===e?"\\"+e:o&&"`"===n?"\\n":e})+t}return v(n,function(n){var s=e.findNode(n.start,r.ast,{parents:!0});if(s)switch(s.type){case"Literal":return{text:o(s.raw,t.data.quote),start:s.range[0],end:s.range[1]};case"TemplateLiteral":return{text:o("`"+s.quasis[0].value.raw+"`",t.data.quote),start:s.range[0],end:s.range[1]}}})},"no-unused-expressions":function(e,t){return v(t,function(e){return{text:"",start:e.start,end:e.end}})},"no-implicit-coercion":function(t,n,r){function o(e){return"!"===e.operator&&"UnaryExpression"===e.argument.type&&"!"===e.argument.operator}function s(e){return"~"===e.operator&&"CallExpression"===e.argument.type&&"MemberExpression"===e.argument.callee.type&&"Identifier"===e.argument.callee.property.type&&h.test(e.argument.callee.property.name)}function a(e){return"*"===e.operator&&("Literal"===e.left.type&&1===e.left.value||"Literal"===e.right.type&&1===e.right.value)}function i(e){return"Literal"===e.type&&"number"==typeof e.value||"CallExpression"===e.type&&("Number"===e.callee.name||"parseInt"===e.callee.name||"parseFloat"===e.callee.name)}function l(e){var t=e.left,n=e.right;return"BinaryExpression"===n.type||i(n)?"BinaryExpression"===t.type||i(t)?void 0:t:n}function c(e,t){return"Literal"===e.left.type&&e.left.value===t?e.right:e.left}function p(e,t){return e.slice(t.range[0],t.range[1])}function u(e,t,n){if(a(e)){var r=l(e);if(r)return{text:"Number("+p(t,r)+")",start:n.start,end:n.end}}return{text:"String("+p(t,c(e,""))+")",start:n.start,end:n.end}}function d(e,t,n){var r=c(e,""),o=p(t,r);return{text:o+" = String("+o+")",start:n.start,end:n.end}}var h=/^(?:i|lastI)ndexOf$/,f=r.ast.sourceFile.text;return v(n,function(t){var n=e.findNode(t.start,r.ast,{parents:!0});if(n)switch(n.type){case"UnaryExpression":return o(n)?{text:"Boolean("+p(f,n.argument.argument)+")",start:t.start,end:t.end}:s(n)?{text:p(f,n.argument)+" !== -1",start:t.start,end:t.end}:{text:"Number("+p(f,n.argument)+")",start:t.start,end:t.end};case"Literal":var a=n.parents&&n.parents.pop();return a?u(a,f,t):null;case"BinaryExpression":return u(n,f,t);case"Identifier":return a=n.parents&&n.parents.pop(),a?d(a,f,t):null;case"AssignmentExpression":return d(n,f,t)}})},"remove-duplicate-case":function(t,n,r){function o(e){var t=e.leadingComments;if(t){var n=t[0];if("Line"===n.type&&"$FALLTHROUGH$"===n.value)return n}return null}return v(n,function(t){var n=e.findNode(t.start,r.ast,{parents:!0});if(n&&n.parents.length>2){var s=n.parents.pop(),a=n.parents.pop();if(a){var i=0;e:for(var l=0,c=a.cases.length;c>l;l++){var p=a.cases[l];if(p.range[0]===s.range[0]&&p.range[1]===s.range[1]){i=l;break e}}}var u,d=s.start,h=s.end,f=a.cases[i+1];return f&&(u=o(f),u&&(h=u.end)),0!==i&&(u=o(s),d=u&&f?u.end:a.cases[i-1].end),{text:"",start:d,end:h}}})},"no-trailing-spaces":function(e,t){return v(t,function(e){return{text:"",start:e.start,end:e.end}})},"ignore-in-file":function(t,n,o){var a=t.data?t.data.ruleId:null;if(a){var p=[],u=e.findDirective(o.ast,"eslint-disable"),d=m(o.ast);if(d=Math.min(t.start,d),u&&u.range[0]<=d){var h=i(o.ast.sourceFile.text,u.range[0])+u.range[0];p.push({text:l(u.value,"eslint-disable",a,!0),start:h,end:h+u.value.length})}else{var b=f(o.ast);t.start<b&&(b=g(o.ast));var y=r(o.ast.sourceFile.text,b),v=s(o.ast.sourceFile.text,y,!1),x="/*eslint-disable "+a+" */\n"+v;p.push({text:x,start:b,end:b})}for(var _=e.findDirectives(o.ast,"eslint-enable"),S=0;S<_.length;S++){var w=c(_[S].value,"eslint-enable",a);if(w)if(w.all)p.push({text:"",start:_[S].range[0],end:_[S].range[1]});else{var k=_[S].range[0]+i(o.ast.sourceFile.text,_[S].range[0])+w.start,E=_[S].range[0]+i(o.ast.sourceFile.text,_[S].range[0])+w.end;p.push({text:"",start:k,end:E})}}return p.push({text:o.ast.sourceFile.text.slice(t.start,t.end),start:t.start,end:t.end}),p=p.sort(function(e,t){return e.start-t.start})}}},_=["IfStatement","WhileStatement","ForStatement","ForInStatement","WithStatement","DoWhileStatement","ForOfStatement"]}),define("beautifier/beautify-js",["acorn/dist/acorn"],function(e){function t(t,n){function r(e,t){for(var n=0;n<t.length;n+=1)if(t[n]===e)return!0;return!1}function o(e){return e.replace(/^\s+|\s+$/g,"")}function s(e){return e.replace(/^\s+/g,"")}function a(e){e=e||u.before_newline;var t=Object.values(u);if(!r(e,t))throw new Error("Invalid Option Value: The option 'operator_position' must be one of the following values\n"+t+"\nYou passed in: '"+e+"'");return e}function i(t,n){"use strict";function i(e,t){var n=0;e&&(n=e.indentation_level,!H.just_added_newline()&&e.line_indent_level>n&&(n=e.line_indent_level));var r={mode:t,parent:e,last_text:e?e.last_text:"",last_word:e?e.last_word:"",declaration_statement:!1,declaration_assignment:!1,multiline_frame:!1,inline_frame:!1,if_block:!1,else_block:!1,do_block:!1,do_while:!1,import_block:!1,in_case_statement:!1,in_case:!1,case_body:!1,indentation_level:n,line_indent_level:e?e.line_indent_level:n,start_line_index:H.get_line_number(),ternary_depth:0};return r}function l(e){var t=e.newlines,n=ot.keep_array_indentation&&S(Z.mode);if(n)for(var r=0;t>r;r+=1)g(r>0);else if(ot.max_preserve_newlines&&t>ot.max_preserve_newlines&&(t=ot.max_preserve_newlines),ot.preserve_newlines&&e.newlines>1){g();for(var o=1;t>o;o+=1)g(!0)}K=e,rt[K.type]()}function f(t){t=t.replace(e.allLineBreaks,"\n");for(var n=[],r=t.indexOf("\n");-1!==r;)n.push(t.substring(0,r)),t=t.substring(r+1),r=t.indexOf("\n");return t.length&&n.push(t),n}function m(e){if(e=void 0===e?!1:e,!H.just_added_newline()){var t=ot.preserve_newlines&&K.wanted_newline||e,n=r(Z.last_text,J.positionable_operators)||r(K.text,J.positionable_operators);if(n){var o=r(Z.last_text,J.positionable_operators)&&r(ot.operator_position,d)||r(K.text,J.positionable_operators);t=t&&o}if(t)g(!1,!0);else if(ot.wrap_line_length){if("TK_RESERVED"===X&&r(Z.last_text,lt))return;var s=H.current_line.get_character_count()+K.text.length+(H.space_before_token?1:0);s>=ot.wrap_line_length&&g(!1,!0)}}}function g(e,t){if(!t&&";"!==Z.last_text&&","!==Z.last_text&&"="!==Z.last_text&&"TK_OPERATOR"!==X)for(;Z.mode===h.Statement&&!Z.if_block&&!Z.do_block;)k();H.add_new_line(e)&&(Z.multiline_frame=!0)}function b(){H.just_added_newline()&&(ot.keep_array_indentation&&S(Z.mode)&&K.wanted_newline?(H.current_line.push(K.whitespace_before),H.space_before_token=!1):H.set_indent(Z.indentation_level)&&(Z.line_indent_level=Z.indentation_level))}function y(e){if(H.raw)return void H.add_raw_token(K);if(ot.comma_first&&"TK_COMMA"===X&&H.just_added_newline()&&","===H.previous_line.last()){var t=H.previous_line.pop();H.previous_line.is_empty()&&(H.previous_line.push(t),H.trim(!0),H.current_line.pop(),H.trim()),b(),H.add_token(","),H.space_before_token=!0}e=e||K.text,b(),H.add_token(e)}function v(){Z.indentation_level+=1}function x(){Z.indentation_level>0&&(!Z.parent||Z.indentation_level>Z.parent.indentation_level)&&(Z.indentation_level-=1)}function _(e){Z?(tt.push(Z),et=Z):et=i(null,e),Z=i(et,e)}function S(e){return e===h.ArrayLiteral}function w(e){return r(e,[h.Expression,h.ForInitializer,h.Conditional])}function k(){tt.length>0&&(et=Z,Z=tt.pop(),et.mode===h.Statement&&H.remove_redundant_indentation(et))}function E(){return Z.parent.mode===h.ObjectLiteral&&Z.mode===h.Statement&&(":"===Z.last_text&&0===Z.ternary_depth||"TK_RESERVED"===X&&r(Z.last_text,["get","set"]))}function j(){return"TK_RESERVED"===X&&r(Z.last_text,["var","let","const"])&&"TK_WORD"===K.type||"TK_RESERVED"===X&&"do"===Z.last_text||"TK_RESERVED"===X&&r(Z.last_text,["return","throw"])&&!K.wanted_newline||"TK_RESERVED"===X&&"else"===Z.last_text&&("TK_RESERVED"!==K.type||"if"!==K.text)||"TK_END_EXPR"===X&&(et.mode===h.ForInitializer||et.mode===h.Conditional)||"TK_WORD"===X&&Z.mode===h.BlockStatement&&!Z.in_case&&"--"!==K.text&&"++"!==K.text&&"function"!==Q&&"TK_WORD"!==K.type&&"TK_RESERVED"!==K.type||Z.mode===h.ObjectLiteral&&(":"===Z.last_text&&0===Z.ternary_depth||"TK_RESERVED"===X&&r(Z.last_text,["get","set"]))?(_(h.Statement),v(),"TK_RESERVED"===X&&r(Z.last_text,["var","let","const"])&&"TK_WORD"===K.type&&(Z.declaration_statement=!0),E()||m("TK_RESERVED"===K.type&&r(K.text,["do","for","if","while"])),!0):!1}function T(e,t){for(var n=0;n<e.length;n++){var r=o(e[n]);if(r.charAt(0)!==t)return!1}return!0}function O(e,t){for(var n,r=0,o=e.length;o>r;r++)if(n=e[r],n&&0!==n.indexOf(t))return!1;return!0}function C(e){return r(e,["case","return","do","if","throw","else"])}function R(e){var t=$+(e||0);return 0>t||t>=st.length?null:st[t]}function A(){j();var e=h.Expression;if("["===K.text){if("TK_WORD"===X||")"===Z.last_text)return"TK_RESERVED"===X&&r(Z.last_text,J.line_starters)&&(H.space_before_token=!0),_(e),y(),v(),void(ot.space_in_paren&&(H.space_before_token=!0));e=h.ArrayLiteral,S(Z.mode)&&("["===Z.last_text||","===Z.last_text&&("]"===Q||"}"===Q))&&(ot.keep_array_indentation||g())}else"TK_RESERVED"===X&&"for"===Z.last_text?e=h.ForInitializer:"TK_RESERVED"===X&&r(Z.last_text,["if","while"])&&(e=h.Conditional);";"===Z.last_text||"TK_START_BLOCK"===X?g():"TK_END_EXPR"===X||"TK_START_EXPR"===X||"TK_END_BLOCK"===X||"."===Z.last_text?m(K.wanted_newline):"TK_RESERVED"===X&&"("===K.text||"TK_WORD"===X||"TK_OPERATOR"===X?"TK_RESERVED"===X&&("function"===Z.last_word||"typeof"===Z.last_word)||"*"===Z.last_text&&"function"===Q?ot.space_after_anon_function&&(H.space_before_token=!0):"TK_RESERVED"!==X||!r(Z.last_text,J.line_starters)&&"catch"!==Z.last_text||ot.space_before_conditional&&(H.space_before_token=!0):H.space_before_token=!0,"("===K.text&&"TK_RESERVED"===X&&"await"===Z.last_word&&(H.space_before_token=!0),"("===K.text&&("TK_EQUALS"===X||"TK_OPERATOR"===X)&&(E()||m()),"("===K.text&&"TK_WORD"!==X&&"TK_RESERVED"!==X&&m(),_(e),y(),ot.space_in_paren&&(H.space_before_token=!0),v()}function D(){for(;Z.mode===h.Statement;)k();Z.multiline_frame&&m("]"===K.text&&S(Z.mode)&&!ot.keep_array_indentation),ot.space_in_paren&&("TK_START_EXPR"!==X||ot.space_in_empty_paren?H.space_before_token=!0:(H.trim(),H.space_before_token=!1)),"]"===K.text&&ot.keep_array_indentation?(y(),k()):(k(),y()),H.remove_redundant_indentation(et),Z.do_while&&et.mode===h.Conditional&&(et.mode=h.Expression,Z.do_block=!1,Z.do_while=!1)}function M(){var e=R(1),t=R(2);_(t&&(r(t.text,[":",","])&&r(e.type,["TK_STRING","TK_WORD","TK_RESERVED"])||r(e.text,["get","set"])&&r(t.type,["TK_WORD","TK_RESERVED"]))?r(Q,["class","interface"])?h.BlockStatement:h.ObjectLiteral:"TK_OPERATOR"===X&&"=>"===Z.last_text?h.BlockStatement:r(X,["TK_EQUALS","TK_START_EXPR","TK_COMMA","TK_OPERATOR"])||"TK_RESERVED"===X&&r(Z.last_text,["return","throw","import"])?h.ObjectLiteral:h.BlockStatement);var n=!e.comments_before.length&&"}"===e.text,o=n&&"function"===Z.last_word&&"TK_END_EXPR"===X;if("expand"===ot.brace_style||"none"===ot.brace_style&&K.wanted_newline)"TK_OPERATOR"!==X&&(o||"TK_EQUALS"===X||"TK_RESERVED"===X&&C(Z.last_text)&&"else"!==Z.last_text)?H.space_before_token=!0:g(!1,!0);else{if("collapse-preserve-inline"===ot.brace_style){var s=0,a=null;Z.inline_frame=!0;do if(s+=1,a=R(s),a.wanted_newline){Z.inline_frame=!1;break}while("TK_EOF"!==a.type&&("TK_END_BLOCK"!==a.type||a.opened!==K))}!S(et.mode)||"TK_START_EXPR"!==X&&"TK_COMMA"!==X?"TK_OPERATOR"!==X&&"TK_START_EXPR"!==X&&("TK_START_BLOCK"===X?g():H.space_before_token=!0):(("TK_COMMA"===X||ot.space_in_paren)&&(H.space_before_token=!0),"collapse-preserve-inline"===ot.brace_style&&("TK_COMMA"===X||"TK_START_EXPR"===X&&Z.inline_frame)&&(m(),et.multiline_frame=et.multiline_frame||Z.multiline_frame,Z.multiline_frame=!1))}y(),v()}function P(){for(;Z.mode===h.Statement;)k();var e="TK_START_BLOCK"===X;"expand"===ot.brace_style?e||g():e||(Z.inline_frame?H.space_before_token=!0:S(Z.mode)&&ot.keep_array_indentation?(ot.keep_array_indentation=!1,g(),ot.keep_array_indentation=!0):g()),k(),y()}function N(){if("TK_RESERVED"===K.type)if(r(K.text,["set","get"])&&Z.mode!==h.ObjectLiteral)K.type="TK_WORD";else if(r(K.text,["as","from"])&&!Z.import_block)K.type="TK_WORD";else if(Z.mode===h.ObjectLiteral){var e=R(1);":"===e.text&&(K.type="TK_WORD")}if(j()||!K.wanted_newline||w(Z.mode)||"TK_OPERATOR"===X&&"--"!==Z.last_text&&"++"!==Z.last_text||"TK_EQUALS"===X||!ot.preserve_newlines&&"TK_RESERVED"===X&&r(Z.last_text,["var","let","const","set","get"])||g(),Z.do_block&&!Z.do_while){if("TK_RESERVED"===K.type&&"while"===K.text)return H.space_before_token=!0,y(),H.space_before_token=!0,void(Z.do_while=!0);g(),Z.do_block=!1}if(Z.if_block)if(Z.else_block||"TK_RESERVED"!==K.type||"else"!==K.text){for(;Z.mode===h.Statement;)k();Z.if_block=!1,Z.else_block=!1}else Z.else_block=!0;if("TK_RESERVED"===K.type&&("case"===K.text||"default"===K.text&&Z.in_case_statement))return g(),(Z.case_body||ot.jslint_happy)&&(x(),Z.case_body=!1),y(),Z.in_case=!0,void(Z.in_case_statement=!0);if("TK_RESERVED"===K.type&&"function"===K.text&&((r(Z.last_text,["}",";"])||H.just_added_newline()&&!r(Z.last_text,["[","{",":","=",","]))&&(H.just_added_blankline()||K.comments_before.length||(g(),g(!0))),"TK_RESERVED"===X||"TK_WORD"===X?"TK_RESERVED"===X&&r(Z.last_text,["get","set","new","return","export","async"])?H.space_before_token=!0:"TK_RESERVED"===X&&"default"===Z.last_text&&"export"===Q?H.space_before_token=!0:g():"TK_OPERATOR"===X||"="===Z.last_text?H.space_before_token=!0:(Z.multiline_frame||!w(Z.mode)&&!S(Z.mode))&&g()),("TK_COMMA"===X||"TK_START_EXPR"===X||"TK_EQUALS"===X||"TK_OPERATOR"===X)&&(E()||m()),"TK_RESERVED"===K.type&&r(K.text,["function","get","set"]))return y(),void(Z.last_word=K.text);if(nt="NONE","TK_END_BLOCK"===X?"TK_RESERVED"===K.type&&r(K.text,["else","catch","finally","from"])?"expand"===ot.brace_style||"end-expand"===ot.brace_style||"none"===ot.brace_style&&K.wanted_newline?nt="NEWLINE":(nt="SPACE",H.space_before_token=!0):nt="NEWLINE":"TK_SEMICOLON"===X&&Z.mode===h.BlockStatement?nt="NEWLINE":"TK_SEMICOLON"===X&&w(Z.mode)?nt="SPACE":"TK_STRING"===X?nt="NEWLINE":"TK_RESERVED"===X||"TK_WORD"===X||"*"===Z.last_text&&"function"===Q?nt="SPACE":"TK_START_BLOCK"===X?nt=Z.inline_frame?"SPACE":"NEWLINE":"TK_END_EXPR"===X&&(H.space_before_token=!0,nt="NEWLINE"),"TK_RESERVED"===K.type&&r(K.text,J.line_starters)&&")"!==Z.last_text&&(nt="else"===Z.last_text||"export"===Z.last_text?"SPACE":"NEWLINE"),"TK_RESERVED"===K.type&&r(K.text,["else","catch","finally"]))if("TK_END_BLOCK"!==X||et.mode!==h.BlockStatement||"expand"===ot.brace_style||"end-expand"===ot.brace_style||"none"===ot.brace_style&&K.wanted_newline)g();else{H.trim(!0);var t=H.current_line;"}"!==t.last()&&g(),H.space_before_token=!0}else"NEWLINE"===nt?"TK_RESERVED"===X&&C(Z.last_text)?H.space_before_token=!0:"TK_END_EXPR"!==X?"TK_START_EXPR"===X&&"TK_RESERVED"===K.type&&r(K.text,["var","let","const"])||":"===Z.last_text||("TK_RESERVED"===K.type&&"if"===K.text&&"else"===Z.last_text?H.space_before_token=!0:g()):"TK_RESERVED"===K.type&&r(K.text,J.line_starters)&&")"!==Z.last_text&&g():Z.multiline_frame&&S(Z.mode)&&","===Z.last_text&&"}"===Q?g():"SPACE"===nt&&(H.space_before_token=!0);y(),Z.last_word=K.text,"TK_RESERVED"===K.type&&("do"===K.text?Z.do_block=!0:"if"===K.text?Z.if_block=!0:"import"===K.text?Z.import_block=!0:Z.import_block&&"TK_RESERVED"===K.type&&"from"===K.text&&(Z.import_block=!1))}function I(){for(j()&&(H.space_before_token=!1);Z.mode===h.Statement&&!Z.if_block&&!Z.do_block;)k();Z.import_block&&(Z.import_block=!1),y()}function L(){j()?H.space_before_token=!0:"TK_RESERVED"===X||"TK_WORD"===X||Z.inline_frame?H.space_before_token=!0:"TK_COMMA"===X||"TK_START_EXPR"===X||"TK_EQUALS"===X||"TK_OPERATOR"===X?E()||m():g(),y()}function F(){j(),Z.declaration_statement&&(Z.declaration_assignment=!0),H.space_before_token=!0,y(),H.space_before_token=!0}function z(){y(),H.space_before_token=!0,Z.declaration_statement?(w(Z.parent.mode)&&(Z.declaration_assignment=!1),Z.declaration_assignment?(Z.declaration_assignment=!1,g(!1,!0)):ot.comma_first&&m()):Z.mode===h.ObjectLiteral||Z.mode===h.Statement&&Z.parent.mode===h.ObjectLiteral?(Z.mode===h.Statement&&k(),Z.inline_frame||g()):ot.comma_first&&m()}function q(){if(j(),"TK_RESERVED"===X&&C(Z.last_text))return H.space_before_token=!0,void y();if("*"===K.text&&"TK_DOT"===X)return void y();if("::"===K.text)return void y();if("TK_OPERATOR"===X&&r(ot.operator_position,d)&&m(),":"===K.text&&Z.in_case)return Z.case_body=!0,v(),y(),g(),void(Z.in_case=!1);var e=!0,t=!0,n=!1,o="*"===K.text&&"TK_RESERVED"===X&&"function"===Z.last_text,s=r(K.text,["-","+"])&&(r(X,["TK_START_BLOCK","TK_START_EXPR","TK_EQUALS","TK_OPERATOR"])||r(Z.last_text,J.line_starters)||","===Z.last_text);if(":"===K.text?0===Z.ternary_depth?e=!1:(Z.ternary_depth-=1,n=!0):"?"===K.text&&(Z.ternary_depth+=1),!s&&!o&&ot.preserve_newlines&&r(K.text,J.positionable_operators)){var a=":"===K.text,i=a&&n,l=a&&!n;switch(ot.operator_position){case u.before_newline:return H.space_before_token=!l,y(),(!a||i)&&m(),void(H.space_before_token=!0);case u.after_newline:return H.space_before_token=!0,!a||i?R(1).wanted_newline?g(!1,!0):m():H.space_before_token=!1,y(),void(H.space_before_token=!0);case u.preserve_newline:return l||m(),e=!(H.just_added_newline()||l),H.space_before_token=e,y(),void(H.space_before_token=!0)}}r(K.text,["--","++","!","~"])||s?(e=!1,t=!1,!K.wanted_newline||"--"!==K.text&&"++"!==K.text||g(!1,!0),";"===Z.last_text&&w(Z.mode)&&(e=!0),"TK_RESERVED"===X?e=!0:"TK_END_EXPR"===X?e=!("]"===Z.last_text&&("--"===K.text||"++"===K.text)):"TK_OPERATOR"===X&&(e=r(K.text,["--","-","++","+"])&&r(Z.last_text,["--","-","++","+"]),r(K.text,["+","-"])&&r(Z.last_text,["--","++"])&&(t=!0)),(Z.mode!==h.BlockStatement||Z.inline_frame)&&Z.mode!==h.Statement||"{"!==Z.last_text&&";"!==Z.last_text||g()):o&&(e=!1,t=!1),H.space_before_token=H.space_before_token||e,y(),H.space_before_token=t}function U(){if(H.raw)return H.add_raw_token(K),void(K.directives&&"end"===K.directives.preserve&&(H.raw=ot.test_output_raw));if(K.directives)return g(!1,!0),y(),"start"===K.directives.preserve&&(H.raw=!0),void g(!1,!0);if(!e.isNewLine(K.text.charCodeAt(0))&&!K.wanted_newline)return H.space_before_token=!0,y(),void(H.space_before_token=!0);var t,n=f(K.text),r=!1,o=!1,a=K.whitespace_before,i=a.length;for(g(!1,!0),n.length>1&&(r=T(n.slice(1),"*"),o=O(n.slice(1),a)),y(n[0]),t=1;t<n.length;t++)g(!1,!0),r?y(" "+s(n[t])):o&&n[t].length>i?y(n[t].substring(i)):H.add_token(n[t]);g(!1,!0)}function B(){K.wanted_newline?g(!1,!0):H.trim(!0),H.space_before_token=!0,y(),g(!1,!0)}function W(){j(),"TK_RESERVED"===X&&C(Z.last_text)?H.space_before_token=!0:m(")"===Z.last_text&&ot.break_chained_methods),y()}function G(){y(),"\n"===K.text[K.text.length-1]&&g()}function V(){for(;Z.mode===h.Statement;)k()}var H,$,J,K,X,Q,Y,Z,et,tt,nt,rt,ot,st=[],at="";for(rt={TK_START_EXPR:A,TK_END_EXPR:D,TK_START_BLOCK:M,TK_END_BLOCK:P,TK_WORD:N,TK_RESERVED:N,TK_SEMICOLON:I,TK_STRING:L,TK_EQUALS:F,TK_OPERATOR:q,TK_COMMA:z,TK_BLOCK_COMMENT:U,TK_COMMENT:B,TK_DOT:W,TK_UNKNOWN:G,TK_EOF:V},n=n?n:{},ot={},void 0!==n.braces_on_own_line&&(ot.brace_style=n.braces_on_own_line?"expand":"collapse"),ot.brace_style=n.brace_style?n.brace_style:ot.brace_style?ot.brace_style:"collapse","expand-strict"===ot.brace_style&&(ot.brace_style="expand"),ot.indent_size=n.indent_size?parseInt(n.indent_size,10):4,ot.indent_char=n.indent_char?n.indent_char:" ",ot.eol=n.eol?n.eol:"auto",ot.preserve_newlines=void 0===n.preserve_newlines?!0:n.preserve_newlines,ot.break_chained_methods=void 0===n.break_chained_methods?!1:n.break_chained_methods,ot.max_preserve_newlines=void 0===n.max_preserve_newlines?0:parseInt(n.max_preserve_newlines,10),ot.space_in_paren=void 0===n.space_in_paren?!1:n.space_in_paren,ot.space_in_empty_paren=void 0===n.space_in_empty_paren?!1:n.space_in_empty_paren,ot.jslint_happy=void 0===n.jslint_happy?!1:n.jslint_happy,ot.space_after_anon_function=void 0===n.space_after_anon_function?!1:n.space_after_anon_function,ot.keep_array_indentation=void 0===n.keep_array_indentation?!1:n.keep_array_indentation,ot.space_before_conditional=void 0===n.space_before_conditional?!0:n.space_before_conditional,ot.unescape_strings=void 0===n.unescape_strings?!1:n.unescape_strings,ot.wrap_line_length=void 0===n.wrap_line_length?0:parseInt(n.wrap_line_length,10),ot.e4x=void 0===n.e4x?!1:n.e4x,ot.end_with_newline=void 0===n.end_with_newline?!1:n.end_with_newline,ot.comma_first=void 0===n.comma_first?!1:n.comma_first,ot.operator_position=a(n.operator_position),ot.test_output_raw=void 0===n.test_output_raw?!1:n.test_output_raw,ot.jslint_happy&&(ot.space_after_anon_function=!0),n.indent_with_tabs&&(ot.indent_char="	",ot.indent_size=1),"auto"===ot.eol&&(ot.eol="\n",t&&e.lineBreak.test(t||"")&&(ot.eol=t.match(e.lineBreak)[0])),ot.eol=ot.eol.replace(/\\r/,"\r").replace(/\\n/,"\n"),Y="";ot.indent_size>0;)Y+=ot.indent_char,ot.indent_size-=1;
var it=0;if(t&&t.length){for(;" "===t.charAt(it)||"	"===t.charAt(it);)at+=t.charAt(it),it+=1;t=t.substring(it)}X="TK_START_BLOCK",Q="",H=new c(Y,at),H.raw=ot.test_output_raw,tt=[],_(h.BlockStatement),this.beautify=function(){function e(){return n=R()}var n,r;for(J=new p(t,ot,Y),st=J.tokenize(),$=0;e();){for(var o=0;o<n.comments_before.length;o++)l(n.comments_before[o]);l(n),Q=Z.last_text,X=n.type,Z.last_text=n.text,$+=1}return r=H.get_code(),ot.end_with_newline&&(r+="\n"),"\n"!==ot.eol&&(r=r.replace(/[\n]/g,ot.eol)),r};var lt=["break","contiue","return","throw"]}function l(e){var t=0,n=-1,r=[],o=!0;this.set_indent=function(r){t=e.baseIndentLength+r*e.indent_length,n=r},this.get_character_count=function(){return t},this.is_empty=function(){return o},this.last=function(){return this._empty?null:r[r.length-1]},this.push=function(e){r.push(e),t+=e.length,o=!1},this.pop=function(){var e=null;return o||(e=r.pop(),t-=e.length,o=0===r.length),e},this.remove_indent=function(){n>0&&(n-=1,t-=e.indent_length)},this.trim=function(){for(;" "===this.last();)r.pop(),t-=1;o=0===r.length},this.toString=function(){var t="";return this._empty||(n>=0&&(t=e.indent_cache[n]),t+=r.join("")),t}}function c(e,t){t=t||"",this.indent_cache=[t],this.baseIndentLength=t.length,this.indent_length=e.length,this.raw=!1;var n=[];this.baseIndentString=t,this.indent_string=e,this.previous_line=null,this.current_line=null,this.space_before_token=!1,this.add_outputline=function(){this.previous_line=this.current_line,this.current_line=new l(this),n.push(this.current_line)},this.add_outputline(),this.get_line_number=function(){return n.length},this.add_new_line=function(e){return 1===this.get_line_number()&&this.just_added_newline()?!1:e||!this.just_added_newline()?(this.raw||this.add_outputline(),!0):!1},this.get_code=function(){var e=n.join("\n").replace(/[\r\n\t ]+$/,"");return e},this.set_indent=function(e){if(n.length>1){for(;e>=this.indent_cache.length;)this.indent_cache.push(this.indent_cache[this.indent_cache.length-1]+this.indent_string);return this.current_line.set_indent(e),!0}return this.current_line.set_indent(0),!1},this.add_raw_token=function(e){for(var t=0;t<e.newlines;t++)this.add_outputline();this.current_line.push(e.whitespace_before),this.current_line.push(e.text),this.space_before_token=!1},this.add_token=function(e){this.add_space_before_token(),this.current_line.push(e)},this.add_space_before_token=function(){this.space_before_token&&!this.just_added_newline()&&this.current_line.push(" "),this.space_before_token=!1},this.remove_redundant_indentation=function(e){if(!e.multiline_frame&&e.mode!==h.ForInitializer&&e.mode!==h.Conditional)for(var t=e.start_line_index,r=n.length;r>t;)n[t].remove_indent(),t++},this.trim=function(r){for(r=void 0===r?!1:r,this.current_line.trim(e,t);r&&n.length>1&&this.current_line.is_empty();)n.pop(),this.current_line=n[n.length-1],this.current_line.trim();this.previous_line=n.length>1?n[n.length-2]:null},this.just_added_newline=function(){return this.current_line.is_empty()},this.just_added_blankline=function(){if(this.just_added_newline()){if(1===n.length)return!0;var e=n[n.length-2];return e.is_empty()}return!1}}function p(t,n){function s(e){if(!e.match(k))return null;var t={};E.lastIndex=0;for(var n=E.exec(e);n;)t[n[1]]=n[2],n=E.exec(e);return t}function a(){var a,k=[];if(m=0,g="",v>=x)return["","TK_EOF"];var E;E=y.length?y[y.length-1]:new f("TK_START_BLOCK","{");var O=t.charAt(v);for(v+=1;r(O,l);){if(e.isNewLine(O.charCodeAt(0))?("\n"!==O||"\r"!==t.charAt(v-2))&&(m+=1,k=[]):k.push(O),v>=x)return["","TK_EOF"];O=t.charAt(v),v+=1}if(k.length&&(g=k.join("")),c.test(O)||"."===O&&c.test(t.charAt(v))){var C=!0,R=!0,A=c;for("0"===O&&x>v&&/[XxOoBb]/.test(t.charAt(v))?(C=!1,R=!1,A=/[Bb]/.test(t.charAt(v))?p:/[Oo]/.test(t.charAt(v))?u:d,O+=t.charAt(v),v+=1):"."===O?C=!1:(O="",v-=1);x>v&&A.test(t.charAt(v));)O+=t.charAt(v),v+=1,C&&x>v&&"."===t.charAt(v)?(O+=t.charAt(v),v+=1,C=!1):R&&x>v&&/[Ee]/.test(t.charAt(v))&&(O+=t.charAt(v),v+=1,x>v&&/[+-]/.test(t.charAt(v))&&(O+=t.charAt(v),v+=1),R=!1,C=!1);return[O,"TK_WORD"]}if(e.isIdentifierStart(t.charCodeAt(v-1))){if(x>v)for(;e.isIdentifierChar(t.charCodeAt(v))&&(O+=t.charAt(v),v+=1,v!==x););return"TK_DOT"===E.type||"TK_RESERVED"===E.type&&r(E.text,["set","get"])||!r(O,_)?[O,"TK_WORD"]:"in"===O?[O,"TK_OPERATOR"]:[O,"TK_RESERVED"]}if("("===O||"["===O)return[O,"TK_START_EXPR"];if(")"===O||"]"===O)return[O,"TK_END_EXPR"];if("{"===O)return[O,"TK_START_BLOCK"];if("}"===O)return[O,"TK_END_BLOCK"];if(";"===O)return[O,"TK_SEMICOLON"];if("/"===O){var D,M="";if("*"===t.charAt(v)){v+=1,S.lastIndex=v,D=S.exec(t),M="/*"+D[0],v+=D[0].length;var P=s(M);return P&&"start"===P.ignore&&(j.lastIndex=v,D=j.exec(t),M+=D[0],v+=D[0].length),M=M.replace(e.allLineBreaks,"\n"),[M,"TK_BLOCK_COMMENT",P]}if("/"===t.charAt(v))return v+=1,w.lastIndex=v,D=w.exec(t),M="//"+D[0],v+=D[0].length,[M,"TK_COMMENT"]}var N=/^<([-a-zA-Z:0-9_.]+|{.+?}|!\[CDATA\[[\s\S]*?\]\])(\s+{.+?}|\s+[-a-zA-Z:0-9_.]+|\s+[-a-zA-Z:0-9_.]+\s*=\s*('[^']*'|"[^"]*"|{.+?}))*\s*(\/?)\s*>/;if("`"===O||"'"===O||'"'===O||("/"===O||n.e4x&&"<"===O&&t.slice(v-1).match(N))&&("TK_RESERVED"===E.type&&r(E.text,["return","case","throw","else","do","typeof","yield"])||"TK_END_EXPR"===E.type&&")"===E.text&&E.parent&&"TK_RESERVED"===E.parent.type&&r(E.parent.text,["if","while","for"])||r(E.type,["TK_COMMENT","TK_START_EXPR","TK_START_BLOCK","TK_END_BLOCK","TK_OPERATOR","TK_EQUALS","TK_EOF","TK_SEMICOLON","TK_COMMA"]))){var I=O,L=!1,F=!1;if(a=O,"/"===I)for(var z=!1;x>v&&(L||z||t.charAt(v)!==I)&&!e.isNewLine(t.charCodeAt(v));)a+=t.charAt(v),L?L=!1:(L="\\"===t.charAt(v),"["===t.charAt(v)?z=!0:"]"===t.charAt(v)&&(z=!1)),v+=1;else if(n.e4x&&"<"===I){var q=/<(\/?)([-a-zA-Z:0-9_.]+|{.+?}|!\[CDATA\[[\s\S]*?\]\])(\s+{.+?}|\s+[-a-zA-Z:0-9_.]+|\s+[-a-zA-Z:0-9_.]+\s*=\s*('[^']*'|"[^"]*"|{.+?}))*\s*(\/?)\s*>/g,U=t.slice(v-1),B=q.exec(U);if(B&&0===B.index){for(var W=B[2],G=0;B;){var V=!!B[1],H=B[2],$=!!B[B.length-1]||"![CDATA["===H.slice(0,8);if(H!==W||$||(V?--G:++G),0>=G)break;B=q.exec(U)}var J=B?B.index+B[0].length:U.length;return U=U.slice(0,J),v+=J-1,U=U.replace(e.allLineBreaks,"\n"),[U,"TK_STRING"]}}else{var K=function(n,r,o){for(var s;x>v&&(s=t.charAt(v),L||s!==n&&(r||!e.isNewLine(s.charCodeAt(0))));)(L||r)&&e.isNewLine(s.charCodeAt(0))?("\r"===s&&"\n"===t.charAt(v+1)&&(v+=1,s=t.charAt(v)),a+="\n"):a+=s,L?(("x"===s||"u"===s)&&(F=!0),L=!1):L="\\"===s,v+=1,o&&-1!==a.indexOf(o,a.length-o.length)&&("`"===n?K("}",r,"`"):K("`",r,"${"))};"`"===I?K("`",!0,"${"):K(I)}if(F&&n.unescape_strings&&(a=i(a)),x>v&&t.charAt(v)===I&&(a+=I,v+=1,"/"===I))for(;x>v&&e.isIdentifierStart(t.charCodeAt(v));)a+=t.charAt(v),v+=1;return[a,"TK_STRING"]}if("#"===O){if(0===y.length&&"!"===t.charAt(v)){for(a=O;x>v&&"\n"!==O;)O=t.charAt(v),a+=O,v+=1;return[o(a)+"\n","TK_UNKNOWN"]}var X="#";if(x>v&&c.test(t.charAt(v))){do O=t.charAt(v),X+=O,v+=1;while(x>v&&"#"!==O&&"="!==O);return"#"===O||("["===t.charAt(v)&&"]"===t.charAt(v+1)?(X+="[]",v+=2):"{"===t.charAt(v)&&"}"===t.charAt(v+1)&&(X+="{}",v+=2)),[X,"TK_WORD"]}}if("<"===O&&("?"===t.charAt(v)||"%"===t.charAt(v))){T.lastIndex=v-1;var Q=T.exec(t);if(Q)return O=Q[0],v+=O.length-1,O=O.replace(e.allLineBreaks,"\n"),[O,"TK_STRING"]}if("<"===O&&"<!--"===t.substring(v-1,v+3)){for(v+=3,O="<!--";!e.isNewLine(t.charCodeAt(v))&&x>v;)O+=t.charAt(v),v++;return b=!0,[O,"TK_COMMENT"]}if("-"===O&&b&&"-->"===t.substring(v-1,v+2))return b=!1,v+=2,["-->","TK_COMMENT"];if("."===O)return[O,"TK_DOT"];if(r(O,h)){for(;x>v&&r(O+t.charAt(v),h)&&(O+=t.charAt(v),v+=1,!(v>=x)););return","===O?[O,"TK_COMMA"]:"="===O?[O,"TK_EQUALS"]:[O,"TK_OPERATOR"]}return[O,"TK_UNKNOWN"]}function i(e){for(var t,n=!1,r="",o=0,s="",a=0;n||o<e.length;)if(t=e.charAt(o),o++,n){if(n=!1,"x"===t)s=e.substr(o,2),o+=2;else{if("u"!==t){r+="\\"+t;continue}s=e.substr(o,4),o+=4}if(!s.match(/^[0123456789abcdefABCDEF]+$/))return e;if(a=parseInt(s,16),a>=0&&32>a){r+="x"===t?"\\x"+s:"\\u"+s;continue}if(34===a||39===a||92===a)r+="\\"+String.fromCharCode(a);else{if("x"===t&&a>126&&255>=a)return e;r+=String.fromCharCode(a)}}else"\\"===t?n=!0:r+=t;return r}var l="\n\r	 ".split(""),c=/[0-9]/,p=/[01]/,u=/[01234567]/,d=/[0123456789abcdefABCDEF]/;this.positionable_operators="!= !== % & && * ** + - / : < << <= == === > >= >> >>> ? ^ | ||".split(" ");var h=this.positionable_operators.concat("! %= &= *= **= ++ += , -- -= /= :: <<= = => >>= >>>= ^= |= ~".split(" "));this.line_starters="continue,try,throw,return,var,let,const,if,switch,case,default,for,while,break,function,import,export".split(",");var m,g,b,y,v,x,_=this.line_starters.concat(["do","in","else","get","set","new","catch","finally","typeof","yield","async","await","from","as"]),S=/([\s\S]*?)((?:\*\/)|$)/g,w=/([^\n\r\u2028\u2029]*)/g,k=/\/\* beautify( \w+[:]\w+)+ \*\//g,E=/ (\w+)[:](\w+)/g,j=/([\s\S]*?)((?:\/\*\sbeautify\signore:end\s\*\/)|$)/g,T=/((<\?php|<\?=)[\s\S]*?\?>)|(<%[\s\S]*?%>)/g;this.tokenize=function(){x=t.length,v=0,b=!1,y=[];for(var e,n,r,o=null,s=[],i=[];!n||"TK_EOF"!==n.type;){for(r=a(),e=new f(r[1],r[0],m,g);"TK_COMMENT"===e.type||"TK_BLOCK_COMMENT"===e.type||"TK_UNKNOWN"===e.type;)"TK_BLOCK_COMMENT"===e.type&&(e.directives=r[2]),i.push(e),r=a(),e=new f(r[1],r[0],m,g);i.length&&(e.comments_before=i,i=[]),"TK_START_BLOCK"===e.type||"TK_START_EXPR"===e.type?(e.parent=n,s.push(o),o=e):("TK_END_BLOCK"===e.type||"TK_END_EXPR"===e.type)&&o&&("]"===e.text&&"["===o.text||")"===e.text&&"("===o.text||"}"===e.text&&"{"===o.text)&&(e.parent=o.parent,e.opened=o,o=s.pop()),y.push(e),n=e}return y}}var u={before_newline:"before-newline",after_newline:"after-newline",preserve_newline:"preserve-newline"},d=[u.before_newline,u.preserve_newline],h={BlockStatement:"BlockStatement",Statement:"Statement",ObjectLiteral:"ObjectLiteral",ArrayLiteral:"ArrayLiteral",ForInitializer:"ForInitializer",Conditional:"Conditional",Expression:"Expression"},f=function(e,t,n,r,o){this.type=e,this.text=t,this.comments_before=[],this.newlines=n||0,this.wanted_newline=n>0,this.whitespace_before=r||"",this.parent=o||null,this.opened=null,this.directives=null},m=new i(t,n);return m.beautify()}return Object.values||(Object.values=function(e){if(e!==Object(e))throw new TypeError("Object.values called on a non-object");var t,n=[];for(t in e)Object.prototype.hasOwnProperty.call(e,t)&&n.push(e[t]);return n}),{js_beautify:t}}),define("javascript/ternPlugins/beautifier",["tern/lib/tern","beautifier/beautify-js"],function(e,t){function n(e,n){var r=e.args,o=n.text;return r?(r.start&&r.end&&(o=n.text.substring(r.start,r.end)),t.js_beautify(o,r.config)):o}e.registerPlugin("beautifier",function(){return{}}),e.defineQueryType("beautify",{takesFile:!0,run:function(e,t,r){return n(t,r)}})}),define("javascript/plugins/ternDefaults",["i18n!javascript/nls/messages","json!tern/defs/ecma5.json","json!tern/defs/ecma6.json","json!tern/defs/ecma7.json","json!tern/defs/browser.json","json!tern/defs/chai.json","tern/plugin/angular","tern/plugin/doc_comment","tern/plugin/es_modules","tern/plugin/node","tern/plugin/commonjs","tern/plugin/requirejs","javascript/ternPlugins/amqp","javascript/ternPlugins/ast","javascript/ternPlugins/eslint","javascript/ternPlugins/express","javascript/ternPlugins/html","javascript/ternPlugins/jsdoc","javascript/ternPlugins/mongodb","javascript/ternPlugins/mysql","javascript/ternPlugins/occurrences","javascript/ternPlugins/open_impl","javascript/ternPlugins/outliner","javascript/ternPlugins/plugins","javascript/ternPlugins/postgres","javascript/ternPlugins/redis","javascript/ternPlugins/refs","javascript/ternPlugins/templates","javascript/ternPlugins/quickfixes","javascript/ternPlugins/beautifier","javascript/ternPlugins/resolver"],function(e,t,n,r,o,s){function a(){var e={};return Object.keys(p).forEach(function(t){e[t]=p[t]}),e.plugins={},Object.keys(c.required).forEach(function(t){e.plugins[t]=c.required[t]}),e}var i=[t,n,r,o,s],l=["ecma5","ecma6","ecma7","browser","chai"],c={required:{doc_comment:{name:e.ternDocPluginName,description:e.ternDocPluginDescription,fullDocs:!0,version:"0.18.0"},plugins:{name:e.ternPluginsPluginName,description:e.ternPluginsPluginDescription,version:"1.0"},occurrences:{name:e.occurrencesPluginName,description:e.occurrencesPluginDescription,version:"1.0"},open_impl:{name:e.openImplPluginName,description:e.openImplPluginDescription,version:"1.0"},html:{name:e.htmlDepPluginName,description:e.htmlDepPluginDescription,version:"1.0"},refs:{name:e.findTypesName,description:e.findTypesDescription,version:"1.0"},jsdoc:{name:e.jsdocPluginName,description:e.jsdocPluginDescription,version:"1.0"},eslint:{name:e.eslintPluginName,description:e.eslintPluginDescription,version:"1.0"},outliner:{name:e.outlinerPluginName,description:e.outlinerPluginDescription,version:"1.0"},fixes:{name:e.fixesPluginName,description:e.fixesPluginDescription,version:"1.0"},ast:{name:e.astPluginName,description:e.astPluginDescription,version:"1.0"},templates:{name:e.templatesPlugin,description:e.templatesPluginDescription,version:"1.0"},beautifier:{name:e.beautifierPluginName,description:e.beautifierPluginDescription,version:"1.0"},resolver:{name:e.resolverPluginName,description:e.resolverPluginDescription,version:"1.0"}},optional:{amqp:{name:e.orionAMQPPluginName,description:e.orionAMQPPluginDescription,version:"0.9.1",env:"amqp"},angular:{name:e.orionAngularPluginName,description:e.orionAngularPluginDescription,version:"0.18.0"},commonjs:{name:e.commonjsPluginName,description:e.commonjsPluginDescription,version:"0.18.0"},express:{name:e.orionExpressPluginName,description:e.orionExpressPluginDescription,version:"4.12.4",env:"express"},es_modules:{name:e.orionESModulesPluginName,description:e.orionESModulesPluginDescription,version:"0.18.0"},mongodb:{name:e.orionMongoDBPluginName,description:e.orionMongoDBPluginDescription,version:"1.1.21",env:"mongodb"},mysql:{name:e.orionMySQLPluginName,description:e.orionMySQLPluginDescription,version:"2.7.0",env:"mysql"},node:{name:e.orionNodePluginName,description:e.orionNodePluginDescription,version:"0.18.0"},postgres:{name:e.orionPostgresPluginName,description:e.orionPostgresPluginDescription,version:"4.4.0",env:"pg"},redis:{name:e.orionRedisPluginName,description:e.orionRedisPluginDescription,version:"0.12.1",env:"redis"},requirejs:{name:e.orionRequirePluginName,description:e.orionRequirePluginDescription,version:"0.18.0"}}},p={async:!0,debug:!1,projectDir:"orionFakeProjectDir",defs:i,ecmaVersion:7,optionalDefs:{ecma5:!0,ecma6:!0,ecma7:!0,browser:!0,chai:!0},optionalPlugins:{amqp:"amqp",angular:"angular",express:"express",es_modules:"es_modules",mongodb:"mongodb",mongo:"mongodb",mysql:"mysql",node:"node",commonjs:"commonjs",pg:"postgres",redis:"redis",amd:"requirejs"}};return{plugins:c,defs:i,defNames:l,pluginsDir:"tern/plugin/",serverOptions:a}}),define("orion/serialize",[],function(){function e(e){var t=e?JSON.parse(JSON.stringify(e)):e;return e instanceof Error&&(t.__isError=!0,t.lineNumber="number"==typeof t.lineNumber?t.lineNumber:e.lineNumber,t.message=t.message||e.message,t.name=t.name||e.name,t.stack=t.stack||e.stack),t}return{serializeError:e}}),define("orion/i18nUtil",[],function(){function e(e){var t=/\$\{([^\}]+)\}/g,n=arguments;return 2===n.length&&n[1]&&"object"==typeof n[1]?e.replace(t,function(e,t){return n[1][t]}):e.replace(t,function(e,t){return n[(t<<0)+1]})}return{formatMessage:e}});var lang="en",sear=self.location.search;if(sear){var langs=sear.split("worker-language");Array.isArray(langs)&&2===langs.length&&(lang=langs[1].slice(1),lang&&(lang=lang.toLocaleLowerCase()))}requirejs.config({locale:lang}),require(["tern/lib/tern","javascript/plugins/ternDefaults","orion/Deferred","orion/objects","orion/serialize","i18n!javascript/nls/messages","orion/i18nUtil"],function(e,t,n,r,o,s,a){function i(e,t){if(Array.isArray(e)&&Array.isArray(t))if(e.length<1)for(var n=0,r=t.length;r>n;n++)e.push(t[n]);else for(n=0,r=t.length;r>n;n++)e.indexOf(t[n])<0&&e.push(t[n])}function l(e,t){if(Array.isArray(e)){var n=e.indexOf(t);n>-1&&e.slice(n,n+1)}}function c(s,a){function c(e){u=t.serverOptions(),u.getFile=h,p(u),e&&d(o.serializeError(e))}function p(t){try{b=new e.Server(t),Array.isArray(t.loadEagerly)&&t.loadEagerly.length>0&&t.loadEagerly.forEach(function(e){b.addFile(e)}),a({request:"start_server",state:"server_ready"})}catch(n){c(n)}}b&&(b.reset(),b=null);var u=t.serverOptions();u.getFile=h;var g,y,v=t.pluginsDir,x=[];if(s&&(y=s.projectLoc,g=s.plugins,v=s.pluginsDir,s.libs&&i(x,s.libs),s.defs&&i(x,s.defs),Array.isArray(s.loadEagerly)&&s.loadEagerly.length>0&&(u.loadEagerly=s.loadEagerly),"number"==typeof s.ecmaVersion?(u.ecmaVersion=s.ecmaVersion,5===u.ecmaVersion?(i(x,["ecma5"]),l(x,"ecma6"),l(x,"ecma7")):6===u.ecmaVersion?(i(x,["ecma5","ecma6"]),l(x,"ecma7")):7===u.ecmaVersion&&i(x,["ecma5","ecma6","ecma7"])):i(x,["ecma5","ecma6","ecma7"]),"string"==typeof s.sourceType&&(u.sourceType=s.sourceType),"number"==typeof s.dependencyBudget&&(u.dependencyBudget=s.dependencyBudget),Array.isArray(s.dontLoad))){for(var _=!0,S=0,w=s.dontLoad.length;w>S;S++)if("string"!=typeof s.dontLoad[S]){_=!1;break}_&&(u.dontLoad=s.dontLoad)}g&&"object"==typeof g&&r.mixin(u.plugins,g),x=!Array.isArray(x)||x.length<1?[]:x.sort(),n.all(f(u.plugins,v)).then(function(){n.all(m(x,y)).then(function(e){u.defs=e,p(u)},c)},c)}function p(e){var t=Object.create(null);t.request=e.request,e.messageID?t.messageID=e.messageID:e.ternID&&(t.ternID=e.ternID),t.error=a.formatMessage(s.unknownRequest,t.request),d(t)}function u(e){var t=Object.create(null);t.request=e.request,e.messageID?t.messageID=e.messageID:e.ternID&&(t.ternID=e.ternID),t.error=a.formatMessage(s.serverNotStarted,t.request),d(t)}function d(e,t){e||(e=new Error(t?t:s.unknownError)),this.port?this.port.postMessage(e):postMessage(e)}function h(e,t){var n={request:"read",ternID:v++,args:{file:e}};null!==e&&"object"==typeof e?_[n.ternID]=t:x[n.ternID]=t,d(n,null)}function f(){var e=[];return e}function m(e,r){var o=[];return Array.isArray(e)&&e.forEach(function(e){if(/^\.definitions/.test(e)){if("string"==typeof e){var s=g(e,r);s&&o.push(s)}}else{var a=t.defNames.indexOf(e);a>-1&&o.push((new n).resolve(t.defs[a]))}}),o}function g(e,t){var r=e;t&&(r=t+r),/\.json$/i.test(e)||(r+=".json");var o=new n;return h(r,function(e,t){"string"==typeof t?o.resolve(t.length>0?JSON.parse(t):Object.create(null)):o.reject()}),o}var b=null;d({request:"worker_ready"});var y={start_server:function(e,t){c(e.options,t)},addFile:function(e,t){b.addFile(e.file,e.source),t({request:"addFile"})},completions:function(e,t){b?b.request({query:{type:"completions",file:e.meta.location,types:!0,origins:!0,urls:!0,docs:!0,end:e.params.offset,sort:!0,filter:!1,ecma:e.params.ecma,expandWordForward:!1,omitObjectPrototype:!1,includeKeywords:e.params.keywords,includeTemplates:e.params.template,caseInsensitive:!0,docFormat:"full"},files:e.files},function(e,n){t(e?{request:"completions",proposals:[],error:e.message,message:s.failedToComputeProposals}:n&&n.completions?{request:"completions",proposals:n.completions}:{request:"completions",proposals:[]})}):t({request:"completions",message:s.failedToComputeProposalsNoServer})},definition:function(e,t){b?b.request({query:{type:"definition",file:e.meta.location,end:e.params.offset,guess:e.guess},files:e.files},function(e,n){if(e&&t({request:"definition",error:e.message,message:s.failedToComputeDecl}),n&&"number"==typeof n.start&&"number"==typeof n.end)t({request:"definition",declaration:n});else if(n&&n.origin){var r=n.origin.lastIndexOf(".");r>-1&&".js"===n.origin.slice(r)?n.guess=!0:(delete n.guess,n.index=!0),t({request:"definition",declaration:n})}else t({request:"definition",declaration:null})}):t({request:"definition",message:s.failedToComputeDeclNoServer})},delFile:function(e,t){b&&"string"==typeof e.file?(b.delFile(e.file),t({request:"delFile"})):t({request:"delFile",message:a.formatMessage(s.failedDeleteRequest,e.file)})},documentation:function(e,t){b?b.request({query:{type:"documentation",file:e.meta.location,end:e.params.offset,docFormat:e.params.docFormat},files:e.files},function(e,n){t(e?{request:"documentation",error:e.message,message:s.failedToComputeDoc}:n&&n.doc?{request:"documentation",doc:n}:{request:"documentation",doc:null})}):t({request:"documentation",message:s.failedToComputeDocNoServer})},environments:function(e,t){b?b.request({query:{type:"environments"}},function(e,n){e&&t({request:"environments",error:e.message,message:s.failedGetEnvs}),t("object"==typeof n?{request:"environments",envs:n}:{request:"environments",envs:null})}):t({request:"environments",message:s.failedGetEnvsNoServer})},implementation:function(e,t){b?b.request({query:{type:"implementation",file:e.meta.location,end:e.params.offset,guess:e.guess},files:e.files},function(e,n){e&&t({request:"implementation",error:e.message,message:s.failedToComputeImpl}),t(n&&n.implementation&&"number"==typeof n.implementation.start&&"number"==typeof n.implementation.end?{request:"implementation",implementation:n.implementation}:n&&n.implementation&&n.implementation.origin?{request:"implementation",implementation:n.implementation}:{request:"implementation",implementation:null})}):t({request:"implementation",message:s.failedToComputeImplNoServer})},installed_plugins:function(e,t){b?b.request({query:{type:"installed_plugins"}},function(e,n){e&&t({request:"installed_plugins",error:e.message,message:s.failedGetInstalledPlugins}),t("object"==typeof n?{request:"installed_plugins",plugins:n}:{request:"installed_plugins",plugins:null})}):t({request:"installed_plugins",message:s.failedGetInstalledPluginsNoServer})},installed_defs:function(e,t){b?b.request({query:{type:"installed_defs"}},function(e,n){e&&t({request:"installed_defs",error:e.message,message:s.failedGetInstalledDefs}),t("object"==typeof n?{request:"installed_defs",defs:n}:{request:"installed_defs",defs:null})}):t({request:"installed_defs",message:s.failedGetInstalledDefsNoServer})},rename:function(e,t){b?b.request({query:{type:"rename",file:e.meta.location,end:e.params.offset,newName:e.newname},files:e.files},function(e,n){t(e?{request:"rename",error:"string"==typeof e?e:e.message,message:s.failedRenameTern}:n&&Array.isArray(n.changes)?{request:"rename",changes:n}:{request:"rename",changes:[]})}):t({request:"rename",message:s.failedRenameNoServer})},type:function(e,t){b.request({query:{type:"type",file:e.meta.location,end:e.params.offset}},function(e,n){t(e?{request:"type",error:"string"==typeof e?e:e.message,message:s.failedType}:{request:"type",type:n})})},checkRef:function(e,t){b.request({query:{type:"checkRef",file:e.meta.location,end:e.params.offset,origin:e.origin},files:e.files},function(e,n){t(e?{request:"checkRef",error:"string"==typeof e?e:e.message,message:s.failedType}:{request:"checkRef",type:n})})},lint:function(e,t){var n={type:"lint",file:e.meta.location,config:e.config};b.request({query:n,files:e.files},function(e,n){t(e?{request:"lint",error:e.message,message:s.failedToComputeProblems}:n&&Array.isArray(n)?{request:"lint",problems:n}:{request:"lint",problems:[]})})},outline:function(e,t){b.request({query:{type:"outline",file:e.meta.location,ast:e.ast},files:e.files},function(e,n){t(e?{request:"outline",error:e.message,message:s.failedToComputeOutline}:n&&Array.isArray(n)?{request:"outline",outline:n}:{request:"outline",outline:[]})})},fixes:function(e,t){b.request({query:{type:"fixes",file:e.meta.location,problemId:e.problemId,annotation:e.annotation,annotations:e.annotations},files:e.files},function(e,n){t(e?{request:"fixes",error:e.message,message:s.failedToComputeFixes}:n&&Array.isArray(n)?{request:"fixes",fixes:n}:{request:"fixes",fixes:[]})})},occurrences:function(e,t){b?b.request({query:{type:"occurrences",file:e.meta.location,end:e.params.offset},files:Array.isArray(e.files)?e.files:[]},function(e,n){e?t(null,{error:e.message,message:s.failedToComputeOccurrences}):t(Array.isArray(n)?{request:"outline",occurrences:n}:{request:"outline",occurrences:[]})}):t(null,{message:s.failedToComputeOccurrencesNoServer})},beautify:function(e,t){if(b){var n={type:"beautify",file:e.meta.location,args:{config:e.config,start:e.start,end:e.end,contentType:e.contentType}};b.request({query:n,files:e.files},function(e,n){t(e?{request:"beautify",error:e.message,message:s.failedToFormat}:n?{request:"beautify",text:n}:{request:"beautify",text:""})})}else t(null,{message:s.failedToFormatNoServer})}},v=0,x=Object.create(null),_=Object.create(null);onmessage=function(e){if("object"==typeof e.data){var t=e.data,n=y[t.request];if("function"==typeof n){if(!b&&"start_server"!==t.request)return void u(t);n(t.args,function(e){"number"==typeof t.messageID?e.messageID=t.messageID:"number"==typeof t.ternID&&(e.ternID=t.ternID),d(e)})}else{if("read"===t.request){var r=x[t.ternID];if("function"==typeof r){var o="";t.args&&t.args.contents&&(o=t.args.contents),r(t.args.error,o),delete x[t.ternID]}return r=_[t.ternID],void("function"==typeof r&&(r(t.args.error,{contents:t.args.contents?t.args.contents:"",file:t.args.file,logical:t.args.logical}),delete x[t.ternID]))}p(t)}}},onerror=function(e){d(e)},onconnect=function(e){this.port=e.ports[0],this.port.onmessage=onmessage,this.port.start()}}),define("javascript/plugins/ternWorkerCore",function(){});