diff --git a/node_modules/@popperjs/core/LICENSE.md b/node_modules/@popperjs/core/LICENSE.md deleted file mode 100644 index 0370c45..0000000 --- a/node_modules/@popperjs/core/LICENSE.md +++ /dev/null @@ -1,20 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2019 Federico Zivolo - -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. diff --git a/node_modules/@popperjs/core/README.md b/node_modules/@popperjs/core/README.md deleted file mode 100644 index bf604c9..0000000 --- a/node_modules/@popperjs/core/README.md +++ /dev/null @@ -1,359 +0,0 @@ - -

- Popper -

- -
-

Tooltip & Popover Positioning Engine

-
- -

- - npm version - - - npm downloads per month - -

- -
- - -**Positioning tooltips and popovers is difficult. Popper is here to help!** - -Given an element, such as a button, and a tooltip element describing it, Popper -will automatically put the tooltip in the right place near the button. - -It will position _any_ UI element that "pops out" from the flow of your document -and floats near a target element. The most common example is a tooltip, but it -also includes popovers, drop-downs, and more. All of these can be generically -described as a "popper" element. - -## Demo - -[![Popper visualized](https://i.imgur.com/F7qWsmV.jpg)](https://popper.js.org) - -## Docs - -- [v2.x (latest)](https://popper.js.org/docs/v2/) -- [v1.x](https://popper.js.org/docs/v1/) - -We've created a -[Migration Guide](https://popper.js.org/docs/v2/migration-guide/) to help you -migrate from Popper 1 to Popper 2. - -## Why not use pure CSS? - -CSS tooltips have accessibility and usability problems: - -- **Clipping and overflow issues**: CSS tooltips will not be prevented from - overflowing clipping boundaries, such as the viewport. The tooltip gets - partially cut off or overflows if it's near the edge since there is no dynamic - positioning logic. When using Popper, your tooltip will always be positioned - in the right place. -- **No flipping**: CSS tooltips will not flip to a different placement to fit - better in view if necessary. Popper automatically flips the tooltip to make it - fit in view as best as possible for the user. -- **Using HTML**: Popovers containing interactive HTML are difficult or not - possible to create without UX issues using pure CSS. Popper positions any HTML - element – no pseudo-elements are used. -- **No virtual positioning**: CSS tooltips cannot follow the mouse cursor or be - used as a context menu. Popper allows you to position your tooltip relative to - any coordinates you desire. -- **Lack of extensibility**: CSS tooltips cannot be easily extended to fit any - arbitrary use case you may need to adjust for. Popper is built with - extensibility in mind. - -## Why Popper? - -With the CSS drawbacks out of the way, we now move on to Popper in the -JavaScript space itself. - -Naive JavaScript tooltip implementations usually have the following problems: - -- **Scrolling containers**: They don't ensure the tooltip stays with the - reference element while scrolling when inside any number of scrolling - containers. -- **DOM context**: They often require the tooltip move outside of its original - DOM context because they don't handle `offsetParent` contexts. -- **Configurability**: They often lack advanced configurability to suit any - possible use case. -- **Size**: They are usually relatively large in size, or require an ancient - jQuery dependency. -- **Performance**: They often have runtime performance issues and update the - tooltip position too slowly. - -**Popper solves all of these key problems in an elegant, performant manner.** It -is a lightweight ~3 kB library that aims to provide a reliable and extensible -positioning engine you can use to ensure all your popper elements are positioned -in the right place. - -When you start writing your own popper implementation, you'll quickly run into -all of the problems mentioned above. These widgets are incredibly common in our -UIs; we've done the hard work figuring this out so you don't need to spend hours -fixing and handling numerous edge cases that we already ran into while building -the library! - -Popper is used in popular libraries like Bootstrap, Foundation, Material UI, and -more. It's likely you've already used popper elements on the web positioned by -Popper at some point in the past few years. - -Since we write UIs using powerful abstraction libraries such as React or Angular -nowadays, you'll also be glad to know Popper can fully integrate with them and -be a good citizen together with your other components. Check out `react-popper` -for the official Popper wrapper for React. - -## Installation - -### 1. Package Manager - -```bash -# With npm -npm i @popperjs/core - -# With Yarn -yarn add @popperjs/core -``` - -### 2. CDN - -```html - - - - - -``` - -### 3. Direct Download? - -Managing dependencies by "directly downloading" them and placing them into your -source code is not recommended for a variety of reasons, including missing out -on feat/fix updates easily. Please use a versioning management system like a CDN -or npm/Yarn. - -## Usage - -The most straightforward way to get started is to import Popper from the `unpkg` -CDN, which includes all of its features. You can call the `Popper.createPopper` -constructor to create new popper instances. - -Here is a complete example: - -```html - -Popper example - - - - - - - - -``` - -Visit the [tutorial](https://popper.js.org/docs/v2/tutorial/) for an example of -how to build your own tooltip from scratch using Popper. - -### Module bundlers - -You can import the `createPopper` constructor from the fully-featured file: - -```js -import { createPopper } from '@popperjs/core'; - -const button = document.querySelector('#button'); -const tooltip = document.querySelector('#tooltip'); - -// Pass the button, the tooltip, and some options, and Popper will do the -// magic positioning for you: -createPopper(button, tooltip, { - placement: 'right', -}); -``` - -All the modifiers listed in the docs menu will be enabled and "just work", so -you don't need to think about setting Popper up. The size of Popper including -all of its features is about 5 kB minzipped, but it may grow a bit in the -future. - -#### Popper Lite (tree-shaking) - -If bundle size is important, you'll want to take advantage of tree-shaking. The -library is built in a modular way to allow to import only the parts you really -need. - -```js -import { createPopper } from '@popperjs/core/lib/popper-lite.js'; -``` - -The Lite version includes the most necessary modifiers that will compute the -offsets of the popper, compute and add the positioning styles, and add event -listeners. This is close in bundle size to pure CSS tooltip libraries, and -behaves somewhat similarly. - -However, this does not include the features that makes Popper truly useful. - -The two most useful modifiers not included in Lite are `preventOverflow` and -`flip`: - -```js -import { createPopper } from '@popperjs/core/lib/popper-lite.js'; -import preventOverflow from '@popperjs/core/lib/modifiers/preventOverflow.js'; -import flip from '@popperjs/core/lib/modifiers/flip.js'; - -const button = document.querySelector('#button'); -const tooltip = document.querySelector('#tooltip'); - -createPopper(button, tooltip, { - modifiers: [preventOverflow, flip], -}); -``` - -As you make more poppers, you may be finding yourself needing other modifiers -provided by the library. - -See [tree-shaking](https://popper.js.org/docs/v2/tree-shaking/) for more -information. - -## Distribution targets - -Popper is distributed in 3 different versions, in 3 different file formats. - -The 3 file formats are: - -- `esm` (works with `import` syntax — **recommended**) -- `umd` (works with ` -``` - -Or `require('angular')` from your code. - -### bower - -```shell -bower install angular -``` - -Then add a ` -``` - -## Documentation - -Documentation is available on the -[AngularJS docs site](http://docs.angularjs.org/). - -## License - -The MIT License - -Copyright (c) 2010-2015 Google, Inc. http://angularjs.org - -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. diff --git a/node_modules/angular/angular-csp.css b/node_modules/angular/angular-csp.css deleted file mode 100644 index 5e3a079..0000000 --- a/node_modules/angular/angular-csp.css +++ /dev/null @@ -1,25 +0,0 @@ -/* Include this file in your html if you are using the CSP mode. */ - -@charset "UTF-8"; - -[ng\:cloak], -[ng-cloak], -[data-ng-cloak], -[x-ng-cloak], -.ng-cloak, -.x-ng-cloak, -.ng-hide:not(.ng-hide-animate) { - display: none !important; -} - -ng\:form { - display: block; -} - -.ng-animate-shim { - visibility:hidden; -} - -.ng-anchor { - position:absolute; -} diff --git a/node_modules/angular/angular.js b/node_modules/angular/angular.js deleted file mode 100644 index 61cc190..0000000 --- a/node_modules/angular/angular.js +++ /dev/null @@ -1,36431 +0,0 @@ -/** - * @license AngularJS v1.7.9 - * (c) 2010-2018 Google, Inc. http://angularjs.org - * License: MIT - */ -(function(window) {'use strict'; - -/* exported - minErrConfig, - errorHandlingConfig, - isValidObjectMaxDepth -*/ - -var minErrConfig = { - objectMaxDepth: 5, - urlErrorParamsEnabled: true -}; - -/** - * @ngdoc function - * @name angular.errorHandlingConfig - * @module ng - * @kind function - * - * @description - * Configure several aspects of error handling in AngularJS if used as a setter or return the - * current configuration if used as a getter. The following options are supported: - * - * - **objectMaxDepth**: The maximum depth to which objects are traversed when stringified for error messages. - * - * Omitted or undefined options will leave the corresponding configuration values unchanged. - * - * @param {Object=} config - The configuration object. May only contain the options that need to be - * updated. Supported keys: - * - * * `objectMaxDepth` **{Number}** - The max depth for stringifying objects. Setting to a - * non-positive or non-numeric value, removes the max depth limit. - * Default: 5 - * - * * `urlErrorParamsEnabled` **{Boolean}** - Specifies wether the generated error url will - * contain the parameters of the thrown error. Disabling the parameters can be useful if the - * generated error url is very long. - * - * Default: true. When used without argument, it returns the current value. - */ -function errorHandlingConfig(config) { - if (isObject(config)) { - if (isDefined(config.objectMaxDepth)) { - minErrConfig.objectMaxDepth = isValidObjectMaxDepth(config.objectMaxDepth) ? config.objectMaxDepth : NaN; - } - if (isDefined(config.urlErrorParamsEnabled) && isBoolean(config.urlErrorParamsEnabled)) { - minErrConfig.urlErrorParamsEnabled = config.urlErrorParamsEnabled; - } - } else { - return minErrConfig; - } -} - -/** - * @private - * @param {Number} maxDepth - * @return {boolean} - */ -function isValidObjectMaxDepth(maxDepth) { - return isNumber(maxDepth) && maxDepth > 0; -} - - -/** - * @description - * - * This object provides a utility for producing rich Error messages within - * AngularJS. It can be called as follows: - * - * var exampleMinErr = minErr('example'); - * throw exampleMinErr('one', 'This {0} is {1}', foo, bar); - * - * The above creates an instance of minErr in the example namespace. The - * resulting error will have a namespaced error code of example.one. The - * resulting error will replace {0} with the value of foo, and {1} with the - * value of bar. The object is not restricted in the number of arguments it can - * take. - * - * If fewer arguments are specified than necessary for interpolation, the extra - * interpolation markers will be preserved in the final string. - * - * Since data will be parsed statically during a build step, some restrictions - * are applied with respect to how minErr instances are created and called. - * Instances should have names of the form namespaceMinErr for a minErr created - * using minErr('namespace') . Error codes, namespaces and template strings - * should all be static strings, not variables or general expressions. - * - * @param {string} module The namespace to use for the new minErr instance. - * @param {function} ErrorConstructor Custom error constructor to be instantiated when returning - * error from returned function, for cases when a particular type of error is useful. - * @returns {function(code:string, template:string, ...templateArgs): Error} minErr instance - */ - -function minErr(module, ErrorConstructor) { - ErrorConstructor = ErrorConstructor || Error; - - var url = 'https://errors.angularjs.org/1.7.9/'; - var regex = url.replace('.', '\\.') + '[\\s\\S]*'; - var errRegExp = new RegExp(regex, 'g'); - - return function() { - var code = arguments[0], - template = arguments[1], - message = '[' + (module ? module + ':' : '') + code + '] ', - templateArgs = sliceArgs(arguments, 2).map(function(arg) { - return toDebugString(arg, minErrConfig.objectMaxDepth); - }), - paramPrefix, i; - - // A minErr message has two parts: the message itself and the url that contains the - // encoded message. - // The message's parameters can contain other error messages which also include error urls. - // To prevent the messages from getting too long, we strip the error urls from the parameters. - - message += template.replace(/\{\d+\}/g, function(match) { - var index = +match.slice(1, -1); - - if (index < templateArgs.length) { - return templateArgs[index].replace(errRegExp, ''); - } - - return match; - }); - - message += '\n' + url + (module ? module + '/' : '') + code; - - if (minErrConfig.urlErrorParamsEnabled) { - for (i = 0, paramPrefix = '?'; i < templateArgs.length; i++, paramPrefix = '&') { - message += paramPrefix + 'p' + i + '=' + encodeURIComponent(templateArgs[i]); - } - } - - return new ErrorConstructor(message); - }; -} - -/* We need to tell ESLint what variables are being exported */ -/* exported - angular, - msie, - jqLite, - jQuery, - slice, - splice, - push, - toString, - minErrConfig, - errorHandlingConfig, - isValidObjectMaxDepth, - ngMinErr, - angularModule, - uid, - REGEX_STRING_REGEXP, - VALIDITY_STATE_PROPERTY, - - lowercase, - uppercase, - nodeName_, - isArrayLike, - forEach, - forEachSorted, - reverseParams, - nextUid, - setHashKey, - extend, - toInt, - inherit, - merge, - noop, - identity, - valueFn, - isUndefined, - isDefined, - isObject, - isBlankObject, - isString, - isNumber, - isNumberNaN, - isDate, - isError, - isArray, - isFunction, - isRegExp, - isWindow, - isScope, - isFile, - isFormData, - isBlob, - isBoolean, - isPromiseLike, - trim, - escapeForRegexp, - isElement, - makeMap, - includes, - arrayRemove, - copy, - simpleCompare, - equals, - csp, - jq, - concat, - sliceArgs, - bind, - toJsonReplacer, - toJson, - fromJson, - convertTimezoneToLocal, - timezoneToOffset, - addDateMinutes, - startingTag, - tryDecodeURIComponent, - parseKeyValue, - toKeyValue, - encodeUriSegment, - encodeUriQuery, - angularInit, - bootstrap, - getTestability, - snake_case, - bindJQuery, - assertArg, - assertArgFn, - assertNotHasOwnProperty, - getter, - getBlockNodes, - hasOwnProperty, - createMap, - stringify, - - NODE_TYPE_ELEMENT, - NODE_TYPE_ATTRIBUTE, - NODE_TYPE_TEXT, - NODE_TYPE_COMMENT, - NODE_TYPE_DOCUMENT, - NODE_TYPE_DOCUMENT_FRAGMENT -*/ - -//////////////////////////////////// - -/** - * @ngdoc module - * @name ng - * @module ng - * @installation - * @description - * - * The ng module is loaded by default when an AngularJS application is started. The module itself - * contains the essential components for an AngularJS application to function. The table below - * lists a high level breakdown of each of the services/factories, filters, directives and testing - * components available within this core module. - * - */ - -var REGEX_STRING_REGEXP = /^\/(.+)\/([a-z]*)$/; - -// The name of a form control's ValidityState property. -// This is used so that it's possible for internal tests to create mock ValidityStates. -var VALIDITY_STATE_PROPERTY = 'validity'; - - -var hasOwnProperty = Object.prototype.hasOwnProperty; - -/** - * @private - * - * @description Converts the specified string to lowercase. - * @param {string} string String to be converted to lowercase. - * @returns {string} Lowercased string. - */ -var lowercase = function(string) {return isString(string) ? string.toLowerCase() : string;}; - -/** - * @private - * - * @description Converts the specified string to uppercase. - * @param {string} string String to be converted to uppercase. - * @returns {string} Uppercased string. - */ -var uppercase = function(string) {return isString(string) ? string.toUpperCase() : string;}; - - -var - msie, // holds major version number for IE, or NaN if UA is not IE. - jqLite, // delay binding since jQuery could be loaded after us. - jQuery, // delay binding - slice = [].slice, - splice = [].splice, - push = [].push, - toString = Object.prototype.toString, - getPrototypeOf = Object.getPrototypeOf, - ngMinErr = minErr('ng'), - - /** @name angular */ - angular = window.angular || (window.angular = {}), - angularModule, - uid = 0; - -// Support: IE 9-11 only -/** - * documentMode is an IE-only property - * http://msdn.microsoft.com/en-us/library/ie/cc196988(v=vs.85).aspx - */ -msie = window.document.documentMode; - - -/** - * @private - * @param {*} obj - * @return {boolean} Returns true if `obj` is an array or array-like object (NodeList, Arguments, - * String ...) - */ -function isArrayLike(obj) { - - // `null`, `undefined` and `window` are not array-like - if (obj == null || isWindow(obj)) return false; - - // arrays, strings and jQuery/jqLite objects are array like - // * jqLite is either the jQuery or jqLite constructor function - // * we have to check the existence of jqLite first as this method is called - // via the forEach method when constructing the jqLite object in the first place - if (isArray(obj) || isString(obj) || (jqLite && obj instanceof jqLite)) return true; - - // Support: iOS 8.2 (not reproducible in simulator) - // "length" in obj used to prevent JIT error (gh-11508) - var length = 'length' in Object(obj) && obj.length; - - // NodeList objects (with `item` method) and - // other objects with suitable length characteristics are array-like - return isNumber(length) && (length >= 0 && (length - 1) in obj || typeof obj.item === 'function'); - -} - -/** - * @ngdoc function - * @name angular.forEach - * @module ng - * @kind function - * - * @description - * Invokes the `iterator` function once for each item in `obj` collection, which can be either an - * object or an array. The `iterator` function is invoked with `iterator(value, key, obj)`, where `value` - * is the value of an object property or an array element, `key` is the object property key or - * array element index and obj is the `obj` itself. Specifying a `context` for the function is optional. - * - * It is worth noting that `.forEach` does not iterate over inherited properties because it filters - * using the `hasOwnProperty` method. - * - * Unlike ES262's - * [Array.prototype.forEach](http://www.ecma-international.org/ecma-262/5.1/#sec-15.4.4.18), - * providing 'undefined' or 'null' values for `obj` will not throw a TypeError, but rather just - * return the value provided. - * - ```js - var values = {name: 'misko', gender: 'male'}; - var log = []; - angular.forEach(values, function(value, key) { - this.push(key + ': ' + value); - }, log); - expect(log).toEqual(['name: misko', 'gender: male']); - ``` - * - * @param {Object|Array} obj Object to iterate over. - * @param {Function} iterator Iterator function. - * @param {Object=} context Object to become context (`this`) for the iterator function. - * @returns {Object|Array} Reference to `obj`. - */ - -function forEach(obj, iterator, context) { - var key, length; - if (obj) { - if (isFunction(obj)) { - for (key in obj) { - if (key !== 'prototype' && key !== 'length' && key !== 'name' && obj.hasOwnProperty(key)) { - iterator.call(context, obj[key], key, obj); - } - } - } else if (isArray(obj) || isArrayLike(obj)) { - var isPrimitive = typeof obj !== 'object'; - for (key = 0, length = obj.length; key < length; key++) { - if (isPrimitive || key in obj) { - iterator.call(context, obj[key], key, obj); - } - } - } else if (obj.forEach && obj.forEach !== forEach) { - obj.forEach(iterator, context, obj); - } else if (isBlankObject(obj)) { - // createMap() fast path --- Safe to avoid hasOwnProperty check because prototype chain is empty - for (key in obj) { - iterator.call(context, obj[key], key, obj); - } - } else if (typeof obj.hasOwnProperty === 'function') { - // Slow path for objects inheriting Object.prototype, hasOwnProperty check needed - for (key in obj) { - if (obj.hasOwnProperty(key)) { - iterator.call(context, obj[key], key, obj); - } - } - } else { - // Slow path for objects which do not have a method `hasOwnProperty` - for (key in obj) { - if (hasOwnProperty.call(obj, key)) { - iterator.call(context, obj[key], key, obj); - } - } - } - } - return obj; -} - -function forEachSorted(obj, iterator, context) { - var keys = Object.keys(obj).sort(); - for (var i = 0; i < keys.length; i++) { - iterator.call(context, obj[keys[i]], keys[i]); - } - return keys; -} - - -/** - * when using forEach the params are value, key, but it is often useful to have key, value. - * @param {function(string, *)} iteratorFn - * @returns {function(*, string)} - */ -function reverseParams(iteratorFn) { - return function(value, key) {iteratorFn(key, value);}; -} - -/** - * A consistent way of creating unique IDs in angular. - * - * Using simple numbers allows us to generate 28.6 million unique ids per second for 10 years before - * we hit number precision issues in JavaScript. - * - * Math.pow(2,53) / 60 / 60 / 24 / 365 / 10 = 28.6M - * - * @returns {number} an unique alpha-numeric string - */ -function nextUid() { - return ++uid; -} - - -/** - * Set or clear the hashkey for an object. - * @param obj object - * @param h the hashkey (!truthy to delete the hashkey) - */ -function setHashKey(obj, h) { - if (h) { - obj.$$hashKey = h; - } else { - delete obj.$$hashKey; - } -} - - -function baseExtend(dst, objs, deep) { - var h = dst.$$hashKey; - - for (var i = 0, ii = objs.length; i < ii; ++i) { - var obj = objs[i]; - if (!isObject(obj) && !isFunction(obj)) continue; - var keys = Object.keys(obj); - for (var j = 0, jj = keys.length; j < jj; j++) { - var key = keys[j]; - var src = obj[key]; - - if (deep && isObject(src)) { - if (isDate(src)) { - dst[key] = new Date(src.valueOf()); - } else if (isRegExp(src)) { - dst[key] = new RegExp(src); - } else if (src.nodeName) { - dst[key] = src.cloneNode(true); - } else if (isElement(src)) { - dst[key] = src.clone(); - } else { - if (key !== '__proto__') { - if (!isObject(dst[key])) dst[key] = isArray(src) ? [] : {}; - baseExtend(dst[key], [src], true); - } - } - } else { - dst[key] = src; - } - } - } - - setHashKey(dst, h); - return dst; -} - -/** - * @ngdoc function - * @name angular.extend - * @module ng - * @kind function - * - * @description - * Extends the destination object `dst` by copying own enumerable properties from the `src` object(s) - * to `dst`. You can specify multiple `src` objects. If you want to preserve original objects, you can do so - * by passing an empty object as the target: `var object = angular.extend({}, object1, object2)`. - * - * **Note:** Keep in mind that `angular.extend` does not support recursive merge (deep copy). Use - * {@link angular.merge} for this. - * - * @param {Object} dst Destination object. - * @param {...Object} src Source object(s). - * @returns {Object} Reference to `dst`. - */ -function extend(dst) { - return baseExtend(dst, slice.call(arguments, 1), false); -} - - -/** -* @ngdoc function -* @name angular.merge -* @module ng -* @kind function -* -* @description -* Deeply extends the destination object `dst` by copying own enumerable properties from the `src` object(s) -* to `dst`. You can specify multiple `src` objects. If you want to preserve original objects, you can do so -* by passing an empty object as the target: `var object = angular.merge({}, object1, object2)`. -* -* Unlike {@link angular.extend extend()}, `merge()` recursively descends into object properties of source -* objects, performing a deep copy. -* -* @deprecated -* sinceVersion="1.6.5" -* This function is deprecated, but will not be removed in the 1.x lifecycle. -* There are edge cases (see {@link angular.merge#known-issues known issues}) that are not -* supported by this function. We suggest using another, similar library for all-purpose merging, -* such as [lodash's merge()](https://lodash.com/docs/4.17.4#merge). -* -* @knownIssue -* This is a list of (known) object types that are not handled correctly by this function: -* - [`Blob`](https://developer.mozilla.org/docs/Web/API/Blob) -* - [`MediaStream`](https://developer.mozilla.org/docs/Web/API/MediaStream) -* - [`CanvasGradient`](https://developer.mozilla.org/docs/Web/API/CanvasGradient) -* - AngularJS {@link $rootScope.Scope scopes}; -* -* `angular.merge` also does not support merging objects with circular references. -* -* @param {Object} dst Destination object. -* @param {...Object} src Source object(s). -* @returns {Object} Reference to `dst`. -*/ -function merge(dst) { - return baseExtend(dst, slice.call(arguments, 1), true); -} - - - -function toInt(str) { - return parseInt(str, 10); -} - -var isNumberNaN = Number.isNaN || function isNumberNaN(num) { - // eslint-disable-next-line no-self-compare - return num !== num; -}; - - -function inherit(parent, extra) { - return extend(Object.create(parent), extra); -} - -/** - * @ngdoc function - * @name angular.noop - * @module ng - * @kind function - * - * @description - * A function that performs no operations. This function can be useful when writing code in the - * functional style. - ```js - function foo(callback) { - var result = calculateResult(); - (callback || angular.noop)(result); - } - ``` - */ -function noop() {} -noop.$inject = []; - - -/** - * @ngdoc function - * @name angular.identity - * @module ng - * @kind function - * - * @description - * A function that returns its first argument. This function is useful when writing code in the - * functional style. - * - ```js - function transformer(transformationFn, value) { - return (transformationFn || angular.identity)(value); - }; - - // E.g. - function getResult(fn, input) { - return (fn || angular.identity)(input); - }; - - getResult(function(n) { return n * 2; }, 21); // returns 42 - getResult(null, 21); // returns 21 - getResult(undefined, 21); // returns 21 - ``` - * - * @param {*} value to be returned. - * @returns {*} the value passed in. - */ -function identity($) {return $;} -identity.$inject = []; - - -function valueFn(value) {return function valueRef() {return value;};} - -function hasCustomToString(obj) { - return isFunction(obj.toString) && obj.toString !== toString; -} - - -/** - * @ngdoc function - * @name angular.isUndefined - * @module ng - * @kind function - * - * @description - * Determines if a reference is undefined. - * - * @param {*} value Reference to check. - * @returns {boolean} True if `value` is undefined. - */ -function isUndefined(value) {return typeof value === 'undefined';} - - -/** - * @ngdoc function - * @name angular.isDefined - * @module ng - * @kind function - * - * @description - * Determines if a reference is defined. - * - * @param {*} value Reference to check. - * @returns {boolean} True if `value` is defined. - */ -function isDefined(value) {return typeof value !== 'undefined';} - - -/** - * @ngdoc function - * @name angular.isObject - * @module ng - * @kind function - * - * @description - * Determines if a reference is an `Object`. Unlike `typeof` in JavaScript, `null`s are not - * considered to be objects. Note that JavaScript arrays are objects. - * - * @param {*} value Reference to check. - * @returns {boolean} True if `value` is an `Object` but not `null`. - */ -function isObject(value) { - // http://jsperf.com/isobject4 - return value !== null && typeof value === 'object'; -} - - -/** - * Determine if a value is an object with a null prototype - * - * @returns {boolean} True if `value` is an `Object` with a null prototype - */ -function isBlankObject(value) { - return value !== null && typeof value === 'object' && !getPrototypeOf(value); -} - - -/** - * @ngdoc function - * @name angular.isString - * @module ng - * @kind function - * - * @description - * Determines if a reference is a `String`. - * - * @param {*} value Reference to check. - * @returns {boolean} True if `value` is a `String`. - */ -function isString(value) {return typeof value === 'string';} - - -/** - * @ngdoc function - * @name angular.isNumber - * @module ng - * @kind function - * - * @description - * Determines if a reference is a `Number`. - * - * This includes the "special" numbers `NaN`, `+Infinity` and `-Infinity`. - * - * If you wish to exclude these then you can use the native - * [`isFinite'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/isFinite) - * method. - * - * @param {*} value Reference to check. - * @returns {boolean} True if `value` is a `Number`. - */ -function isNumber(value) {return typeof value === 'number';} - - -/** - * @ngdoc function - * @name angular.isDate - * @module ng - * @kind function - * - * @description - * Determines if a value is a date. - * - * @param {*} value Reference to check. - * @returns {boolean} True if `value` is a `Date`. - */ -function isDate(value) { - return toString.call(value) === '[object Date]'; -} - - -/** - * @ngdoc function - * @name angular.isArray - * @module ng - * @kind function - * - * @description - * Determines if a reference is an `Array`. - * - * @param {*} value Reference to check. - * @returns {boolean} True if `value` is an `Array`. - */ -function isArray(arr) { - return Array.isArray(arr) || arr instanceof Array; -} - -/** - * @description - * Determines if a reference is an `Error`. - * Loosely based on https://www.npmjs.com/package/iserror - * - * @param {*} value Reference to check. - * @returns {boolean} True if `value` is an `Error`. - */ -function isError(value) { - var tag = toString.call(value); - switch (tag) { - case '[object Error]': return true; - case '[object Exception]': return true; - case '[object DOMException]': return true; - default: return value instanceof Error; - } -} - -/** - * @ngdoc function - * @name angular.isFunction - * @module ng - * @kind function - * - * @description - * Determines if a reference is a `Function`. - * - * @param {*} value Reference to check. - * @returns {boolean} True if `value` is a `Function`. - */ -function isFunction(value) {return typeof value === 'function';} - - -/** - * Determines if a value is a regular expression object. - * - * @private - * @param {*} value Reference to check. - * @returns {boolean} True if `value` is a `RegExp`. - */ -function isRegExp(value) { - return toString.call(value) === '[object RegExp]'; -} - - -/** - * Checks if `obj` is a window object. - * - * @private - * @param {*} obj Object to check - * @returns {boolean} True if `obj` is a window obj. - */ -function isWindow(obj) { - return obj && obj.window === obj; -} - - -function isScope(obj) { - return obj && obj.$evalAsync && obj.$watch; -} - - -function isFile(obj) { - return toString.call(obj) === '[object File]'; -} - - -function isFormData(obj) { - return toString.call(obj) === '[object FormData]'; -} - - -function isBlob(obj) { - return toString.call(obj) === '[object Blob]'; -} - - -function isBoolean(value) { - return typeof value === 'boolean'; -} - - -function isPromiseLike(obj) { - return obj && isFunction(obj.then); -} - - -var TYPED_ARRAY_REGEXP = /^\[object (?:Uint8|Uint8Clamped|Uint16|Uint32|Int8|Int16|Int32|Float32|Float64)Array]$/; -function isTypedArray(value) { - return value && isNumber(value.length) && TYPED_ARRAY_REGEXP.test(toString.call(value)); -} - -function isArrayBuffer(obj) { - return toString.call(obj) === '[object ArrayBuffer]'; -} - - -var trim = function(value) { - return isString(value) ? value.trim() : value; -}; - -// Copied from: -// http://docs.closure-library.googlecode.com/git/local_closure_goog_string_string.js.source.html#line1021 -// Prereq: s is a string. -var escapeForRegexp = function(s) { - return s - .replace(/([-()[\]{}+?*.$^|,:#= 0) { - array.splice(index, 1); - } - return index; -} - -/** - * @ngdoc function - * @name angular.copy - * @module ng - * @kind function - * - * @description - * Creates a deep copy of `source`, which should be an object or an array. This functions is used - * internally, mostly in the change-detection code. It is not intended as an all-purpose copy - * function, and has several limitations (see below). - * - * * If no destination is supplied, a copy of the object or array is created. - * * If a destination is provided, all of its elements (for arrays) or properties (for objects) - * are deleted and then all elements/properties from the source are copied to it. - * * If `source` is not an object or array (inc. `null` and `undefined`), `source` is returned. - * * If `source` is identical to `destination` an exception will be thrown. - * - *
- * - *
- * Only enumerable properties are taken into account. Non-enumerable properties (both on `source` - * and on `destination`) will be ignored. - *
- * - *
- * `angular.copy` does not check if destination and source are of the same type. It's the - * developer's responsibility to make sure they are compatible. - *
- * - * @knownIssue - * This is a non-exhaustive list of object types / features that are not handled correctly by - * `angular.copy`. Note that since this functions is used by the change detection code, this - * means binding or watching objects of these types (or that include these types) might not work - * correctly. - * - [`File`](https://developer.mozilla.org/docs/Web/API/File) - * - [`Map`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Map) - * - [`ImageData`](https://developer.mozilla.org/docs/Web/API/ImageData) - * - [`MediaStream`](https://developer.mozilla.org/docs/Web/API/MediaStream) - * - [`Set`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Set) - * - [`WeakMap`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/WeakMap) - * - ['getter'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/get)/ - * [`setter`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/set)` - * - * @param {*} source The source that will be used to make a copy. Can be any type, including - * primitives, `null`, and `undefined`. - * @param {(Object|Array)=} destination Destination into which the source is copied. If provided, - * must be of the same type as `source`. - * @returns {*} The copy or updated `destination`, if `destination` was specified. - * - * @example - - -
-
-
-
- Gender: -
- - -
-
form = {{user | json}}
-
leader = {{leader | json}}
-
-
- - // Module: copyExample - angular. - module('copyExample', []). - controller('ExampleController', ['$scope', function($scope) { - $scope.leader = {}; - - $scope.reset = function() { - // Example with 1 argument - $scope.user = angular.copy($scope.leader); - }; - - $scope.update = function(user) { - // Example with 2 arguments - angular.copy(user, $scope.leader); - }; - - $scope.reset(); - }]); - -
- */ -function copy(source, destination, maxDepth) { - var stackSource = []; - var stackDest = []; - maxDepth = isValidObjectMaxDepth(maxDepth) ? maxDepth : NaN; - - if (destination) { - if (isTypedArray(destination) || isArrayBuffer(destination)) { - throw ngMinErr('cpta', 'Can\'t copy! TypedArray destination cannot be mutated.'); - } - if (source === destination) { - throw ngMinErr('cpi', 'Can\'t copy! Source and destination are identical.'); - } - - // Empty the destination object - if (isArray(destination)) { - destination.length = 0; - } else { - forEach(destination, function(value, key) { - if (key !== '$$hashKey') { - delete destination[key]; - } - }); - } - - stackSource.push(source); - stackDest.push(destination); - return copyRecurse(source, destination, maxDepth); - } - - return copyElement(source, maxDepth); - - function copyRecurse(source, destination, maxDepth) { - maxDepth--; - if (maxDepth < 0) { - return '...'; - } - var h = destination.$$hashKey; - var key; - if (isArray(source)) { - for (var i = 0, ii = source.length; i < ii; i++) { - destination.push(copyElement(source[i], maxDepth)); - } - } else if (isBlankObject(source)) { - // createMap() fast path --- Safe to avoid hasOwnProperty check because prototype chain is empty - for (key in source) { - destination[key] = copyElement(source[key], maxDepth); - } - } else if (source && typeof source.hasOwnProperty === 'function') { - // Slow path, which must rely on hasOwnProperty - for (key in source) { - if (source.hasOwnProperty(key)) { - destination[key] = copyElement(source[key], maxDepth); - } - } - } else { - // Slowest path --- hasOwnProperty can't be called as a method - for (key in source) { - if (hasOwnProperty.call(source, key)) { - destination[key] = copyElement(source[key], maxDepth); - } - } - } - setHashKey(destination, h); - return destination; - } - - function copyElement(source, maxDepth) { - // Simple values - if (!isObject(source)) { - return source; - } - - // Already copied values - var index = stackSource.indexOf(source); - if (index !== -1) { - return stackDest[index]; - } - - if (isWindow(source) || isScope(source)) { - throw ngMinErr('cpws', - 'Can\'t copy! Making copies of Window or Scope instances is not supported.'); - } - - var needsRecurse = false; - var destination = copyType(source); - - if (destination === undefined) { - destination = isArray(source) ? [] : Object.create(getPrototypeOf(source)); - needsRecurse = true; - } - - stackSource.push(source); - stackDest.push(destination); - - return needsRecurse - ? copyRecurse(source, destination, maxDepth) - : destination; - } - - function copyType(source) { - switch (toString.call(source)) { - case '[object Int8Array]': - case '[object Int16Array]': - case '[object Int32Array]': - case '[object Float32Array]': - case '[object Float64Array]': - case '[object Uint8Array]': - case '[object Uint8ClampedArray]': - case '[object Uint16Array]': - case '[object Uint32Array]': - return new source.constructor(copyElement(source.buffer), source.byteOffset, source.length); - - case '[object ArrayBuffer]': - // Support: IE10 - if (!source.slice) { - // If we're in this case we know the environment supports ArrayBuffer - /* eslint-disable no-undef */ - var copied = new ArrayBuffer(source.byteLength); - new Uint8Array(copied).set(new Uint8Array(source)); - /* eslint-enable */ - return copied; - } - return source.slice(0); - - case '[object Boolean]': - case '[object Number]': - case '[object String]': - case '[object Date]': - return new source.constructor(source.valueOf()); - - case '[object RegExp]': - var re = new RegExp(source.source, source.toString().match(/[^/]*$/)[0]); - re.lastIndex = source.lastIndex; - return re; - - case '[object Blob]': - return new source.constructor([source], {type: source.type}); - } - - if (isFunction(source.cloneNode)) { - return source.cloneNode(true); - } - } -} - - -// eslint-disable-next-line no-self-compare -function simpleCompare(a, b) { return a === b || (a !== a && b !== b); } - - -/** - * @ngdoc function - * @name angular.equals - * @module ng - * @kind function - * - * @description - * Determines if two objects or two values are equivalent. Supports value types, regular - * expressions, arrays and objects. - * - * Two objects or values are considered equivalent if at least one of the following is true: - * - * * Both objects or values pass `===` comparison. - * * Both objects or values are of the same type and all of their properties are equal by - * comparing them with `angular.equals`. - * * Both values are NaN. (In JavaScript, NaN == NaN => false. But we consider two NaN as equal) - * * Both values represent the same regular expression (In JavaScript, - * /abc/ == /abc/ => false. But we consider two regular expressions as equal when their textual - * representation matches). - * - * During a property comparison, properties of `function` type and properties with names - * that begin with `$` are ignored. - * - * Scope and DOMWindow objects are being compared only by identify (`===`). - * - * @param {*} o1 Object or value to compare. - * @param {*} o2 Object or value to compare. - * @returns {boolean} True if arguments are equal. - * - * @example - - -
-
-

User 1

- Name: - Age: - -

User 2

- Name: - Age: - -
-
- -
- User 1:
{{user1 | json}}
- User 2:
{{user2 | json}}
- Equal:
{{result}}
-
-
-
- - angular.module('equalsExample', []).controller('ExampleController', ['$scope', function($scope) { - $scope.user1 = {}; - $scope.user2 = {}; - $scope.compare = function() { - $scope.result = angular.equals($scope.user1, $scope.user2); - }; - }]); - -
- */ -function equals(o1, o2) { - if (o1 === o2) return true; - if (o1 === null || o2 === null) return false; - // eslint-disable-next-line no-self-compare - if (o1 !== o1 && o2 !== o2) return true; // NaN === NaN - var t1 = typeof o1, t2 = typeof o2, length, key, keySet; - if (t1 === t2 && t1 === 'object') { - if (isArray(o1)) { - if (!isArray(o2)) return false; - if ((length = o1.length) === o2.length) { - for (key = 0; key < length; key++) { - if (!equals(o1[key], o2[key])) return false; - } - return true; - } - } else if (isDate(o1)) { - if (!isDate(o2)) return false; - return simpleCompare(o1.getTime(), o2.getTime()); - } else if (isRegExp(o1)) { - if (!isRegExp(o2)) return false; - return o1.toString() === o2.toString(); - } else { - if (isScope(o1) || isScope(o2) || isWindow(o1) || isWindow(o2) || - isArray(o2) || isDate(o2) || isRegExp(o2)) return false; - keySet = createMap(); - for (key in o1) { - if (key.charAt(0) === '$' || isFunction(o1[key])) continue; - if (!equals(o1[key], o2[key])) return false; - keySet[key] = true; - } - for (key in o2) { - if (!(key in keySet) && - key.charAt(0) !== '$' && - isDefined(o2[key]) && - !isFunction(o2[key])) return false; - } - return true; - } - } - return false; -} - -var csp = function() { - if (!isDefined(csp.rules)) { - - - var ngCspElement = (window.document.querySelector('[ng-csp]') || - window.document.querySelector('[data-ng-csp]')); - - if (ngCspElement) { - var ngCspAttribute = ngCspElement.getAttribute('ng-csp') || - ngCspElement.getAttribute('data-ng-csp'); - csp.rules = { - noUnsafeEval: !ngCspAttribute || (ngCspAttribute.indexOf('no-unsafe-eval') !== -1), - noInlineStyle: !ngCspAttribute || (ngCspAttribute.indexOf('no-inline-style') !== -1) - }; - } else { - csp.rules = { - noUnsafeEval: noUnsafeEval(), - noInlineStyle: false - }; - } - } - - return csp.rules; - - function noUnsafeEval() { - try { - // eslint-disable-next-line no-new, no-new-func - new Function(''); - return false; - } catch (e) { - return true; - } - } -}; - -/** - * @ngdoc directive - * @module ng - * @name ngJq - * - * @element ANY - * @param {string=} ngJq the name of the library available under `window` - * to be used for angular.element - * @description - * Use this directive to force the angular.element library. This should be - * used to force either jqLite by leaving ng-jq blank or setting the name of - * the jquery variable under window (eg. jQuery). - * - * Since AngularJS looks for this directive when it is loaded (doesn't wait for the - * DOMContentLoaded event), it must be placed on an element that comes before the script - * which loads angular. Also, only the first instance of `ng-jq` will be used and all - * others ignored. - * - * @example - * This example shows how to force jqLite using the `ngJq` directive to the `html` tag. - ```html - - - ... - ... - - ``` - * @example - * This example shows how to use a jQuery based library of a different name. - * The library name must be available at the top most 'window'. - ```html - - - ... - ... - - ``` - */ -var jq = function() { - if (isDefined(jq.name_)) return jq.name_; - var el; - var i, ii = ngAttrPrefixes.length, prefix, name; - for (i = 0; i < ii; ++i) { - prefix = ngAttrPrefixes[i]; - el = window.document.querySelector('[' + prefix.replace(':', '\\:') + 'jq]'); - if (el) { - name = el.getAttribute(prefix + 'jq'); - break; - } - } - - return (jq.name_ = name); -}; - -function concat(array1, array2, index) { - return array1.concat(slice.call(array2, index)); -} - -function sliceArgs(args, startIndex) { - return slice.call(args, startIndex || 0); -} - - -/** - * @ngdoc function - * @name angular.bind - * @module ng - * @kind function - * - * @description - * Returns a function which calls function `fn` bound to `self` (`self` becomes the `this` for - * `fn`). You can supply optional `args` that are prebound to the function. This feature is also - * known as [partial application](http://en.wikipedia.org/wiki/Partial_application), as - * distinguished from [function currying](http://en.wikipedia.org/wiki/Currying#Contrast_with_partial_function_application). - * - * @param {Object} self Context which `fn` should be evaluated in. - * @param {function()} fn Function to be bound. - * @param {...*} args Optional arguments to be prebound to the `fn` function call. - * @returns {function()} Function that wraps the `fn` with all the specified bindings. - */ -function bind(self, fn) { - var curryArgs = arguments.length > 2 ? sliceArgs(arguments, 2) : []; - if (isFunction(fn) && !(fn instanceof RegExp)) { - return curryArgs.length - ? function() { - return arguments.length - ? fn.apply(self, concat(curryArgs, arguments, 0)) - : fn.apply(self, curryArgs); - } - : function() { - return arguments.length - ? fn.apply(self, arguments) - : fn.call(self); - }; - } else { - // In IE, native methods are not functions so they cannot be bound (note: they don't need to be). - return fn; - } -} - - -function toJsonReplacer(key, value) { - var val = value; - - if (typeof key === 'string' && key.charAt(0) === '$' && key.charAt(1) === '$') { - val = undefined; - } else if (isWindow(value)) { - val = '$WINDOW'; - } else if (value && window.document === value) { - val = '$DOCUMENT'; - } else if (isScope(value)) { - val = '$SCOPE'; - } - - return val; -} - - -/** - * @ngdoc function - * @name angular.toJson - * @module ng - * @kind function - * - * @description - * Serializes input into a JSON-formatted string. Properties with leading $$ characters will be - * stripped since AngularJS uses this notation internally. - * - * @param {Object|Array|Date|string|number|boolean} obj Input to be serialized into JSON. - * @param {boolean|number} [pretty=2] If set to true, the JSON output will contain newlines and whitespace. - * If set to an integer, the JSON output will contain that many spaces per indentation. - * @returns {string|undefined} JSON-ified string representing `obj`. - * @knownIssue - * - * The Safari browser throws a `RangeError` instead of returning `null` when it tries to stringify a `Date` - * object with an invalid date value. The only reliable way to prevent this is to monkeypatch the - * `Date.prototype.toJSON` method as follows: - * - * ``` - * var _DatetoJSON = Date.prototype.toJSON; - * Date.prototype.toJSON = function() { - * try { - * return _DatetoJSON.call(this); - * } catch(e) { - * if (e instanceof RangeError) { - * return null; - * } - * throw e; - * } - * }; - * ``` - * - * See https://github.com/angular/angular.js/pull/14221 for more information. - */ -function toJson(obj, pretty) { - if (isUndefined(obj)) return undefined; - if (!isNumber(pretty)) { - pretty = pretty ? 2 : null; - } - return JSON.stringify(obj, toJsonReplacer, pretty); -} - - -/** - * @ngdoc function - * @name angular.fromJson - * @module ng - * @kind function - * - * @description - * Deserializes a JSON string. - * - * @param {string} json JSON string to deserialize. - * @returns {Object|Array|string|number} Deserialized JSON string. - */ -function fromJson(json) { - return isString(json) - ? JSON.parse(json) - : json; -} - - -var ALL_COLONS = /:/g; -function timezoneToOffset(timezone, fallback) { - // Support: IE 9-11 only, Edge 13-15+ - // IE/Edge do not "understand" colon (`:`) in timezone - timezone = timezone.replace(ALL_COLONS, ''); - var requestedTimezoneOffset = Date.parse('Jan 01, 1970 00:00:00 ' + timezone) / 60000; - return isNumberNaN(requestedTimezoneOffset) ? fallback : requestedTimezoneOffset; -} - - -function addDateMinutes(date, minutes) { - date = new Date(date.getTime()); - date.setMinutes(date.getMinutes() + minutes); - return date; -} - - -function convertTimezoneToLocal(date, timezone, reverse) { - reverse = reverse ? -1 : 1; - var dateTimezoneOffset = date.getTimezoneOffset(); - var timezoneOffset = timezoneToOffset(timezone, dateTimezoneOffset); - return addDateMinutes(date, reverse * (timezoneOffset - dateTimezoneOffset)); -} - - -/** - * @returns {string} Returns the string representation of the element. - */ -function startingTag(element) { - element = jqLite(element).clone().empty(); - var elemHtml = jqLite('
').append(element).html(); - try { - return element[0].nodeType === NODE_TYPE_TEXT ? lowercase(elemHtml) : - elemHtml. - match(/^(<[^>]+>)/)[1]. - replace(/^<([\w-]+)/, function(match, nodeName) {return '<' + lowercase(nodeName);}); - } catch (e) { - return lowercase(elemHtml); - } - -} - - -///////////////////////////////////////////////// - -/** - * Tries to decode the URI component without throwing an exception. - * - * @private - * @param str value potential URI component to check. - * @returns {boolean} True if `value` can be decoded - * with the decodeURIComponent function. - */ -function tryDecodeURIComponent(value) { - try { - return decodeURIComponent(value); - } catch (e) { - // Ignore any invalid uri component. - } -} - - -/** - * Parses an escaped url query string into key-value pairs. - * @returns {Object.} - */ -function parseKeyValue(/**string*/keyValue) { - var obj = {}; - forEach((keyValue || '').split('&'), function(keyValue) { - var splitPoint, key, val; - if (keyValue) { - key = keyValue = keyValue.replace(/\+/g,'%20'); - splitPoint = keyValue.indexOf('='); - if (splitPoint !== -1) { - key = keyValue.substring(0, splitPoint); - val = keyValue.substring(splitPoint + 1); - } - key = tryDecodeURIComponent(key); - if (isDefined(key)) { - val = isDefined(val) ? tryDecodeURIComponent(val) : true; - if (!hasOwnProperty.call(obj, key)) { - obj[key] = val; - } else if (isArray(obj[key])) { - obj[key].push(val); - } else { - obj[key] = [obj[key],val]; - } - } - } - }); - return obj; -} - -function toKeyValue(obj) { - var parts = []; - forEach(obj, function(value, key) { - if (isArray(value)) { - forEach(value, function(arrayValue) { - parts.push(encodeUriQuery(key, true) + - (arrayValue === true ? '' : '=' + encodeUriQuery(arrayValue, true))); - }); - } else { - parts.push(encodeUriQuery(key, true) + - (value === true ? '' : '=' + encodeUriQuery(value, true))); - } - }); - return parts.length ? parts.join('&') : ''; -} - - -/** - * We need our custom method because encodeURIComponent is too aggressive and doesn't follow - * http://www.ietf.org/rfc/rfc3986.txt with regards to the character set (pchar) allowed in path - * segments: - * segment = *pchar - * pchar = unreserved / pct-encoded / sub-delims / ":" / "@" - * pct-encoded = "%" HEXDIG HEXDIG - * unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~" - * sub-delims = "!" / "$" / "&" / "'" / "(" / ")" - * / "*" / "+" / "," / ";" / "=" - */ -function encodeUriSegment(val) { - return encodeUriQuery(val, true). - replace(/%26/gi, '&'). - replace(/%3D/gi, '='). - replace(/%2B/gi, '+'); -} - - -/** - * This method is intended for encoding *key* or *value* parts of query component. We need a custom - * method because encodeURIComponent is too aggressive and encodes stuff that doesn't have to be - * encoded per http://tools.ietf.org/html/rfc3986: - * query = *( pchar / "/" / "?" ) - * pchar = unreserved / pct-encoded / sub-delims / ":" / "@" - * unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~" - * pct-encoded = "%" HEXDIG HEXDIG - * sub-delims = "!" / "$" / "&" / "'" / "(" / ")" - * / "*" / "+" / "," / ";" / "=" - */ -function encodeUriQuery(val, pctEncodeSpaces) { - return encodeURIComponent(val). - replace(/%40/gi, '@'). - replace(/%3A/gi, ':'). - replace(/%24/g, '$'). - replace(/%2C/gi, ','). - replace(/%3B/gi, ';'). - replace(/%20/g, (pctEncodeSpaces ? '%20' : '+')); -} - -var ngAttrPrefixes = ['ng-', 'data-ng-', 'ng:', 'x-ng-']; - -function getNgAttribute(element, ngAttr) { - var attr, i, ii = ngAttrPrefixes.length; - for (i = 0; i < ii; ++i) { - attr = ngAttrPrefixes[i] + ngAttr; - if (isString(attr = element.getAttribute(attr))) { - return attr; - } - } - return null; -} - -function allowAutoBootstrap(document) { - var script = document.currentScript; - - if (!script) { - // Support: IE 9-11 only - // IE does not have `document.currentScript` - return true; - } - - // If the `currentScript` property has been clobbered just return false, since this indicates a probable attack - if (!(script instanceof window.HTMLScriptElement || script instanceof window.SVGScriptElement)) { - return false; - } - - var attributes = script.attributes; - var srcs = [attributes.getNamedItem('src'), attributes.getNamedItem('href'), attributes.getNamedItem('xlink:href')]; - - return srcs.every(function(src) { - if (!src) { - return true; - } - if (!src.value) { - return false; - } - - var link = document.createElement('a'); - link.href = src.value; - - if (document.location.origin === link.origin) { - // Same-origin resources are always allowed, even for non-whitelisted schemes. - return true; - } - // Disabled bootstrapping unless angular.js was loaded from a known scheme used on the web. - // This is to prevent angular.js bundled with browser extensions from being used to bypass the - // content security policy in web pages and other browser extensions. - switch (link.protocol) { - case 'http:': - case 'https:': - case 'ftp:': - case 'blob:': - case 'file:': - case 'data:': - return true; - default: - return false; - } - }); -} - -// Cached as it has to run during loading so that document.currentScript is available. -var isAutoBootstrapAllowed = allowAutoBootstrap(window.document); - -/** - * @ngdoc directive - * @name ngApp - * @module ng - * - * @element ANY - * @param {angular.Module} ngApp an optional application - * {@link angular.module module} name to load. - * @param {boolean=} ngStrictDi if this attribute is present on the app element, the injector will be - * created in "strict-di" mode. This means that the application will fail to invoke functions which - * do not use explicit function annotation (and are thus unsuitable for minification), as described - * in {@link guide/di the Dependency Injection guide}, and useful debugging info will assist in - * tracking down the root of these bugs. - * - * @description - * - * Use this directive to **auto-bootstrap** an AngularJS application. The `ngApp` directive - * designates the **root element** of the application and is typically placed near the root element - * of the page - e.g. on the `` or `` tags. - * - * There are a few things to keep in mind when using `ngApp`: - * - only one AngularJS application can be auto-bootstrapped per HTML document. The first `ngApp` - * found in the document will be used to define the root element to auto-bootstrap as an - * application. To run multiple applications in an HTML document you must manually bootstrap them using - * {@link angular.bootstrap} instead. - * - AngularJS applications cannot be nested within each other. - * - Do not use a directive that uses {@link ng.$compile#transclusion transclusion} on the same element as `ngApp`. - * This includes directives such as {@link ng.ngIf `ngIf`}, {@link ng.ngInclude `ngInclude`} and - * {@link ngRoute.ngView `ngView`}. - * Doing this misplaces the app {@link ng.$rootElement `$rootElement`} and the app's {@link auto.$injector injector}, - * causing animations to stop working and making the injector inaccessible from outside the app. - * - * You can specify an **AngularJS module** to be used as the root module for the application. This - * module will be loaded into the {@link auto.$injector} when the application is bootstrapped. It - * should contain the application code needed or have dependencies on other modules that will - * contain the code. See {@link angular.module} for more information. - * - * In the example below if the `ngApp` directive were not placed on the `html` element then the - * document would not be compiled, the `AppController` would not be instantiated and the `{{ a+b }}` - * would not be resolved to `3`. - * - * @example - * - * ### Simple Usage - * - * `ngApp` is the easiest, and most common way to bootstrap an application. - * - - -
- I can add: {{a}} + {{b}} = {{ a+b }} -
-
- - angular.module('ngAppDemo', []).controller('ngAppDemoController', function($scope) { - $scope.a = 1; - $scope.b = 2; - }); - -
- * - * @example - * - * ### With `ngStrictDi` - * - * Using `ngStrictDi`, you would see something like this: - * - - -
-
- I can add: {{a}} + {{b}} = {{ a+b }} - -

This renders because the controller does not fail to - instantiate, by using explicit annotation style (see - script.js for details) -

-
- -
- Name:
- Hello, {{name}}! - -

This renders because the controller does not fail to - instantiate, by using explicit annotation style - (see script.js for details) -

-
- -
- I can add: {{a}} + {{b}} = {{ a+b }} - -

The controller could not be instantiated, due to relying - on automatic function annotations (which are disabled in - strict mode). As such, the content of this section is not - interpolated, and there should be an error in your web console. -

-
-
-
- - angular.module('ngAppStrictDemo', []) - // BadController will fail to instantiate, due to relying on automatic function annotation, - // rather than an explicit annotation - .controller('BadController', function($scope) { - $scope.a = 1; - $scope.b = 2; - }) - // Unlike BadController, GoodController1 and GoodController2 will not fail to be instantiated, - // due to using explicit annotations using the array style and $inject property, respectively. - .controller('GoodController1', ['$scope', function($scope) { - $scope.a = 1; - $scope.b = 2; - }]) - .controller('GoodController2', GoodController2); - function GoodController2($scope) { - $scope.name = 'World'; - } - GoodController2.$inject = ['$scope']; - - - div[ng-controller] { - margin-bottom: 1em; - -webkit-border-radius: 4px; - border-radius: 4px; - border: 1px solid; - padding: .5em; - } - div[ng-controller^=Good] { - border-color: #d6e9c6; - background-color: #dff0d8; - color: #3c763d; - } - div[ng-controller^=Bad] { - border-color: #ebccd1; - background-color: #f2dede; - color: #a94442; - margin-bottom: 0; - } - -
- */ -function angularInit(element, bootstrap) { - var appElement, - module, - config = {}; - - // The element `element` has priority over any other element. - forEach(ngAttrPrefixes, function(prefix) { - var name = prefix + 'app'; - - if (!appElement && element.hasAttribute && element.hasAttribute(name)) { - appElement = element; - module = element.getAttribute(name); - } - }); - forEach(ngAttrPrefixes, function(prefix) { - var name = prefix + 'app'; - var candidate; - - if (!appElement && (candidate = element.querySelector('[' + name.replace(':', '\\:') + ']'))) { - appElement = candidate; - module = candidate.getAttribute(name); - } - }); - if (appElement) { - if (!isAutoBootstrapAllowed) { - window.console.error('AngularJS: disabling automatic bootstrap. - * - * - * - * ``` - * - * @param {DOMElement} element DOM element which is the root of AngularJS application. - * @param {Array=} modules an array of modules to load into the application. - * Each item in the array should be the name of a predefined module or a (DI annotated) - * function that will be invoked by the injector as a `config` block. - * See: {@link angular.module modules} - * @param {Object=} config an object for defining configuration options for the application. The - * following keys are supported: - * - * * `strictDi` - disable automatic function annotation for the application. This is meant to - * assist in finding bugs which break minified code. Defaults to `false`. - * - * @returns {auto.$injector} Returns the newly created injector for this app. - */ -function bootstrap(element, modules, config) { - if (!isObject(config)) config = {}; - var defaultConfig = { - strictDi: false - }; - config = extend(defaultConfig, config); - var doBootstrap = function() { - element = jqLite(element); - - if (element.injector()) { - var tag = (element[0] === window.document) ? 'document' : startingTag(element); - // Encode angle brackets to prevent input from being sanitized to empty string #8683. - throw ngMinErr( - 'btstrpd', - 'App already bootstrapped with this element \'{0}\'', - tag.replace(//,'>')); - } - - modules = modules || []; - modules.unshift(['$provide', function($provide) { - $provide.value('$rootElement', element); - }]); - - if (config.debugInfoEnabled) { - // Pushing so that this overrides `debugInfoEnabled` setting defined in user's `modules`. - modules.push(['$compileProvider', function($compileProvider) { - $compileProvider.debugInfoEnabled(true); - }]); - } - - modules.unshift('ng'); - var injector = createInjector(modules, config.strictDi); - injector.invoke(['$rootScope', '$rootElement', '$compile', '$injector', - function bootstrapApply(scope, element, compile, injector) { - scope.$apply(function() { - element.data('$injector', injector); - compile(element)(scope); - }); - }] - ); - return injector; - }; - - var NG_ENABLE_DEBUG_INFO = /^NG_ENABLE_DEBUG_INFO!/; - var NG_DEFER_BOOTSTRAP = /^NG_DEFER_BOOTSTRAP!/; - - if (window && NG_ENABLE_DEBUG_INFO.test(window.name)) { - config.debugInfoEnabled = true; - window.name = window.name.replace(NG_ENABLE_DEBUG_INFO, ''); - } - - if (window && !NG_DEFER_BOOTSTRAP.test(window.name)) { - return doBootstrap(); - } - - window.name = window.name.replace(NG_DEFER_BOOTSTRAP, ''); - angular.resumeBootstrap = function(extraModules) { - forEach(extraModules, function(module) { - modules.push(module); - }); - return doBootstrap(); - }; - - if (isFunction(angular.resumeDeferredBootstrap)) { - angular.resumeDeferredBootstrap(); - } -} - -/** - * @ngdoc function - * @name angular.reloadWithDebugInfo - * @module ng - * @description - * Use this function to reload the current application with debug information turned on. - * This takes precedence over a call to `$compileProvider.debugInfoEnabled(false)`. - * - * See {@link ng.$compileProvider#debugInfoEnabled} for more. - */ -function reloadWithDebugInfo() { - window.name = 'NG_ENABLE_DEBUG_INFO!' + window.name; - window.location.reload(); -} - -/** - * @name angular.getTestability - * @module ng - * @description - * Get the testability service for the instance of AngularJS on the given - * element. - * @param {DOMElement} element DOM element which is the root of AngularJS application. - */ -function getTestability(rootElement) { - var injector = angular.element(rootElement).injector(); - if (!injector) { - throw ngMinErr('test', - 'no injector found for element argument to getTestability'); - } - return injector.get('$$testability'); -} - -var SNAKE_CASE_REGEXP = /[A-Z]/g; -function snake_case(name, separator) { - separator = separator || '_'; - return name.replace(SNAKE_CASE_REGEXP, function(letter, pos) { - return (pos ? separator : '') + letter.toLowerCase(); - }); -} - -var bindJQueryFired = false; -function bindJQuery() { - var originalCleanData; - - if (bindJQueryFired) { - return; - } - - // bind to jQuery if present; - var jqName = jq(); - jQuery = isUndefined(jqName) ? window.jQuery : // use jQuery (if present) - !jqName ? undefined : // use jqLite - window[jqName]; // use jQuery specified by `ngJq` - - // Use jQuery if it exists with proper functionality, otherwise default to us. - // AngularJS 1.2+ requires jQuery 1.7+ for on()/off() support. - // AngularJS 1.3+ technically requires at least jQuery 2.1+ but it may work with older - // versions. It will not work for sure with jQuery <1.7, though. - if (jQuery && jQuery.fn.on) { - jqLite = jQuery; - extend(jQuery.fn, { - scope: JQLitePrototype.scope, - isolateScope: JQLitePrototype.isolateScope, - controller: /** @type {?} */ (JQLitePrototype).controller, - injector: JQLitePrototype.injector, - inheritedData: JQLitePrototype.inheritedData - }); - } else { - jqLite = JQLite; - } - - // All nodes removed from the DOM via various jqLite/jQuery APIs like .remove() - // are passed through jqLite/jQuery.cleanData. Monkey-patch this method to fire - // the $destroy event on all removed nodes. - originalCleanData = jqLite.cleanData; - jqLite.cleanData = function(elems) { - var events; - for (var i = 0, elem; (elem = elems[i]) != null; i++) { - events = (jqLite._data(elem) || {}).events; - if (events && events.$destroy) { - jqLite(elem).triggerHandler('$destroy'); - } - } - originalCleanData(elems); - }; - - angular.element = jqLite; - - // Prevent double-proxying. - bindJQueryFired = true; -} - -/** - * throw error if the argument is falsy. - */ -function assertArg(arg, name, reason) { - if (!arg) { - throw ngMinErr('areq', 'Argument \'{0}\' is {1}', (name || '?'), (reason || 'required')); - } - return arg; -} - -function assertArgFn(arg, name, acceptArrayAnnotation) { - if (acceptArrayAnnotation && isArray(arg)) { - arg = arg[arg.length - 1]; - } - - assertArg(isFunction(arg), name, 'not a function, got ' + - (arg && typeof arg === 'object' ? arg.constructor.name || 'Object' : typeof arg)); - return arg; -} - -/** - * throw error if the name given is hasOwnProperty - * @param {String} name the name to test - * @param {String} context the context in which the name is used, such as module or directive - */ -function assertNotHasOwnProperty(name, context) { - if (name === 'hasOwnProperty') { - throw ngMinErr('badname', 'hasOwnProperty is not a valid {0} name', context); - } -} - -/** - * Return the value accessible from the object by path. Any undefined traversals are ignored - * @param {Object} obj starting object - * @param {String} path path to traverse - * @param {boolean} [bindFnToScope=true] - * @returns {Object} value as accessible by path - */ -//TODO(misko): this function needs to be removed -function getter(obj, path, bindFnToScope) { - if (!path) return obj; - var keys = path.split('.'); - var key; - var lastInstance = obj; - var len = keys.length; - - for (var i = 0; i < len; i++) { - key = keys[i]; - if (obj) { - obj = (lastInstance = obj)[key]; - } - } - if (!bindFnToScope && isFunction(obj)) { - return bind(lastInstance, obj); - } - return obj; -} - -/** - * Return the DOM siblings between the first and last node in the given array. - * @param {Array} array like object - * @returns {Array} the inputted object or a jqLite collection containing the nodes - */ -function getBlockNodes(nodes) { - // TODO(perf): update `nodes` instead of creating a new object? - var node = nodes[0]; - var endNode = nodes[nodes.length - 1]; - var blockNodes; - - for (var i = 1; node !== endNode && (node = node.nextSibling); i++) { - if (blockNodes || nodes[i] !== node) { - if (!blockNodes) { - blockNodes = jqLite(slice.call(nodes, 0, i)); - } - blockNodes.push(node); - } - } - - return blockNodes || nodes; -} - - -/** - * Creates a new object without a prototype. This object is useful for lookup without having to - * guard against prototypically inherited properties via hasOwnProperty. - * - * Related micro-benchmarks: - * - http://jsperf.com/object-create2 - * - http://jsperf.com/proto-map-lookup/2 - * - http://jsperf.com/for-in-vs-object-keys2 - * - * @returns {Object} - */ -function createMap() { - return Object.create(null); -} - -function stringify(value) { - if (value == null) { // null || undefined - return ''; - } - switch (typeof value) { - case 'string': - break; - case 'number': - value = '' + value; - break; - default: - if (hasCustomToString(value) && !isArray(value) && !isDate(value)) { - value = value.toString(); - } else { - value = toJson(value); - } - } - - return value; -} - -var NODE_TYPE_ELEMENT = 1; -var NODE_TYPE_ATTRIBUTE = 2; -var NODE_TYPE_TEXT = 3; -var NODE_TYPE_COMMENT = 8; -var NODE_TYPE_DOCUMENT = 9; -var NODE_TYPE_DOCUMENT_FRAGMENT = 11; - -/** - * @ngdoc type - * @name angular.Module - * @module ng - * @description - * - * Interface for configuring AngularJS {@link angular.module modules}. - */ - -function setupModuleLoader(window) { - - var $injectorMinErr = minErr('$injector'); - var ngMinErr = minErr('ng'); - - function ensure(obj, name, factory) { - return obj[name] || (obj[name] = factory()); - } - - var angular = ensure(window, 'angular', Object); - - // We need to expose `angular.$$minErr` to modules such as `ngResource` that reference it during bootstrap - angular.$$minErr = angular.$$minErr || minErr; - - return ensure(angular, 'module', function() { - /** @type {Object.} */ - var modules = {}; - - /** - * @ngdoc function - * @name angular.module - * @module ng - * @description - * - * The `angular.module` is a global place for creating, registering and retrieving AngularJS - * modules. - * All modules (AngularJS core or 3rd party) that should be available to an application must be - * registered using this mechanism. - * - * Passing one argument retrieves an existing {@link angular.Module}, - * whereas passing more than one argument creates a new {@link angular.Module} - * - * - * # Module - * - * A module is a collection of services, directives, controllers, filters, and configuration information. - * `angular.module` is used to configure the {@link auto.$injector $injector}. - * - * ```js - * // Create a new module - * var myModule = angular.module('myModule', []); - * - * // register a new service - * myModule.value('appName', 'MyCoolApp'); - * - * // configure existing services inside initialization blocks. - * myModule.config(['$locationProvider', function($locationProvider) { - * // Configure existing providers - * $locationProvider.hashPrefix('!'); - * }]); - * ``` - * - * Then you can create an injector and load your modules like this: - * - * ```js - * var injector = angular.injector(['ng', 'myModule']) - * ``` - * - * However it's more likely that you'll just use - * {@link ng.directive:ngApp ngApp} or - * {@link angular.bootstrap} to simplify this process for you. - * - * @param {!string} name The name of the module to create or retrieve. - * @param {!Array.=} requires If specified then new module is being created. If - * unspecified then the module is being retrieved for further configuration. - * @param {Function=} configFn Optional configuration function for the module. Same as - * {@link angular.Module#config Module#config()}. - * @returns {angular.Module} new module with the {@link angular.Module} api. - */ - return function module(name, requires, configFn) { - - var info = {}; - - var assertNotHasOwnProperty = function(name, context) { - if (name === 'hasOwnProperty') { - throw ngMinErr('badname', 'hasOwnProperty is not a valid {0} name', context); - } - }; - - assertNotHasOwnProperty(name, 'module'); - if (requires && modules.hasOwnProperty(name)) { - modules[name] = null; - } - return ensure(modules, name, function() { - if (!requires) { - throw $injectorMinErr('nomod', 'Module \'{0}\' is not available! You either misspelled ' + - 'the module name or forgot to load it. If registering a module ensure that you ' + - 'specify the dependencies as the second argument.', name); - } - - /** @type {!Array.>} */ - var invokeQueue = []; - - /** @type {!Array.} */ - var configBlocks = []; - - /** @type {!Array.} */ - var runBlocks = []; - - var config = invokeLater('$injector', 'invoke', 'push', configBlocks); - - /** @type {angular.Module} */ - var moduleInstance = { - // Private state - _invokeQueue: invokeQueue, - _configBlocks: configBlocks, - _runBlocks: runBlocks, - - /** - * @ngdoc method - * @name angular.Module#info - * @module ng - * - * @param {Object=} info Information about the module - * @returns {Object|Module} The current info object for this module if called as a getter, - * or `this` if called as a setter. - * - * @description - * Read and write custom information about this module. - * For example you could put the version of the module in here. - * - * ```js - * angular.module('myModule', []).info({ version: '1.0.0' }); - * ``` - * - * The version could then be read back out by accessing the module elsewhere: - * - * ``` - * var version = angular.module('myModule').info().version; - * ``` - * - * You can also retrieve this information during runtime via the - * {@link $injector#modules `$injector.modules`} property: - * - * ```js - * var version = $injector.modules['myModule'].info().version; - * ``` - */ - info: function(value) { - if (isDefined(value)) { - if (!isObject(value)) throw ngMinErr('aobj', 'Argument \'{0}\' must be an object', 'value'); - info = value; - return this; - } - return info; - }, - - /** - * @ngdoc property - * @name angular.Module#requires - * @module ng - * - * @description - * Holds the list of modules which the injector will load before the current module is - * loaded. - */ - requires: requires, - - /** - * @ngdoc property - * @name angular.Module#name - * @module ng - * - * @description - * Name of the module. - */ - name: name, - - - /** - * @ngdoc method - * @name angular.Module#provider - * @module ng - * @param {string} name service name - * @param {Function} providerType Construction function for creating new instance of the - * service. - * @description - * See {@link auto.$provide#provider $provide.provider()}. - */ - provider: invokeLaterAndSetModuleName('$provide', 'provider'), - - /** - * @ngdoc method - * @name angular.Module#factory - * @module ng - * @param {string} name service name - * @param {Function} providerFunction Function for creating new instance of the service. - * @description - * See {@link auto.$provide#factory $provide.factory()}. - */ - factory: invokeLaterAndSetModuleName('$provide', 'factory'), - - /** - * @ngdoc method - * @name angular.Module#service - * @module ng - * @param {string} name service name - * @param {Function} constructor A constructor function that will be instantiated. - * @description - * See {@link auto.$provide#service $provide.service()}. - */ - service: invokeLaterAndSetModuleName('$provide', 'service'), - - /** - * @ngdoc method - * @name angular.Module#value - * @module ng - * @param {string} name service name - * @param {*} object Service instance object. - * @description - * See {@link auto.$provide#value $provide.value()}. - */ - value: invokeLater('$provide', 'value'), - - /** - * @ngdoc method - * @name angular.Module#constant - * @module ng - * @param {string} name constant name - * @param {*} object Constant value. - * @description - * Because the constants are fixed, they get applied before other provide methods. - * See {@link auto.$provide#constant $provide.constant()}. - */ - constant: invokeLater('$provide', 'constant', 'unshift'), - - /** - * @ngdoc method - * @name angular.Module#decorator - * @module ng - * @param {string} name The name of the service to decorate. - * @param {Function} decorFn This function will be invoked when the service needs to be - * instantiated and should return the decorated service instance. - * @description - * See {@link auto.$provide#decorator $provide.decorator()}. - */ - decorator: invokeLaterAndSetModuleName('$provide', 'decorator', configBlocks), - - /** - * @ngdoc method - * @name angular.Module#animation - * @module ng - * @param {string} name animation name - * @param {Function} animationFactory Factory function for creating new instance of an - * animation. - * @description - * - * **NOTE**: animations take effect only if the **ngAnimate** module is loaded. - * - * - * Defines an animation hook that can be later used with - * {@link $animate $animate} service and directives that use this service. - * - * ```js - * module.animation('.animation-name', function($inject1, $inject2) { - * return { - * eventName : function(element, done) { - * //code to run the animation - * //once complete, then run done() - * return function cancellationFunction(element) { - * //code to cancel the animation - * } - * } - * } - * }) - * ``` - * - * See {@link ng.$animateProvider#register $animateProvider.register()} and - * {@link ngAnimate ngAnimate module} for more information. - */ - animation: invokeLaterAndSetModuleName('$animateProvider', 'register'), - - /** - * @ngdoc method - * @name angular.Module#filter - * @module ng - * @param {string} name Filter name - this must be a valid AngularJS expression identifier - * @param {Function} filterFactory Factory function for creating new instance of filter. - * @description - * See {@link ng.$filterProvider#register $filterProvider.register()}. - * - *
- * **Note:** Filter names must be valid AngularJS {@link expression} identifiers, such as `uppercase` or `orderBy`. - * Names with special characters, such as hyphens and dots, are not allowed. If you wish to namespace - * your filters, then you can use capitalization (`myappSubsectionFilterx`) or underscores - * (`myapp_subsection_filterx`). - *
- */ - filter: invokeLaterAndSetModuleName('$filterProvider', 'register'), - - /** - * @ngdoc method - * @name angular.Module#controller - * @module ng - * @param {string|Object} name Controller name, or an object map of controllers where the - * keys are the names and the values are the constructors. - * @param {Function} constructor Controller constructor function. - * @description - * See {@link ng.$controllerProvider#register $controllerProvider.register()}. - */ - controller: invokeLaterAndSetModuleName('$controllerProvider', 'register'), - - /** - * @ngdoc method - * @name angular.Module#directive - * @module ng - * @param {string|Object} name Directive name, or an object map of directives where the - * keys are the names and the values are the factories. - * @param {Function} directiveFactory Factory function for creating new instance of - * directives. - * @description - * See {@link ng.$compileProvider#directive $compileProvider.directive()}. - */ - directive: invokeLaterAndSetModuleName('$compileProvider', 'directive'), - - /** - * @ngdoc method - * @name angular.Module#component - * @module ng - * @param {string|Object} name Name of the component in camelCase (i.e. `myComp` which will match ``), - * or an object map of components where the keys are the names and the values are the component definition objects. - * @param {Object} options Component definition object (a simplified - * {@link ng.$compile#directive-definition-object directive definition object}) - * - * @description - * See {@link ng.$compileProvider#component $compileProvider.component()}. - */ - component: invokeLaterAndSetModuleName('$compileProvider', 'component'), - - /** - * @ngdoc method - * @name angular.Module#config - * @module ng - * @param {Function} configFn Execute this function on module load. Useful for service - * configuration. - * @description - * Use this method to configure services by injecting their - * {@link angular.Module#provider `providers`}, e.g. for adding routes to the - * {@link ngRoute.$routeProvider $routeProvider}. - * - * Note that you can only inject {@link angular.Module#provider `providers`} and - * {@link angular.Module#constant `constants`} into this function. - * - * For more about how to configure services, see - * {@link providers#provider-recipe Provider Recipe}. - */ - config: config, - - /** - * @ngdoc method - * @name angular.Module#run - * @module ng - * @param {Function} initializationFn Execute this function after injector creation. - * Useful for application initialization. - * @description - * Use this method to register work which should be performed when the injector is done - * loading all modules. - */ - run: function(block) { - runBlocks.push(block); - return this; - } - }; - - if (configFn) { - config(configFn); - } - - return moduleInstance; - - /** - * @param {string} provider - * @param {string} method - * @param {String=} insertMethod - * @returns {angular.Module} - */ - function invokeLater(provider, method, insertMethod, queue) { - if (!queue) queue = invokeQueue; - return function() { - queue[insertMethod || 'push']([provider, method, arguments]); - return moduleInstance; - }; - } - - /** - * @param {string} provider - * @param {string} method - * @returns {angular.Module} - */ - function invokeLaterAndSetModuleName(provider, method, queue) { - if (!queue) queue = invokeQueue; - return function(recipeName, factoryFunction) { - if (factoryFunction && isFunction(factoryFunction)) factoryFunction.$$moduleName = name; - queue.push([provider, method, arguments]); - return moduleInstance; - }; - } - }); - }; - }); - -} - -/* global shallowCopy: true */ - -/** - * Creates a shallow copy of an object, an array or a primitive. - * - * Assumes that there are no proto properties for objects. - */ -function shallowCopy(src, dst) { - if (isArray(src)) { - dst = dst || []; - - for (var i = 0, ii = src.length; i < ii; i++) { - dst[i] = src[i]; - } - } else if (isObject(src)) { - dst = dst || {}; - - for (var key in src) { - if (!(key.charAt(0) === '$' && key.charAt(1) === '$')) { - dst[key] = src[key]; - } - } - } - - return dst || src; -} - -/* exported toDebugString */ - -function serializeObject(obj, maxDepth) { - var seen = []; - - // There is no direct way to stringify object until reaching a specific depth - // and a very deep object can cause a performance issue, so we copy the object - // based on this specific depth and then stringify it. - if (isValidObjectMaxDepth(maxDepth)) { - // This file is also included in `angular-loader`, so `copy()` might not always be available in - // the closure. Therefore, it is lazily retrieved as `angular.copy()` when needed. - obj = angular.copy(obj, null, maxDepth); - } - return JSON.stringify(obj, function(key, val) { - val = toJsonReplacer(key, val); - if (isObject(val)) { - - if (seen.indexOf(val) >= 0) return '...'; - - seen.push(val); - } - return val; - }); -} - -function toDebugString(obj, maxDepth) { - if (typeof obj === 'function') { - return obj.toString().replace(/ \{[\s\S]*$/, ''); - } else if (isUndefined(obj)) { - return 'undefined'; - } else if (typeof obj !== 'string') { - return serializeObject(obj, maxDepth); - } - return obj; -} - -/* global angularModule: true, - version: true, - - $CompileProvider, - - htmlAnchorDirective, - inputDirective, - hiddenInputBrowserCacheDirective, - formDirective, - scriptDirective, - selectDirective, - optionDirective, - ngBindDirective, - ngBindHtmlDirective, - ngBindTemplateDirective, - ngClassDirective, - ngClassEvenDirective, - ngClassOddDirective, - ngCloakDirective, - ngControllerDirective, - ngFormDirective, - ngHideDirective, - ngIfDirective, - ngIncludeDirective, - ngIncludeFillContentDirective, - ngInitDirective, - ngNonBindableDirective, - ngPluralizeDirective, - ngRefDirective, - ngRepeatDirective, - ngShowDirective, - ngStyleDirective, - ngSwitchDirective, - ngSwitchWhenDirective, - ngSwitchDefaultDirective, - ngOptionsDirective, - ngTranscludeDirective, - ngModelDirective, - ngListDirective, - ngChangeDirective, - patternDirective, - patternDirective, - requiredDirective, - requiredDirective, - minlengthDirective, - minlengthDirective, - maxlengthDirective, - maxlengthDirective, - ngValueDirective, - ngModelOptionsDirective, - ngAttributeAliasDirectives, - ngEventDirectives, - - $AnchorScrollProvider, - $AnimateProvider, - $CoreAnimateCssProvider, - $$CoreAnimateJsProvider, - $$CoreAnimateQueueProvider, - $$AnimateRunnerFactoryProvider, - $$AnimateAsyncRunFactoryProvider, - $BrowserProvider, - $CacheFactoryProvider, - $ControllerProvider, - $DateProvider, - $DocumentProvider, - $$IsDocumentHiddenProvider, - $ExceptionHandlerProvider, - $FilterProvider, - $$ForceReflowProvider, - $InterpolateProvider, - $$IntervalFactoryProvider, - $IntervalProvider, - $HttpProvider, - $HttpParamSerializerProvider, - $HttpParamSerializerJQLikeProvider, - $HttpBackendProvider, - $xhrFactoryProvider, - $jsonpCallbacksProvider, - $LocationProvider, - $LogProvider, - $$MapProvider, - $ParseProvider, - $RootScopeProvider, - $QProvider, - $$QProvider, - $$SanitizeUriProvider, - $SceProvider, - $SceDelegateProvider, - $SnifferProvider, - $$TaskTrackerFactoryProvider, - $TemplateCacheProvider, - $TemplateRequestProvider, - $$TestabilityProvider, - $TimeoutProvider, - $$RAFProvider, - $WindowProvider, - $$jqLiteProvider, - $$CookieReaderProvider -*/ - - -/** - * @ngdoc object - * @name angular.version - * @module ng - * @description - * An object that contains information about the current AngularJS version. - * - * This object has the following properties: - * - * - `full` – `{string}` – Full version string, such as "0.9.18". - * - `major` – `{number}` – Major version number, such as "0". - * - `minor` – `{number}` – Minor version number, such as "9". - * - `dot` – `{number}` – Dot version number, such as "18". - * - `codeName` – `{string}` – Code name of the release, such as "jiggling-armfat". - */ -var version = { - // These placeholder strings will be replaced by grunt's `build` task. - // They need to be double- or single-quoted. - full: '1.7.9', - major: 1, - minor: 7, - dot: 9, - codeName: 'pollution-eradication' -}; - - -function publishExternalAPI(angular) { - extend(angular, { - 'errorHandlingConfig': errorHandlingConfig, - 'bootstrap': bootstrap, - 'copy': copy, - 'extend': extend, - 'merge': merge, - 'equals': equals, - 'element': jqLite, - 'forEach': forEach, - 'injector': createInjector, - 'noop': noop, - 'bind': bind, - 'toJson': toJson, - 'fromJson': fromJson, - 'identity': identity, - 'isUndefined': isUndefined, - 'isDefined': isDefined, - 'isString': isString, - 'isFunction': isFunction, - 'isObject': isObject, - 'isNumber': isNumber, - 'isElement': isElement, - 'isArray': isArray, - 'version': version, - 'isDate': isDate, - 'callbacks': {$$counter: 0}, - 'getTestability': getTestability, - 'reloadWithDebugInfo': reloadWithDebugInfo, - '$$minErr': minErr, - '$$csp': csp, - '$$encodeUriSegment': encodeUriSegment, - '$$encodeUriQuery': encodeUriQuery, - '$$lowercase': lowercase, - '$$stringify': stringify, - '$$uppercase': uppercase - }); - - angularModule = setupModuleLoader(window); - - angularModule('ng', ['ngLocale'], ['$provide', - function ngModule($provide) { - // $$sanitizeUriProvider needs to be before $compileProvider as it is used by it. - $provide.provider({ - $$sanitizeUri: $$SanitizeUriProvider - }); - $provide.provider('$compile', $CompileProvider). - directive({ - a: htmlAnchorDirective, - input: inputDirective, - textarea: inputDirective, - form: formDirective, - script: scriptDirective, - select: selectDirective, - option: optionDirective, - ngBind: ngBindDirective, - ngBindHtml: ngBindHtmlDirective, - ngBindTemplate: ngBindTemplateDirective, - ngClass: ngClassDirective, - ngClassEven: ngClassEvenDirective, - ngClassOdd: ngClassOddDirective, - ngCloak: ngCloakDirective, - ngController: ngControllerDirective, - ngForm: ngFormDirective, - ngHide: ngHideDirective, - ngIf: ngIfDirective, - ngInclude: ngIncludeDirective, - ngInit: ngInitDirective, - ngNonBindable: ngNonBindableDirective, - ngPluralize: ngPluralizeDirective, - ngRef: ngRefDirective, - ngRepeat: ngRepeatDirective, - ngShow: ngShowDirective, - ngStyle: ngStyleDirective, - ngSwitch: ngSwitchDirective, - ngSwitchWhen: ngSwitchWhenDirective, - ngSwitchDefault: ngSwitchDefaultDirective, - ngOptions: ngOptionsDirective, - ngTransclude: ngTranscludeDirective, - ngModel: ngModelDirective, - ngList: ngListDirective, - ngChange: ngChangeDirective, - pattern: patternDirective, - ngPattern: patternDirective, - required: requiredDirective, - ngRequired: requiredDirective, - minlength: minlengthDirective, - ngMinlength: minlengthDirective, - maxlength: maxlengthDirective, - ngMaxlength: maxlengthDirective, - ngValue: ngValueDirective, - ngModelOptions: ngModelOptionsDirective - }). - directive({ - ngInclude: ngIncludeFillContentDirective, - input: hiddenInputBrowserCacheDirective - }). - directive(ngAttributeAliasDirectives). - directive(ngEventDirectives); - $provide.provider({ - $anchorScroll: $AnchorScrollProvider, - $animate: $AnimateProvider, - $animateCss: $CoreAnimateCssProvider, - $$animateJs: $$CoreAnimateJsProvider, - $$animateQueue: $$CoreAnimateQueueProvider, - $$AnimateRunner: $$AnimateRunnerFactoryProvider, - $$animateAsyncRun: $$AnimateAsyncRunFactoryProvider, - $browser: $BrowserProvider, - $cacheFactory: $CacheFactoryProvider, - $controller: $ControllerProvider, - $document: $DocumentProvider, - $$isDocumentHidden: $$IsDocumentHiddenProvider, - $exceptionHandler: $ExceptionHandlerProvider, - $filter: $FilterProvider, - $$forceReflow: $$ForceReflowProvider, - $interpolate: $InterpolateProvider, - $interval: $IntervalProvider, - $$intervalFactory: $$IntervalFactoryProvider, - $http: $HttpProvider, - $httpParamSerializer: $HttpParamSerializerProvider, - $httpParamSerializerJQLike: $HttpParamSerializerJQLikeProvider, - $httpBackend: $HttpBackendProvider, - $xhrFactory: $xhrFactoryProvider, - $jsonpCallbacks: $jsonpCallbacksProvider, - $location: $LocationProvider, - $log: $LogProvider, - $parse: $ParseProvider, - $rootScope: $RootScopeProvider, - $q: $QProvider, - $$q: $$QProvider, - $sce: $SceProvider, - $sceDelegate: $SceDelegateProvider, - $sniffer: $SnifferProvider, - $$taskTrackerFactory: $$TaskTrackerFactoryProvider, - $templateCache: $TemplateCacheProvider, - $templateRequest: $TemplateRequestProvider, - $$testability: $$TestabilityProvider, - $timeout: $TimeoutProvider, - $window: $WindowProvider, - $$rAF: $$RAFProvider, - $$jqLite: $$jqLiteProvider, - $$Map: $$MapProvider, - $$cookieReader: $$CookieReaderProvider - }); - } - ]) - .info({ angularVersion: '1.7.9' }); -} - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * Any commits to this file should be reviewed with security in mind. * - * Changes to this file can potentially create security vulnerabilities. * - * An approval from 2 Core members with history of modifying * - * this file is required. * - * * - * Does the change somehow allow for arbitrary javascript to be executed? * - * Or allows for someone to change the prototype of built-in objects? * - * Or gives undesired access to variables likes document or window? * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -/* global - JQLitePrototype: true, - BOOLEAN_ATTR: true, - ALIASED_ATTR: true -*/ - -////////////////////////////////// -//JQLite -////////////////////////////////// - -/** - * @ngdoc function - * @name angular.element - * @module ng - * @kind function - * - * @description - * Wraps a raw DOM element or HTML string as a [jQuery](http://jquery.com) element. - * - * If jQuery is available, `angular.element` is an alias for the - * [jQuery](http://api.jquery.com/jQuery/) function. If jQuery is not available, `angular.element` - * delegates to AngularJS's built-in subset of jQuery, called "jQuery lite" or **jqLite**. - * - * jqLite is a tiny, API-compatible subset of jQuery that allows - * AngularJS to manipulate the DOM in a cross-browser compatible way. jqLite implements only the most - * commonly needed functionality with the goal of having a very small footprint. - * - * To use `jQuery`, simply ensure it is loaded before the `angular.js` file. You can also use the - * {@link ngJq `ngJq`} directive to specify that jqlite should be used over jQuery, or to use a - * specific version of jQuery if multiple versions exist on the page. - * - *
**Note:** All element references in AngularJS are always wrapped with jQuery or - * jqLite (such as the element argument in a directive's compile / link function). They are never raw DOM references.
- * - *
**Note:** Keep in mind that this function will not find elements - * by tag name / CSS selector. For lookups by tag name, try instead `angular.element(document).find(...)` - * or `$document.find()`, or use the standard DOM APIs, e.g. `document.querySelectorAll()`.
- * - * ## AngularJS's jqLite - * jqLite provides only the following jQuery methods: - * - * - [`addClass()`](http://api.jquery.com/addClass/) - Does not support a function as first argument - * - [`after()`](http://api.jquery.com/after/) - * - [`append()`](http://api.jquery.com/append/) - Contrary to jQuery, this doesn't clone elements - * so will not work correctly when invoked on a jqLite object containing more than one DOM node - * - [`attr()`](http://api.jquery.com/attr/) - Does not support functions as parameters - * - [`bind()`](http://api.jquery.com/bind/) (_deprecated_, use [`on()`](http://api.jquery.com/on/)) - Does not support namespaces, selectors or eventData - * - [`children()`](http://api.jquery.com/children/) - Does not support selectors - * - [`clone()`](http://api.jquery.com/clone/) - * - [`contents()`](http://api.jquery.com/contents/) - * - [`css()`](http://api.jquery.com/css/) - Only retrieves inline-styles, does not call `getComputedStyle()`. - * As a setter, does not convert numbers to strings or append 'px', and also does not have automatic property prefixing. - * - [`data()`](http://api.jquery.com/data/) - * - [`detach()`](http://api.jquery.com/detach/) - * - [`empty()`](http://api.jquery.com/empty/) - * - [`eq()`](http://api.jquery.com/eq/) - * - [`find()`](http://api.jquery.com/find/) - Limited to lookups by tag name - * - [`hasClass()`](http://api.jquery.com/hasClass/) - * - [`html()`](http://api.jquery.com/html/) - * - [`next()`](http://api.jquery.com/next/) - Does not support selectors - * - [`on()`](http://api.jquery.com/on/) - Does not support namespaces, selectors or eventData - * - [`off()`](http://api.jquery.com/off/) - Does not support namespaces, selectors or event object as parameter - * - [`one()`](http://api.jquery.com/one/) - Does not support namespaces or selectors - * - [`parent()`](http://api.jquery.com/parent/) - Does not support selectors - * - [`prepend()`](http://api.jquery.com/prepend/) - * - [`prop()`](http://api.jquery.com/prop/) - * - [`ready()`](http://api.jquery.com/ready/) (_deprecated_, use `angular.element(callback)` instead of `angular.element(document).ready(callback)`) - * - [`remove()`](http://api.jquery.com/remove/) - * - [`removeAttr()`](http://api.jquery.com/removeAttr/) - Does not support multiple attributes - * - [`removeClass()`](http://api.jquery.com/removeClass/) - Does not support a function as first argument - * - [`removeData()`](http://api.jquery.com/removeData/) - * - [`replaceWith()`](http://api.jquery.com/replaceWith/) - * - [`text()`](http://api.jquery.com/text/) - * - [`toggleClass()`](http://api.jquery.com/toggleClass/) - Does not support a function as first argument - * - [`triggerHandler()`](http://api.jquery.com/triggerHandler/) - Passes a dummy event object to handlers - * - [`unbind()`](http://api.jquery.com/unbind/) (_deprecated_, use [`off()`](http://api.jquery.com/off/)) - Does not support namespaces or event object as parameter - * - [`val()`](http://api.jquery.com/val/) - * - [`wrap()`](http://api.jquery.com/wrap/) - * - * ## jQuery/jqLite Extras - * AngularJS also provides the following additional methods and events to both jQuery and jqLite: - * - * ### Events - * - `$destroy` - AngularJS intercepts all jqLite/jQuery's DOM destruction apis and fires this event - * on all DOM nodes being removed. This can be used to clean up any 3rd party bindings to the DOM - * element before it is removed. - * - * ### Methods - * - `controller(name)` - retrieves the controller of the current element or its parent. By default - * retrieves controller associated with the `ngController` directive. If `name` is provided as - * camelCase directive name, then the controller for this directive will be retrieved (e.g. - * `'ngModel'`). - * - `injector()` - retrieves the injector of the current element or its parent. - * - `scope()` - retrieves the {@link ng.$rootScope.Scope scope} of the current - * element or its parent. Requires {@link guide/production#disabling-debug-data Debug Data} to - * be enabled. - * - `isolateScope()` - retrieves an isolate {@link ng.$rootScope.Scope scope} if one is attached directly to the - * current element. This getter should be used only on elements that contain a directive which starts a new isolate - * scope. Calling `scope()` on this element always returns the original non-isolate scope. - * Requires {@link guide/production#disabling-debug-data Debug Data} to be enabled. - * - `inheritedData()` - same as `data()`, but walks up the DOM until a value is found or the top - * parent element is reached. - * - * @knownIssue You cannot spy on `angular.element` if you are using Jasmine version 1.x. See - * https://github.com/angular/angular.js/issues/14251 for more information. - * - * @param {string|DOMElement} element HTML string or DOMElement to be wrapped into jQuery. - * @returns {Object} jQuery object. - */ - -JQLite.expando = 'ng339'; - -var jqCache = JQLite.cache = {}, - jqId = 1; - -/* - * !!! This is an undocumented "private" function !!! - */ -JQLite._data = function(node) { - //jQuery always returns an object on cache miss - return this.cache[node[this.expando]] || {}; -}; - -function jqNextId() { return ++jqId; } - - -var DASH_LOWERCASE_REGEXP = /-([a-z])/g; -var MS_HACK_REGEXP = /^-ms-/; -var MOUSE_EVENT_MAP = { mouseleave: 'mouseout', mouseenter: 'mouseover' }; -var jqLiteMinErr = minErr('jqLite'); - -/** - * Converts kebab-case to camelCase. - * There is also a special case for the ms prefix starting with a lowercase letter. - * @param name Name to normalize - */ -function cssKebabToCamel(name) { - return kebabToCamel(name.replace(MS_HACK_REGEXP, 'ms-')); -} - -function fnCamelCaseReplace(all, letter) { - return letter.toUpperCase(); -} - -/** - * Converts kebab-case to camelCase. - * @param name Name to normalize - */ -function kebabToCamel(name) { - return name - .replace(DASH_LOWERCASE_REGEXP, fnCamelCaseReplace); -} - -var SINGLE_TAG_REGEXP = /^<([\w-]+)\s*\/?>(?:<\/\1>|)$/; -var HTML_REGEXP = /<|&#?\w+;/; -var TAG_NAME_REGEXP = /<([\w:-]+)/; -var XHTML_TAG_REGEXP = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi; - -var wrapMap = { - 'option': [1, ''], - - 'thead': [1, '', '
'], - 'col': [2, '', '
'], - 'tr': [2, '', '
'], - 'td': [3, '', '
'], - '_default': [0, '', ''] -}; - -wrapMap.optgroup = wrapMap.option; -wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; -wrapMap.th = wrapMap.td; - - -function jqLiteIsTextNode(html) { - return !HTML_REGEXP.test(html); -} - -function jqLiteAcceptsData(node) { - // The window object can accept data but has no nodeType - // Otherwise we are only interested in elements (1) and documents (9) - var nodeType = node.nodeType; - return nodeType === NODE_TYPE_ELEMENT || !nodeType || nodeType === NODE_TYPE_DOCUMENT; -} - -function jqLiteHasData(node) { - for (var key in jqCache[node.ng339]) { - return true; - } - return false; -} - -function jqLiteBuildFragment(html, context) { - var tmp, tag, wrap, - fragment = context.createDocumentFragment(), - nodes = [], i; - - if (jqLiteIsTextNode(html)) { - // Convert non-html into a text node - nodes.push(context.createTextNode(html)); - } else { - // Convert html into DOM nodes - tmp = fragment.appendChild(context.createElement('div')); - tag = (TAG_NAME_REGEXP.exec(html) || ['', ''])[1].toLowerCase(); - wrap = wrapMap[tag] || wrapMap._default; - tmp.innerHTML = wrap[1] + html.replace(XHTML_TAG_REGEXP, '<$1>') + wrap[2]; - - // Descend through wrappers to the right content - i = wrap[0]; - while (i--) { - tmp = tmp.lastChild; - } - - nodes = concat(nodes, tmp.childNodes); - - tmp = fragment.firstChild; - tmp.textContent = ''; - } - - // Remove wrapper from fragment - fragment.textContent = ''; - fragment.innerHTML = ''; // Clear inner HTML - forEach(nodes, function(node) { - fragment.appendChild(node); - }); - - return fragment; -} - -function jqLiteParseHTML(html, context) { - context = context || window.document; - var parsed; - - if ((parsed = SINGLE_TAG_REGEXP.exec(html))) { - return [context.createElement(parsed[1])]; - } - - if ((parsed = jqLiteBuildFragment(html, context))) { - return parsed.childNodes; - } - - return []; -} - -function jqLiteWrapNode(node, wrapper) { - var parent = node.parentNode; - - if (parent) { - parent.replaceChild(wrapper, node); - } - - wrapper.appendChild(node); -} - - -// IE9-11 has no method "contains" in SVG element and in Node.prototype. Bug #10259. -var jqLiteContains = window.Node.prototype.contains || /** @this */ function(arg) { - // eslint-disable-next-line no-bitwise - return !!(this.compareDocumentPosition(arg) & 16); -}; - -///////////////////////////////////////////// -function JQLite(element) { - if (element instanceof JQLite) { - return element; - } - - var argIsString; - - if (isString(element)) { - element = trim(element); - argIsString = true; - } - if (!(this instanceof JQLite)) { - if (argIsString && element.charAt(0) !== '<') { - throw jqLiteMinErr('nosel', 'Looking up elements via selectors is not supported by jqLite! See: http://docs.angularjs.org/api/angular.element'); - } - return new JQLite(element); - } - - if (argIsString) { - jqLiteAddNodes(this, jqLiteParseHTML(element)); - } else if (isFunction(element)) { - jqLiteReady(element); - } else { - jqLiteAddNodes(this, element); - } -} - -function jqLiteClone(element) { - return element.cloneNode(true); -} - -function jqLiteDealoc(element, onlyDescendants) { - if (!onlyDescendants && jqLiteAcceptsData(element)) jqLite.cleanData([element]); - - if (element.querySelectorAll) { - jqLite.cleanData(element.querySelectorAll('*')); - } -} - -function isEmptyObject(obj) { - var name; - - for (name in obj) { - return false; - } - return true; -} - -function removeIfEmptyData(element) { - var expandoId = element.ng339; - var expandoStore = expandoId && jqCache[expandoId]; - - var events = expandoStore && expandoStore.events; - var data = expandoStore && expandoStore.data; - - if ((!data || isEmptyObject(data)) && (!events || isEmptyObject(events))) { - delete jqCache[expandoId]; - element.ng339 = undefined; // don't delete DOM expandos. IE and Chrome don't like it - } -} - -function jqLiteOff(element, type, fn, unsupported) { - if (isDefined(unsupported)) throw jqLiteMinErr('offargs', 'jqLite#off() does not support the `selector` argument'); - - var expandoStore = jqLiteExpandoStore(element); - var events = expandoStore && expandoStore.events; - var handle = expandoStore && expandoStore.handle; - - if (!handle) return; //no listeners registered - - if (!type) { - for (type in events) { - if (type !== '$destroy') { - element.removeEventListener(type, handle); - } - delete events[type]; - } - } else { - - var removeHandler = function(type) { - var listenerFns = events[type]; - if (isDefined(fn)) { - arrayRemove(listenerFns || [], fn); - } - if (!(isDefined(fn) && listenerFns && listenerFns.length > 0)) { - element.removeEventListener(type, handle); - delete events[type]; - } - }; - - forEach(type.split(' '), function(type) { - removeHandler(type); - if (MOUSE_EVENT_MAP[type]) { - removeHandler(MOUSE_EVENT_MAP[type]); - } - }); - } - - removeIfEmptyData(element); -} - -function jqLiteRemoveData(element, name) { - var expandoId = element.ng339; - var expandoStore = expandoId && jqCache[expandoId]; - - if (expandoStore) { - if (name) { - delete expandoStore.data[name]; - } else { - expandoStore.data = {}; - } - - removeIfEmptyData(element); - } -} - - -function jqLiteExpandoStore(element, createIfNecessary) { - var expandoId = element.ng339, - expandoStore = expandoId && jqCache[expandoId]; - - if (createIfNecessary && !expandoStore) { - element.ng339 = expandoId = jqNextId(); - expandoStore = jqCache[expandoId] = {events: {}, data: {}, handle: undefined}; - } - - return expandoStore; -} - - -function jqLiteData(element, key, value) { - if (jqLiteAcceptsData(element)) { - var prop; - - var isSimpleSetter = isDefined(value); - var isSimpleGetter = !isSimpleSetter && key && !isObject(key); - var massGetter = !key; - var expandoStore = jqLiteExpandoStore(element, !isSimpleGetter); - var data = expandoStore && expandoStore.data; - - if (isSimpleSetter) { // data('key', value) - data[kebabToCamel(key)] = value; - } else { - if (massGetter) { // data() - return data; - } else { - if (isSimpleGetter) { // data('key') - // don't force creation of expandoStore if it doesn't exist yet - return data && data[kebabToCamel(key)]; - } else { // mass-setter: data({key1: val1, key2: val2}) - for (prop in key) { - data[kebabToCamel(prop)] = key[prop]; - } - } - } - } - } -} - -function jqLiteHasClass(element, selector) { - if (!element.getAttribute) return false; - return ((' ' + (element.getAttribute('class') || '') + ' ').replace(/[\n\t]/g, ' '). - indexOf(' ' + selector + ' ') > -1); -} - -function jqLiteRemoveClass(element, cssClasses) { - if (cssClasses && element.setAttribute) { - var existingClasses = (' ' + (element.getAttribute('class') || '') + ' ') - .replace(/[\n\t]/g, ' '); - var newClasses = existingClasses; - - forEach(cssClasses.split(' '), function(cssClass) { - cssClass = trim(cssClass); - newClasses = newClasses.replace(' ' + cssClass + ' ', ' '); - }); - - if (newClasses !== existingClasses) { - element.setAttribute('class', trim(newClasses)); - } - } -} - -function jqLiteAddClass(element, cssClasses) { - if (cssClasses && element.setAttribute) { - var existingClasses = (' ' + (element.getAttribute('class') || '') + ' ') - .replace(/[\n\t]/g, ' '); - var newClasses = existingClasses; - - forEach(cssClasses.split(' '), function(cssClass) { - cssClass = trim(cssClass); - if (newClasses.indexOf(' ' + cssClass + ' ') === -1) { - newClasses += cssClass + ' '; - } - }); - - if (newClasses !== existingClasses) { - element.setAttribute('class', trim(newClasses)); - } - } -} - - -function jqLiteAddNodes(root, elements) { - // THIS CODE IS VERY HOT. Don't make changes without benchmarking. - - if (elements) { - - // if a Node (the most common case) - if (elements.nodeType) { - root[root.length++] = elements; - } else { - var length = elements.length; - - // if an Array or NodeList and not a Window - if (typeof length === 'number' && elements.window !== elements) { - if (length) { - for (var i = 0; i < length; i++) { - root[root.length++] = elements[i]; - } - } - } else { - root[root.length++] = elements; - } - } - } -} - - -function jqLiteController(element, name) { - return jqLiteInheritedData(element, '$' + (name || 'ngController') + 'Controller'); -} - -function jqLiteInheritedData(element, name, value) { - // if element is the document object work with the html element instead - // this makes $(document).scope() possible - if (element.nodeType === NODE_TYPE_DOCUMENT) { - element = element.documentElement; - } - var names = isArray(name) ? name : [name]; - - while (element) { - for (var i = 0, ii = names.length; i < ii; i++) { - if (isDefined(value = jqLite.data(element, names[i]))) return value; - } - - // If dealing with a document fragment node with a host element, and no parent, use the host - // element as the parent. This enables directives within a Shadow DOM or polyfilled Shadow DOM - // to lookup parent controllers. - element = element.parentNode || (element.nodeType === NODE_TYPE_DOCUMENT_FRAGMENT && element.host); - } -} - -function jqLiteEmpty(element) { - jqLiteDealoc(element, true); - while (element.firstChild) { - element.removeChild(element.firstChild); - } -} - -function jqLiteRemove(element, keepData) { - if (!keepData) jqLiteDealoc(element); - var parent = element.parentNode; - if (parent) parent.removeChild(element); -} - - -function jqLiteDocumentLoaded(action, win) { - win = win || window; - if (win.document.readyState === 'complete') { - // Force the action to be run async for consistent behavior - // from the action's point of view - // i.e. it will definitely not be in a $apply - win.setTimeout(action); - } else { - // No need to unbind this handler as load is only ever called once - jqLite(win).on('load', action); - } -} - -function jqLiteReady(fn) { - function trigger() { - window.document.removeEventListener('DOMContentLoaded', trigger); - window.removeEventListener('load', trigger); - fn(); - } - - // check if document is already loaded - if (window.document.readyState === 'complete') { - window.setTimeout(fn); - } else { - // We can not use jqLite since we are not done loading and jQuery could be loaded later. - - // Works for modern browsers and IE9 - window.document.addEventListener('DOMContentLoaded', trigger); - - // Fallback to window.onload for others - window.addEventListener('load', trigger); - } -} - -////////////////////////////////////////// -// Functions which are declared directly. -////////////////////////////////////////// -var JQLitePrototype = JQLite.prototype = { - ready: jqLiteReady, - toString: function() { - var value = []; - forEach(this, function(e) { value.push('' + e);}); - return '[' + value.join(', ') + ']'; - }, - - eq: function(index) { - return (index >= 0) ? jqLite(this[index]) : jqLite(this[this.length + index]); - }, - - length: 0, - push: push, - sort: [].sort, - splice: [].splice -}; - -////////////////////////////////////////// -// Functions iterating getter/setters. -// these functions return self on setter and -// value on get. -////////////////////////////////////////// -var BOOLEAN_ATTR = {}; -forEach('multiple,selected,checked,disabled,readOnly,required,open'.split(','), function(value) { - BOOLEAN_ATTR[lowercase(value)] = value; -}); -var BOOLEAN_ELEMENTS = {}; -forEach('input,select,option,textarea,button,form,details'.split(','), function(value) { - BOOLEAN_ELEMENTS[value] = true; -}); -var ALIASED_ATTR = { - 'ngMinlength': 'minlength', - 'ngMaxlength': 'maxlength', - 'ngMin': 'min', - 'ngMax': 'max', - 'ngPattern': 'pattern', - 'ngStep': 'step' -}; - -function getBooleanAttrName(element, name) { - // check dom last since we will most likely fail on name - var booleanAttr = BOOLEAN_ATTR[name.toLowerCase()]; - - // booleanAttr is here twice to minimize DOM access - return booleanAttr && BOOLEAN_ELEMENTS[nodeName_(element)] && booleanAttr; -} - -function getAliasedAttrName(name) { - return ALIASED_ATTR[name]; -} - -forEach({ - data: jqLiteData, - removeData: jqLiteRemoveData, - hasData: jqLiteHasData, - cleanData: function jqLiteCleanData(nodes) { - for (var i = 0, ii = nodes.length; i < ii; i++) { - jqLiteRemoveData(nodes[i]); - jqLiteOff(nodes[i]); - } - } -}, function(fn, name) { - JQLite[name] = fn; -}); - -forEach({ - data: jqLiteData, - inheritedData: jqLiteInheritedData, - - scope: function(element) { - // Can't use jqLiteData here directly so we stay compatible with jQuery! - return jqLite.data(element, '$scope') || jqLiteInheritedData(element.parentNode || element, ['$isolateScope', '$scope']); - }, - - isolateScope: function(element) { - // Can't use jqLiteData here directly so we stay compatible with jQuery! - return jqLite.data(element, '$isolateScope') || jqLite.data(element, '$isolateScopeNoTemplate'); - }, - - controller: jqLiteController, - - injector: function(element) { - return jqLiteInheritedData(element, '$injector'); - }, - - removeAttr: function(element, name) { - element.removeAttribute(name); - }, - - hasClass: jqLiteHasClass, - - css: function(element, name, value) { - name = cssKebabToCamel(name); - - if (isDefined(value)) { - element.style[name] = value; - } else { - return element.style[name]; - } - }, - - attr: function(element, name, value) { - var ret; - var nodeType = element.nodeType; - if (nodeType === NODE_TYPE_TEXT || nodeType === NODE_TYPE_ATTRIBUTE || nodeType === NODE_TYPE_COMMENT || - !element.getAttribute) { - return; - } - - var lowercasedName = lowercase(name); - var isBooleanAttr = BOOLEAN_ATTR[lowercasedName]; - - if (isDefined(value)) { - // setter - - if (value === null || (value === false && isBooleanAttr)) { - element.removeAttribute(name); - } else { - element.setAttribute(name, isBooleanAttr ? lowercasedName : value); - } - } else { - // getter - - ret = element.getAttribute(name); - - if (isBooleanAttr && ret !== null) { - ret = lowercasedName; - } - // Normalize non-existing attributes to undefined (as jQuery). - return ret === null ? undefined : ret; - } - }, - - prop: function(element, name, value) { - if (isDefined(value)) { - element[name] = value; - } else { - return element[name]; - } - }, - - text: (function() { - getText.$dv = ''; - return getText; - - function getText(element, value) { - if (isUndefined(value)) { - var nodeType = element.nodeType; - return (nodeType === NODE_TYPE_ELEMENT || nodeType === NODE_TYPE_TEXT) ? element.textContent : ''; - } - element.textContent = value; - } - })(), - - val: function(element, value) { - if (isUndefined(value)) { - if (element.multiple && nodeName_(element) === 'select') { - var result = []; - forEach(element.options, function(option) { - if (option.selected) { - result.push(option.value || option.text); - } - }); - return result; - } - return element.value; - } - element.value = value; - }, - - html: function(element, value) { - if (isUndefined(value)) { - return element.innerHTML; - } - jqLiteDealoc(element, true); - element.innerHTML = value; - }, - - empty: jqLiteEmpty -}, function(fn, name) { - /** - * Properties: writes return selection, reads return first value - */ - JQLite.prototype[name] = function(arg1, arg2) { - var i, key; - var nodeCount = this.length; - - // jqLiteHasClass has only two arguments, but is a getter-only fn, so we need to special-case it - // in a way that survives minification. - // jqLiteEmpty takes no arguments but is a setter. - if (fn !== jqLiteEmpty && - (isUndefined((fn.length === 2 && (fn !== jqLiteHasClass && fn !== jqLiteController)) ? arg1 : arg2))) { - if (isObject(arg1)) { - - // we are a write, but the object properties are the key/values - for (i = 0; i < nodeCount; i++) { - if (fn === jqLiteData) { - // data() takes the whole object in jQuery - fn(this[i], arg1); - } else { - for (key in arg1) { - fn(this[i], key, arg1[key]); - } - } - } - // return self for chaining - return this; - } else { - // we are a read, so read the first child. - // TODO: do we still need this? - var value = fn.$dv; - // Only if we have $dv do we iterate over all, otherwise it is just the first element. - var jj = (isUndefined(value)) ? Math.min(nodeCount, 1) : nodeCount; - for (var j = 0; j < jj; j++) { - var nodeValue = fn(this[j], arg1, arg2); - value = value ? value + nodeValue : nodeValue; - } - return value; - } - } else { - // we are a write, so apply to all children - for (i = 0; i < nodeCount; i++) { - fn(this[i], arg1, arg2); - } - // return self for chaining - return this; - } - }; -}); - -function createEventHandler(element, events) { - var eventHandler = function(event, type) { - // jQuery specific api - event.isDefaultPrevented = function() { - return event.defaultPrevented; - }; - - var eventFns = events[type || event.type]; - var eventFnsLength = eventFns ? eventFns.length : 0; - - if (!eventFnsLength) return; - - if (isUndefined(event.immediatePropagationStopped)) { - var originalStopImmediatePropagation = event.stopImmediatePropagation; - event.stopImmediatePropagation = function() { - event.immediatePropagationStopped = true; - - if (event.stopPropagation) { - event.stopPropagation(); - } - - if (originalStopImmediatePropagation) { - originalStopImmediatePropagation.call(event); - } - }; - } - - event.isImmediatePropagationStopped = function() { - return event.immediatePropagationStopped === true; - }; - - // Some events have special handlers that wrap the real handler - var handlerWrapper = eventFns.specialHandlerWrapper || defaultHandlerWrapper; - - // Copy event handlers in case event handlers array is modified during execution. - if ((eventFnsLength > 1)) { - eventFns = shallowCopy(eventFns); - } - - for (var i = 0; i < eventFnsLength; i++) { - if (!event.isImmediatePropagationStopped()) { - handlerWrapper(element, event, eventFns[i]); - } - } - }; - - // TODO: this is a hack for angularMocks/clearDataCache that makes it possible to deregister all - // events on `element` - eventHandler.elem = element; - return eventHandler; -} - -function defaultHandlerWrapper(element, event, handler) { - handler.call(element, event); -} - -function specialMouseHandlerWrapper(target, event, handler) { - // Refer to jQuery's implementation of mouseenter & mouseleave - // Read about mouseenter and mouseleave: - // http://www.quirksmode.org/js/events_mouse.html#link8 - var related = event.relatedTarget; - // For mousenter/leave call the handler if related is outside the target. - // NB: No relatedTarget if the mouse left/entered the browser window - if (!related || (related !== target && !jqLiteContains.call(target, related))) { - handler.call(target, event); - } -} - -////////////////////////////////////////// -// Functions iterating traversal. -// These functions chain results into a single -// selector. -////////////////////////////////////////// -forEach({ - removeData: jqLiteRemoveData, - - on: function jqLiteOn(element, type, fn, unsupported) { - if (isDefined(unsupported)) throw jqLiteMinErr('onargs', 'jqLite#on() does not support the `selector` or `eventData` parameters'); - - // Do not add event handlers to non-elements because they will not be cleaned up. - if (!jqLiteAcceptsData(element)) { - return; - } - - var expandoStore = jqLiteExpandoStore(element, true); - var events = expandoStore.events; - var handle = expandoStore.handle; - - if (!handle) { - handle = expandoStore.handle = createEventHandler(element, events); - } - - // http://jsperf.com/string-indexof-vs-split - var types = type.indexOf(' ') >= 0 ? type.split(' ') : [type]; - var i = types.length; - - var addHandler = function(type, specialHandlerWrapper, noEventListener) { - var eventFns = events[type]; - - if (!eventFns) { - eventFns = events[type] = []; - eventFns.specialHandlerWrapper = specialHandlerWrapper; - if (type !== '$destroy' && !noEventListener) { - element.addEventListener(type, handle); - } - } - - eventFns.push(fn); - }; - - while (i--) { - type = types[i]; - if (MOUSE_EVENT_MAP[type]) { - addHandler(MOUSE_EVENT_MAP[type], specialMouseHandlerWrapper); - addHandler(type, undefined, true); - } else { - addHandler(type); - } - } - }, - - off: jqLiteOff, - - one: function(element, type, fn) { - element = jqLite(element); - - //add the listener twice so that when it is called - //you can remove the original function and still be - //able to call element.off(ev, fn) normally - element.on(type, function onFn() { - element.off(type, fn); - element.off(type, onFn); - }); - element.on(type, fn); - }, - - replaceWith: function(element, replaceNode) { - var index, parent = element.parentNode; - jqLiteDealoc(element); - forEach(new JQLite(replaceNode), function(node) { - if (index) { - parent.insertBefore(node, index.nextSibling); - } else { - parent.replaceChild(node, element); - } - index = node; - }); - }, - - children: function(element) { - var children = []; - forEach(element.childNodes, function(element) { - if (element.nodeType === NODE_TYPE_ELEMENT) { - children.push(element); - } - }); - return children; - }, - - contents: function(element) { - return element.contentDocument || element.childNodes || []; - }, - - append: function(element, node) { - var nodeType = element.nodeType; - if (nodeType !== NODE_TYPE_ELEMENT && nodeType !== NODE_TYPE_DOCUMENT_FRAGMENT) return; - - node = new JQLite(node); - - for (var i = 0, ii = node.length; i < ii; i++) { - var child = node[i]; - element.appendChild(child); - } - }, - - prepend: function(element, node) { - if (element.nodeType === NODE_TYPE_ELEMENT) { - var index = element.firstChild; - forEach(new JQLite(node), function(child) { - element.insertBefore(child, index); - }); - } - }, - - wrap: function(element, wrapNode) { - jqLiteWrapNode(element, jqLite(wrapNode).eq(0).clone()[0]); - }, - - remove: jqLiteRemove, - - detach: function(element) { - jqLiteRemove(element, true); - }, - - after: function(element, newElement) { - var index = element, parent = element.parentNode; - - if (parent) { - newElement = new JQLite(newElement); - - for (var i = 0, ii = newElement.length; i < ii; i++) { - var node = newElement[i]; - parent.insertBefore(node, index.nextSibling); - index = node; - } - } - }, - - addClass: jqLiteAddClass, - removeClass: jqLiteRemoveClass, - - toggleClass: function(element, selector, condition) { - if (selector) { - forEach(selector.split(' '), function(className) { - var classCondition = condition; - if (isUndefined(classCondition)) { - classCondition = !jqLiteHasClass(element, className); - } - (classCondition ? jqLiteAddClass : jqLiteRemoveClass)(element, className); - }); - } - }, - - parent: function(element) { - var parent = element.parentNode; - return parent && parent.nodeType !== NODE_TYPE_DOCUMENT_FRAGMENT ? parent : null; - }, - - next: function(element) { - return element.nextElementSibling; - }, - - find: function(element, selector) { - if (element.getElementsByTagName) { - return element.getElementsByTagName(selector); - } else { - return []; - } - }, - - clone: jqLiteClone, - - triggerHandler: function(element, event, extraParameters) { - - var dummyEvent, eventFnsCopy, handlerArgs; - var eventName = event.type || event; - var expandoStore = jqLiteExpandoStore(element); - var events = expandoStore && expandoStore.events; - var eventFns = events && events[eventName]; - - if (eventFns) { - // Create a dummy event to pass to the handlers - dummyEvent = { - preventDefault: function() { this.defaultPrevented = true; }, - isDefaultPrevented: function() { return this.defaultPrevented === true; }, - stopImmediatePropagation: function() { this.immediatePropagationStopped = true; }, - isImmediatePropagationStopped: function() { return this.immediatePropagationStopped === true; }, - stopPropagation: noop, - type: eventName, - target: element - }; - - // If a custom event was provided then extend our dummy event with it - if (event.type) { - dummyEvent = extend(dummyEvent, event); - } - - // Copy event handlers in case event handlers array is modified during execution. - eventFnsCopy = shallowCopy(eventFns); - handlerArgs = extraParameters ? [dummyEvent].concat(extraParameters) : [dummyEvent]; - - forEach(eventFnsCopy, function(fn) { - if (!dummyEvent.isImmediatePropagationStopped()) { - fn.apply(element, handlerArgs); - } - }); - } - } -}, function(fn, name) { - /** - * chaining functions - */ - JQLite.prototype[name] = function(arg1, arg2, arg3) { - var value; - - for (var i = 0, ii = this.length; i < ii; i++) { - if (isUndefined(value)) { - value = fn(this[i], arg1, arg2, arg3); - if (isDefined(value)) { - // any function which returns a value needs to be wrapped - value = jqLite(value); - } - } else { - jqLiteAddNodes(value, fn(this[i], arg1, arg2, arg3)); - } - } - return isDefined(value) ? value : this; - }; -}); - -// bind legacy bind/unbind to on/off -JQLite.prototype.bind = JQLite.prototype.on; -JQLite.prototype.unbind = JQLite.prototype.off; - - -// Provider for private $$jqLite service -/** @this */ -function $$jqLiteProvider() { - this.$get = function $$jqLite() { - return extend(JQLite, { - hasClass: function(node, classes) { - if (node.attr) node = node[0]; - return jqLiteHasClass(node, classes); - }, - addClass: function(node, classes) { - if (node.attr) node = node[0]; - return jqLiteAddClass(node, classes); - }, - removeClass: function(node, classes) { - if (node.attr) node = node[0]; - return jqLiteRemoveClass(node, classes); - } - }); - }; -} - -/** - * Computes a hash of an 'obj'. - * Hash of a: - * string is string - * number is number as string - * object is either result of calling $$hashKey function on the object or uniquely generated id, - * that is also assigned to the $$hashKey property of the object. - * - * @param obj - * @returns {string} hash string such that the same input will have the same hash string. - * The resulting string key is in 'type:hashKey' format. - */ -function hashKey(obj, nextUidFn) { - var key = obj && obj.$$hashKey; - - if (key) { - if (typeof key === 'function') { - key = obj.$$hashKey(); - } - return key; - } - - var objType = typeof obj; - if (objType === 'function' || (objType === 'object' && obj !== null)) { - key = obj.$$hashKey = objType + ':' + (nextUidFn || nextUid)(); - } else { - key = objType + ':' + obj; - } - - return key; -} - -// A minimal ES2015 Map implementation. -// Should be bug/feature equivalent to the native implementations of supported browsers -// (for the features required in Angular). -// See https://kangax.github.io/compat-table/es6/#test-Map -var nanKey = Object.create(null); -function NgMapShim() { - this._keys = []; - this._values = []; - this._lastKey = NaN; - this._lastIndex = -1; -} -NgMapShim.prototype = { - _idx: function(key) { - if (key !== this._lastKey) { - this._lastKey = key; - this._lastIndex = this._keys.indexOf(key); - } - return this._lastIndex; - }, - _transformKey: function(key) { - return isNumberNaN(key) ? nanKey : key; - }, - get: function(key) { - key = this._transformKey(key); - var idx = this._idx(key); - if (idx !== -1) { - return this._values[idx]; - } - }, - has: function(key) { - key = this._transformKey(key); - var idx = this._idx(key); - return idx !== -1; - }, - set: function(key, value) { - key = this._transformKey(key); - var idx = this._idx(key); - if (idx === -1) { - idx = this._lastIndex = this._keys.length; - } - this._keys[idx] = key; - this._values[idx] = value; - - // Support: IE11 - // Do not `return this` to simulate the partial IE11 implementation - }, - delete: function(key) { - key = this._transformKey(key); - var idx = this._idx(key); - if (idx === -1) { - return false; - } - this._keys.splice(idx, 1); - this._values.splice(idx, 1); - this._lastKey = NaN; - this._lastIndex = -1; - return true; - } -}; - -// For now, always use `NgMapShim`, even if `window.Map` is available. Some native implementations -// are still buggy (often in subtle ways) and can cause hard-to-debug failures. When native `Map` -// implementations get more stable, we can reconsider switching to `window.Map` (when available). -var NgMap = NgMapShim; - -var $$MapProvider = [/** @this */function() { - this.$get = [function() { - return NgMap; - }]; -}]; - -/** - * @ngdoc function - * @module ng - * @name angular.injector - * @kind function - * - * @description - * Creates an injector object that can be used for retrieving services as well as for - * dependency injection (see {@link guide/di dependency injection}). - * - * @param {Array.} modules A list of module functions or their aliases. See - * {@link angular.module}. The `ng` module must be explicitly added. - * @param {boolean=} [strictDi=false] Whether the injector should be in strict mode, which - * disallows argument name annotation inference. - * @returns {injector} Injector object. See {@link auto.$injector $injector}. - * - * @example - * Typical usage - * ```js - * // create an injector - * var $injector = angular.injector(['ng']); - * - * // use the injector to kick off your application - * // use the type inference to auto inject arguments, or use implicit injection - * $injector.invoke(function($rootScope, $compile, $document) { - * $compile($document)($rootScope); - * $rootScope.$digest(); - * }); - * ``` - * - * Sometimes you want to get access to the injector of a currently running AngularJS app - * from outside AngularJS. Perhaps, you want to inject and compile some markup after the - * application has been bootstrapped. You can do this using the extra `injector()` added - * to JQuery/jqLite elements. See {@link angular.element}. - * - * *This is fairly rare but could be the case if a third party library is injecting the - * markup.* - * - * In the following example a new block of HTML containing a `ng-controller` - * directive is added to the end of the document body by JQuery. We then compile and link - * it into the current AngularJS scope. - * - * ```js - * var $div = $('
{{content.label}}
'); - * $(document.body).append($div); - * - * angular.element(document).injector().invoke(function($compile) { - * var scope = angular.element($div).scope(); - * $compile($div)(scope); - * }); - * ``` - */ - - -/** - * @ngdoc module - * @name auto - * @installation - * @description - * - * Implicit module which gets automatically added to each {@link auto.$injector $injector}. - */ - -var ARROW_ARG = /^([^(]+?)=>/; -var FN_ARGS = /^[^(]*\(\s*([^)]*)\)/m; -var FN_ARG_SPLIT = /,/; -var FN_ARG = /^\s*(_?)(\S+?)\1\s*$/; -var STRIP_COMMENTS = /((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg; -var $injectorMinErr = minErr('$injector'); - -function stringifyFn(fn) { - return Function.prototype.toString.call(fn); -} - -function extractArgs(fn) { - var fnText = stringifyFn(fn).replace(STRIP_COMMENTS, ''), - args = fnText.match(ARROW_ARG) || fnText.match(FN_ARGS); - return args; -} - -function anonFn(fn) { - // For anonymous functions, showing at the very least the function signature can help in - // debugging. - var args = extractArgs(fn); - if (args) { - return 'function(' + (args[1] || '').replace(/[\s\r\n]+/, ' ') + ')'; - } - return 'fn'; -} - -function annotate(fn, strictDi, name) { - var $inject, - argDecl, - last; - - if (typeof fn === 'function') { - if (!($inject = fn.$inject)) { - $inject = []; - if (fn.length) { - if (strictDi) { - if (!isString(name) || !name) { - name = fn.name || anonFn(fn); - } - throw $injectorMinErr('strictdi', - '{0} is not using explicit annotation and cannot be invoked in strict mode', name); - } - argDecl = extractArgs(fn); - forEach(argDecl[1].split(FN_ARG_SPLIT), function(arg) { - arg.replace(FN_ARG, function(all, underscore, name) { - $inject.push(name); - }); - }); - } - fn.$inject = $inject; - } - } else if (isArray(fn)) { - last = fn.length - 1; - assertArgFn(fn[last], 'fn'); - $inject = fn.slice(0, last); - } else { - assertArgFn(fn, 'fn', true); - } - return $inject; -} - -/////////////////////////////////////// - -/** - * @ngdoc service - * @name $injector - * - * @description - * - * `$injector` is used to retrieve object instances as defined by - * {@link auto.$provide provider}, instantiate types, invoke methods, - * and load modules. - * - * The following always holds true: - * - * ```js - * var $injector = angular.injector(); - * expect($injector.get('$injector')).toBe($injector); - * expect($injector.invoke(function($injector) { - * return $injector; - * })).toBe($injector); - * ``` - * - * ## Injection Function Annotation - * - * JavaScript does not have annotations, and annotations are needed for dependency injection. The - * following are all valid ways of annotating function with injection arguments and are equivalent. - * - * ```js - * // inferred (only works if code not minified/obfuscated) - * $injector.invoke(function(serviceA){}); - * - * // annotated - * function explicit(serviceA) {}; - * explicit.$inject = ['serviceA']; - * $injector.invoke(explicit); - * - * // inline - * $injector.invoke(['serviceA', function(serviceA){}]); - * ``` - * - * ### Inference - * - * In JavaScript calling `toString()` on a function returns the function definition. The definition - * can then be parsed and the function arguments can be extracted. This method of discovering - * annotations is disallowed when the injector is in strict mode. - * *NOTE:* This does not work with minification, and obfuscation tools since these tools change the - * argument names. - * - * ### `$inject` Annotation - * By adding an `$inject` property onto a function the injection parameters can be specified. - * - * ### Inline - * As an array of injection names, where the last item in the array is the function to call. - */ - -/** - * @ngdoc property - * @name $injector#modules - * @type {Object} - * @description - * A hash containing all the modules that have been loaded into the - * $injector. - * - * You can use this property to find out information about a module via the - * {@link angular.Module#info `myModule.info(...)`} method. - * - * For example: - * - * ``` - * var info = $injector.modules['ngAnimate'].info(); - * ``` - * - * **Do not use this property to attempt to modify the modules after the application - * has been bootstrapped.** - */ - - -/** - * @ngdoc method - * @name $injector#get - * - * @description - * Return an instance of the service. - * - * @param {string} name The name of the instance to retrieve. - * @param {string=} caller An optional string to provide the origin of the function call for error messages. - * @return {*} The instance. - */ - -/** - * @ngdoc method - * @name $injector#invoke - * - * @description - * Invoke the method and supply the method arguments from the `$injector`. - * - * @param {Function|Array.} fn The injectable function to invoke. Function parameters are - * injected according to the {@link guide/di $inject Annotation} rules. - * @param {Object=} self The `this` for the invoked method. - * @param {Object=} locals Optional object. If preset then any argument names are read from this - * object first, before the `$injector` is consulted. - * @returns {*} the value returned by the invoked `fn` function. - */ - -/** - * @ngdoc method - * @name $injector#has - * - * @description - * Allows the user to query if the particular service exists. - * - * @param {string} name Name of the service to query. - * @returns {boolean} `true` if injector has given service. - */ - -/** - * @ngdoc method - * @name $injector#instantiate - * @description - * Create a new instance of JS type. The method takes a constructor function, invokes the new - * operator, and supplies all of the arguments to the constructor function as specified by the - * constructor annotation. - * - * @param {Function} Type Annotated constructor function. - * @param {Object=} locals Optional object. If preset then any argument names are read from this - * object first, before the `$injector` is consulted. - * @returns {Object} new instance of `Type`. - */ - -/** - * @ngdoc method - * @name $injector#annotate - * - * @description - * Returns an array of service names which the function is requesting for injection. This API is - * used by the injector to determine which services need to be injected into the function when the - * function is invoked. There are three ways in which the function can be annotated with the needed - * dependencies. - * - * #### Argument names - * - * The simplest form is to extract the dependencies from the arguments of the function. This is done - * by converting the function into a string using `toString()` method and extracting the argument - * names. - * ```js - * // Given - * function MyController($scope, $route) { - * // ... - * } - * - * // Then - * expect(injector.annotate(MyController)).toEqual(['$scope', '$route']); - * ``` - * - * You can disallow this method by using strict injection mode. - * - * This method does not work with code minification / obfuscation. For this reason the following - * annotation strategies are supported. - * - * #### The `$inject` property - * - * If a function has an `$inject` property and its value is an array of strings, then the strings - * represent names of services to be injected into the function. - * ```js - * // Given - * var MyController = function(obfuscatedScope, obfuscatedRoute) { - * // ... - * } - * // Define function dependencies - * MyController['$inject'] = ['$scope', '$route']; - * - * // Then - * expect(injector.annotate(MyController)).toEqual(['$scope', '$route']); - * ``` - * - * #### The array notation - * - * It is often desirable to inline Injected functions and that's when setting the `$inject` property - * is very inconvenient. In these situations using the array notation to specify the dependencies in - * a way that survives minification is a better choice: - * - * ```js - * // We wish to write this (not minification / obfuscation safe) - * injector.invoke(function($compile, $rootScope) { - * // ... - * }); - * - * // We are forced to write break inlining - * var tmpFn = function(obfuscatedCompile, obfuscatedRootScope) { - * // ... - * }; - * tmpFn.$inject = ['$compile', '$rootScope']; - * injector.invoke(tmpFn); - * - * // To better support inline function the inline annotation is supported - * injector.invoke(['$compile', '$rootScope', function(obfCompile, obfRootScope) { - * // ... - * }]); - * - * // Therefore - * expect(injector.annotate( - * ['$compile', '$rootScope', function(obfus_$compile, obfus_$rootScope) {}]) - * ).toEqual(['$compile', '$rootScope']); - * ``` - * - * @param {Function|Array.} fn Function for which dependent service names need to - * be retrieved as described above. - * - * @param {boolean=} [strictDi=false] Disallow argument name annotation inference. - * - * @returns {Array.} The names of the services which the function requires. - */ -/** - * @ngdoc method - * @name $injector#loadNewModules - * - * @description - * - * **This is a dangerous API, which you use at your own risk!** - * - * Add the specified modules to the current injector. - * - * This method will add each of the injectables to the injector and execute all of the config and run - * blocks for each module passed to the method. - * - * If a module has already been loaded into the injector then it will not be loaded again. - * - * * The application developer is responsible for loading the code containing the modules; and for - * ensuring that lazy scripts are not downloaded and executed more often that desired. - * * Previously compiled HTML will not be affected by newly loaded directives, filters and components. - * * Modules cannot be unloaded. - * - * You can use {@link $injector#modules `$injector.modules`} to check whether a module has been loaded - * into the injector, which may indicate whether the script has been executed already. - * - * @example - * Here is an example of loading a bundle of modules, with a utility method called `getScript`: - * - * ```javascript - * app.factory('loadModule', function($injector) { - * return function loadModule(moduleName, bundleUrl) { - * return getScript(bundleUrl).then(function() { $injector.loadNewModules([moduleName]); }); - * }; - * }) - * ``` - * - * @param {Array=} mods an array of modules to load into the application. - * Each item in the array should be the name of a predefined module or a (DI annotated) - * function that will be invoked by the injector as a `config` block. - * See: {@link angular.module modules} - */ - - -/** - * @ngdoc service - * @name $provide - * - * @description - * - * The {@link auto.$provide $provide} service has a number of methods for registering components - * with the {@link auto.$injector $injector}. Many of these functions are also exposed on - * {@link angular.Module}. - * - * An AngularJS **service** is a singleton object created by a **service factory**. These **service - * factories** are functions which, in turn, are created by a **service provider**. - * The **service providers** are constructor functions. When instantiated they must contain a - * property called `$get`, which holds the **service factory** function. - * - * When you request a service, the {@link auto.$injector $injector} is responsible for finding the - * correct **service provider**, instantiating it and then calling its `$get` **service factory** - * function to get the instance of the **service**. - * - * Often services have no configuration options and there is no need to add methods to the service - * provider. The provider will be no more than a constructor function with a `$get` property. For - * these cases the {@link auto.$provide $provide} service has additional helper methods to register - * services without specifying a provider. - * - * * {@link auto.$provide#provider provider(name, provider)} - registers a **service provider** with the - * {@link auto.$injector $injector} - * * {@link auto.$provide#constant constant(name, obj)} - registers a value/object that can be accessed by - * providers and services. - * * {@link auto.$provide#value value(name, obj)} - registers a value/object that can only be accessed by - * services, not providers. - * * {@link auto.$provide#factory factory(name, fn)} - registers a service **factory function** - * that will be wrapped in a **service provider** object, whose `$get` property will contain the - * given factory function. - * * {@link auto.$provide#service service(name, Fn)} - registers a **constructor function** - * that will be wrapped in a **service provider** object, whose `$get` property will instantiate - * a new object using the given constructor function. - * * {@link auto.$provide#decorator decorator(name, decorFn)} - registers a **decorator function** that - * will be able to modify or replace the implementation of another service. - * - * See the individual methods for more information and examples. - */ - -/** - * @ngdoc method - * @name $provide#provider - * @description - * - * Register a **provider function** with the {@link auto.$injector $injector}. Provider functions - * are constructor functions, whose instances are responsible for "providing" a factory for a - * service. - * - * Service provider names start with the name of the service they provide followed by `Provider`. - * For example, the {@link ng.$log $log} service has a provider called - * {@link ng.$logProvider $logProvider}. - * - * Service provider objects can have additional methods which allow configuration of the provider - * and its service. Importantly, you can configure what kind of service is created by the `$get` - * method, or how that service will act. For example, the {@link ng.$logProvider $logProvider} has a - * method {@link ng.$logProvider#debugEnabled debugEnabled} - * which lets you specify whether the {@link ng.$log $log} service will log debug messages to the - * console or not. - * - * It is possible to inject other providers into the provider function, - * but the injected provider must have been defined before the one that requires it. - * - * @param {string} name The name of the instance. NOTE: the provider will be available under `name + - 'Provider'` key. - * @param {(Object|function())} provider If the provider is: - * - * - `Object`: then it should have a `$get` method. The `$get` method will be invoked using - * {@link auto.$injector#invoke $injector.invoke()} when an instance needs to be created. - * - `Constructor`: a new instance of the provider will be created using - * {@link auto.$injector#instantiate $injector.instantiate()}, then treated as `object`. - * - * @returns {Object} registered provider instance - - * @example - * - * The following example shows how to create a simple event tracking service and register it using - * {@link auto.$provide#provider $provide.provider()}. - * - * ```js - * // Define the eventTracker provider - * function EventTrackerProvider() { - * var trackingUrl = '/track'; - * - * // A provider method for configuring where the tracked events should been saved - * this.setTrackingUrl = function(url) { - * trackingUrl = url; - * }; - * - * // The service factory function - * this.$get = ['$http', function($http) { - * var trackedEvents = {}; - * return { - * // Call this to track an event - * event: function(event) { - * var count = trackedEvents[event] || 0; - * count += 1; - * trackedEvents[event] = count; - * return count; - * }, - * // Call this to save the tracked events to the trackingUrl - * save: function() { - * $http.post(trackingUrl, trackedEvents); - * } - * }; - * }]; - * } - * - * describe('eventTracker', function() { - * var postSpy; - * - * beforeEach(module(function($provide) { - * // Register the eventTracker provider - * $provide.provider('eventTracker', EventTrackerProvider); - * })); - * - * beforeEach(module(function(eventTrackerProvider) { - * // Configure eventTracker provider - * eventTrackerProvider.setTrackingUrl('/custom-track'); - * })); - * - * it('tracks events', inject(function(eventTracker) { - * expect(eventTracker.event('login')).toEqual(1); - * expect(eventTracker.event('login')).toEqual(2); - * })); - * - * it('saves to the tracking url', inject(function(eventTracker, $http) { - * postSpy = spyOn($http, 'post'); - * eventTracker.event('login'); - * eventTracker.save(); - * expect(postSpy).toHaveBeenCalled(); - * expect(postSpy.mostRecentCall.args[0]).not.toEqual('/track'); - * expect(postSpy.mostRecentCall.args[0]).toEqual('/custom-track'); - * expect(postSpy.mostRecentCall.args[1]).toEqual({ 'login': 1 }); - * })); - * }); - * ``` - */ - -/** - * @ngdoc method - * @name $provide#factory - * @description - * - * Register a **service factory**, which will be called to return the service instance. - * This is short for registering a service where its provider consists of only a `$get` property, - * which is the given service factory function. - * You should use {@link auto.$provide#factory $provide.factory(getFn)} if you do not need to - * configure your service in a provider. - * - * @param {string} name The name of the instance. - * @param {Function|Array.} $getFn The injectable $getFn for the instance creation. - * Internally this is a short hand for `$provide.provider(name, {$get: $getFn})`. - * @returns {Object} registered provider instance - * - * @example - * Here is an example of registering a service - * ```js - * $provide.factory('ping', ['$http', function($http) { - * return function ping() { - * return $http.send('/ping'); - * }; - * }]); - * ``` - * You would then inject and use this service like this: - * ```js - * someModule.controller('Ctrl', ['ping', function(ping) { - * ping(); - * }]); - * ``` - */ - - -/** - * @ngdoc method - * @name $provide#service - * @description - * - * Register a **service constructor**, which will be invoked with `new` to create the service - * instance. - * This is short for registering a service where its provider's `$get` property is a factory - * function that returns an instance instantiated by the injector from the service constructor - * function. - * - * Internally it looks a bit like this: - * - * ``` - * { - * $get: function() { - * return $injector.instantiate(constructor); - * } - * } - * ``` - * - * - * You should use {@link auto.$provide#service $provide.service(class)} if you define your service - * as a type/class. - * - * @param {string} name The name of the instance. - * @param {Function|Array.} constructor An injectable class (constructor function) - * that will be instantiated. - * @returns {Object} registered provider instance - * - * @example - * Here is an example of registering a service using - * {@link auto.$provide#service $provide.service(class)}. - * ```js - * var Ping = function($http) { - * this.$http = $http; - * }; - * - * Ping.$inject = ['$http']; - * - * Ping.prototype.send = function() { - * return this.$http.get('/ping'); - * }; - * $provide.service('ping', Ping); - * ``` - * You would then inject and use this service like this: - * ```js - * someModule.controller('Ctrl', ['ping', function(ping) { - * ping.send(); - * }]); - * ``` - */ - - -/** - * @ngdoc method - * @name $provide#value - * @description - * - * Register a **value service** with the {@link auto.$injector $injector}, such as a string, a - * number, an array, an object or a function. This is short for registering a service where its - * provider's `$get` property is a factory function that takes no arguments and returns the **value - * service**. That also means it is not possible to inject other services into a value service. - * - * Value services are similar to constant services, except that they cannot be injected into a - * module configuration function (see {@link angular.Module#config}) but they can be overridden by - * an AngularJS {@link auto.$provide#decorator decorator}. - * - * @param {string} name The name of the instance. - * @param {*} value The value. - * @returns {Object} registered provider instance - * - * @example - * Here are some examples of creating value services. - * ```js - * $provide.value('ADMIN_USER', 'admin'); - * - * $provide.value('RoleLookup', { admin: 0, writer: 1, reader: 2 }); - * - * $provide.value('halfOf', function(value) { - * return value / 2; - * }); - * ``` - */ - - -/** - * @ngdoc method - * @name $provide#constant - * @description - * - * Register a **constant service** with the {@link auto.$injector $injector}, such as a string, - * a number, an array, an object or a function. Like the {@link auto.$provide#value value}, it is not - * possible to inject other services into a constant. - * - * But unlike {@link auto.$provide#value value}, a constant can be - * injected into a module configuration function (see {@link angular.Module#config}) and it cannot - * be overridden by an AngularJS {@link auto.$provide#decorator decorator}. - * - * @param {string} name The name of the constant. - * @param {*} value The constant value. - * @returns {Object} registered instance - * - * @example - * Here a some examples of creating constants: - * ```js - * $provide.constant('SHARD_HEIGHT', 306); - * - * $provide.constant('MY_COLOURS', ['red', 'blue', 'grey']); - * - * $provide.constant('double', function(value) { - * return value * 2; - * }); - * ``` - */ - - -/** - * @ngdoc method - * @name $provide#decorator - * @description - * - * Register a **decorator function** with the {@link auto.$injector $injector}. A decorator function - * intercepts the creation of a service, allowing it to override or modify the behavior of the - * service. The return value of the decorator function may be the original service, or a new service - * that replaces (or wraps and delegates to) the original service. - * - * You can find out more about using decorators in the {@link guide/decorators} guide. - * - * @param {string} name The name of the service to decorate. - * @param {Function|Array.} decorator This function will be invoked when the service needs to be - * provided and should return the decorated service instance. The function is called using - * the {@link auto.$injector#invoke injector.invoke} method and is therefore fully injectable. - * Local injection arguments: - * - * * `$delegate` - The original service instance, which can be replaced, monkey patched, configured, - * decorated or delegated to. - * - * @example - * Here we decorate the {@link ng.$log $log} service to convert warnings to errors by intercepting - * calls to {@link ng.$log#error $log.warn()}. - * ```js - * $provide.decorator('$log', ['$delegate', function($delegate) { - * $delegate.warn = $delegate.error; - * return $delegate; - * }]); - * ``` - */ - - -function createInjector(modulesToLoad, strictDi) { - strictDi = (strictDi === true); - var INSTANTIATING = {}, - providerSuffix = 'Provider', - path = [], - loadedModules = new NgMap(), - providerCache = { - $provide: { - provider: supportObject(provider), - factory: supportObject(factory), - service: supportObject(service), - value: supportObject(value), - constant: supportObject(constant), - decorator: decorator - } - }, - providerInjector = (providerCache.$injector = - createInternalInjector(providerCache, function(serviceName, caller) { - if (angular.isString(caller)) { - path.push(caller); - } - throw $injectorMinErr('unpr', 'Unknown provider: {0}', path.join(' <- ')); - })), - instanceCache = {}, - protoInstanceInjector = - createInternalInjector(instanceCache, function(serviceName, caller) { - var provider = providerInjector.get(serviceName + providerSuffix, caller); - return instanceInjector.invoke( - provider.$get, provider, undefined, serviceName); - }), - instanceInjector = protoInstanceInjector; - - providerCache['$injector' + providerSuffix] = { $get: valueFn(protoInstanceInjector) }; - instanceInjector.modules = providerInjector.modules = createMap(); - var runBlocks = loadModules(modulesToLoad); - instanceInjector = protoInstanceInjector.get('$injector'); - instanceInjector.strictDi = strictDi; - forEach(runBlocks, function(fn) { if (fn) instanceInjector.invoke(fn); }); - - instanceInjector.loadNewModules = function(mods) { - forEach(loadModules(mods), function(fn) { if (fn) instanceInjector.invoke(fn); }); - }; - - - return instanceInjector; - - //////////////////////////////////// - // $provider - //////////////////////////////////// - - function supportObject(delegate) { - return function(key, value) { - if (isObject(key)) { - forEach(key, reverseParams(delegate)); - } else { - return delegate(key, value); - } - }; - } - - function provider(name, provider_) { - assertNotHasOwnProperty(name, 'service'); - if (isFunction(provider_) || isArray(provider_)) { - provider_ = providerInjector.instantiate(provider_); - } - if (!provider_.$get) { - throw $injectorMinErr('pget', 'Provider \'{0}\' must define $get factory method.', name); - } - return (providerCache[name + providerSuffix] = provider_); - } - - function enforceReturnValue(name, factory) { - return /** @this */ function enforcedReturnValue() { - var result = instanceInjector.invoke(factory, this); - if (isUndefined(result)) { - throw $injectorMinErr('undef', 'Provider \'{0}\' must return a value from $get factory method.', name); - } - return result; - }; - } - - function factory(name, factoryFn, enforce) { - return provider(name, { - $get: enforce !== false ? enforceReturnValue(name, factoryFn) : factoryFn - }); - } - - function service(name, constructor) { - return factory(name, ['$injector', function($injector) { - return $injector.instantiate(constructor); - }]); - } - - function value(name, val) { return factory(name, valueFn(val), false); } - - function constant(name, value) { - assertNotHasOwnProperty(name, 'constant'); - providerCache[name] = value; - instanceCache[name] = value; - } - - function decorator(serviceName, decorFn) { - var origProvider = providerInjector.get(serviceName + providerSuffix), - orig$get = origProvider.$get; - - origProvider.$get = function() { - var origInstance = instanceInjector.invoke(orig$get, origProvider); - return instanceInjector.invoke(decorFn, null, {$delegate: origInstance}); - }; - } - - //////////////////////////////////// - // Module Loading - //////////////////////////////////// - function loadModules(modulesToLoad) { - assertArg(isUndefined(modulesToLoad) || isArray(modulesToLoad), 'modulesToLoad', 'not an array'); - var runBlocks = [], moduleFn; - forEach(modulesToLoad, function(module) { - if (loadedModules.get(module)) return; - loadedModules.set(module, true); - - function runInvokeQueue(queue) { - var i, ii; - for (i = 0, ii = queue.length; i < ii; i++) { - var invokeArgs = queue[i], - provider = providerInjector.get(invokeArgs[0]); - - provider[invokeArgs[1]].apply(provider, invokeArgs[2]); - } - } - - try { - if (isString(module)) { - moduleFn = angularModule(module); - instanceInjector.modules[module] = moduleFn; - runBlocks = runBlocks.concat(loadModules(moduleFn.requires)).concat(moduleFn._runBlocks); - runInvokeQueue(moduleFn._invokeQueue); - runInvokeQueue(moduleFn._configBlocks); - } else if (isFunction(module)) { - runBlocks.push(providerInjector.invoke(module)); - } else if (isArray(module)) { - runBlocks.push(providerInjector.invoke(module)); - } else { - assertArgFn(module, 'module'); - } - } catch (e) { - if (isArray(module)) { - module = module[module.length - 1]; - } - if (e.message && e.stack && e.stack.indexOf(e.message) === -1) { - // Safari & FF's stack traces don't contain error.message content - // unlike those of Chrome and IE - // So if stack doesn't contain message, we create a new string that contains both. - // Since error.stack is read-only in Safari, I'm overriding e and not e.stack here. - // eslint-disable-next-line no-ex-assign - e = e.message + '\n' + e.stack; - } - throw $injectorMinErr('modulerr', 'Failed to instantiate module {0} due to:\n{1}', - module, e.stack || e.message || e); - } - }); - return runBlocks; - } - - //////////////////////////////////// - // internal Injector - //////////////////////////////////// - - function createInternalInjector(cache, factory) { - - function getService(serviceName, caller) { - if (cache.hasOwnProperty(serviceName)) { - if (cache[serviceName] === INSTANTIATING) { - throw $injectorMinErr('cdep', 'Circular dependency found: {0}', - serviceName + ' <- ' + path.join(' <- ')); - } - return cache[serviceName]; - } else { - try { - path.unshift(serviceName); - cache[serviceName] = INSTANTIATING; - cache[serviceName] = factory(serviceName, caller); - return cache[serviceName]; - } catch (err) { - if (cache[serviceName] === INSTANTIATING) { - delete cache[serviceName]; - } - throw err; - } finally { - path.shift(); - } - } - } - - - function injectionArgs(fn, locals, serviceName) { - var args = [], - $inject = createInjector.$$annotate(fn, strictDi, serviceName); - - for (var i = 0, length = $inject.length; i < length; i++) { - var key = $inject[i]; - if (typeof key !== 'string') { - throw $injectorMinErr('itkn', - 'Incorrect injection token! Expected service name as string, got {0}', key); - } - args.push(locals && locals.hasOwnProperty(key) ? locals[key] : - getService(key, serviceName)); - } - return args; - } - - function isClass(func) { - // Support: IE 9-11 only - // IE 9-11 do not support classes and IE9 leaks with the code below. - if (msie || typeof func !== 'function') { - return false; - } - var result = func.$$ngIsClass; - if (!isBoolean(result)) { - result = func.$$ngIsClass = /^class\b/.test(stringifyFn(func)); - } - return result; - } - - function invoke(fn, self, locals, serviceName) { - if (typeof locals === 'string') { - serviceName = locals; - locals = null; - } - - var args = injectionArgs(fn, locals, serviceName); - if (isArray(fn)) { - fn = fn[fn.length - 1]; - } - - if (!isClass(fn)) { - // http://jsperf.com/angularjs-invoke-apply-vs-switch - // #5388 - return fn.apply(self, args); - } else { - args.unshift(null); - return new (Function.prototype.bind.apply(fn, args))(); - } - } - - - function instantiate(Type, locals, serviceName) { - // Check if Type is annotated and use just the given function at n-1 as parameter - // e.g. someModule.factory('greeter', ['$window', function(renamed$window) {}]); - var ctor = (isArray(Type) ? Type[Type.length - 1] : Type); - var args = injectionArgs(Type, locals, serviceName); - // Empty object at position 0 is ignored for invocation with `new`, but required. - args.unshift(null); - return new (Function.prototype.bind.apply(ctor, args))(); - } - - - return { - invoke: invoke, - instantiate: instantiate, - get: getService, - annotate: createInjector.$$annotate, - has: function(name) { - return providerCache.hasOwnProperty(name + providerSuffix) || cache.hasOwnProperty(name); - } - }; - } -} - -createInjector.$$annotate = annotate; - -/** - * @ngdoc provider - * @name $anchorScrollProvider - * @this - * - * @description - * Use `$anchorScrollProvider` to disable automatic scrolling whenever - * {@link ng.$location#hash $location.hash()} changes. - */ -function $AnchorScrollProvider() { - - var autoScrollingEnabled = true; - - /** - * @ngdoc method - * @name $anchorScrollProvider#disableAutoScrolling - * - * @description - * By default, {@link ng.$anchorScroll $anchorScroll()} will automatically detect changes to - * {@link ng.$location#hash $location.hash()} and scroll to the element matching the new hash.
- * Use this method to disable automatic scrolling. - * - * If automatic scrolling is disabled, one must explicitly call - * {@link ng.$anchorScroll $anchorScroll()} in order to scroll to the element related to the - * current hash. - */ - this.disableAutoScrolling = function() { - autoScrollingEnabled = false; - }; - - /** - * @ngdoc service - * @name $anchorScroll - * @kind function - * @requires $window - * @requires $location - * @requires $rootScope - * - * @description - * When called, it scrolls to the element related to the specified `hash` or (if omitted) to the - * current value of {@link ng.$location#hash $location.hash()}, according to the rules specified - * in the - * [HTML5 spec](http://www.w3.org/html/wg/drafts/html/master/browsers.html#an-indicated-part-of-the-document). - * - * It also watches the {@link ng.$location#hash $location.hash()} and automatically scrolls to - * match any anchor whenever it changes. This can be disabled by calling - * {@link ng.$anchorScrollProvider#disableAutoScrolling $anchorScrollProvider.disableAutoScrolling()}. - * - * Additionally, you can use its {@link ng.$anchorScroll#yOffset yOffset} property to specify a - * vertical scroll-offset (either fixed or dynamic). - * - * @param {string=} hash The hash specifying the element to scroll to. If omitted, the value of - * {@link ng.$location#hash $location.hash()} will be used. - * - * @property {(number|function|jqLite)} yOffset - * If set, specifies a vertical scroll-offset. This is often useful when there are fixed - * positioned elements at the top of the page, such as navbars, headers etc. - * - * `yOffset` can be specified in various ways: - * - **number**: A fixed number of pixels to be used as offset.

- * - **function**: A getter function called everytime `$anchorScroll()` is executed. Must return - * a number representing the offset (in pixels).

- * - **jqLite**: A jqLite/jQuery element to be used for specifying the offset. The distance from - * the top of the page to the element's bottom will be used as offset.
- * **Note**: The element will be taken into account only as long as its `position` is set to - * `fixed`. This option is useful, when dealing with responsive navbars/headers that adjust - * their height and/or positioning according to the viewport's size. - * - *
- *
- * In order for `yOffset` to work properly, scrolling should take place on the document's root and - * not some child element. - *
- * - * @example - - -
- Go to bottom - You're at the bottom! -
-
- - angular.module('anchorScrollExample', []) - .controller('ScrollController', ['$scope', '$location', '$anchorScroll', - function($scope, $location, $anchorScroll) { - $scope.gotoBottom = function() { - // set the location.hash to the id of - // the element you wish to scroll to. - $location.hash('bottom'); - - // call $anchorScroll() - $anchorScroll(); - }; - }]); - - - #scrollArea { - height: 280px; - overflow: auto; - } - - #bottom { - display: block; - margin-top: 2000px; - } - -
- * - *
- * The example below illustrates the use of a vertical scroll-offset (specified as a fixed value). - * See {@link ng.$anchorScroll#yOffset $anchorScroll.yOffset} for more details. - * - * @example - - - -
- Anchor {{x}} of 5 -
-
- - angular.module('anchorScrollOffsetExample', []) - .run(['$anchorScroll', function($anchorScroll) { - $anchorScroll.yOffset = 50; // always scroll by 50 extra pixels - }]) - .controller('headerCtrl', ['$anchorScroll', '$location', '$scope', - function($anchorScroll, $location, $scope) { - $scope.gotoAnchor = function(x) { - var newHash = 'anchor' + x; - if ($location.hash() !== newHash) { - // set the $location.hash to `newHash` and - // $anchorScroll will automatically scroll to it - $location.hash('anchor' + x); - } else { - // call $anchorScroll() explicitly, - // since $location.hash hasn't changed - $anchorScroll(); - } - }; - } - ]); - - - body { - padding-top: 50px; - } - - .anchor { - border: 2px dashed DarkOrchid; - padding: 10px 10px 200px 10px; - } - - .fixed-header { - background-color: rgba(0, 0, 0, 0.2); - height: 50px; - position: fixed; - top: 0; left: 0; right: 0; - } - - .fixed-header > a { - display: inline-block; - margin: 5px 15px; - } - -
- */ - this.$get = ['$window', '$location', '$rootScope', function($window, $location, $rootScope) { - var document = $window.document; - - // Helper function to get first anchor from a NodeList - // (using `Array#some()` instead of `angular#forEach()` since it's more performant - // and working in all supported browsers.) - function getFirstAnchor(list) { - var result = null; - Array.prototype.some.call(list, function(element) { - if (nodeName_(element) === 'a') { - result = element; - return true; - } - }); - return result; - } - - function getYOffset() { - - var offset = scroll.yOffset; - - if (isFunction(offset)) { - offset = offset(); - } else if (isElement(offset)) { - var elem = offset[0]; - var style = $window.getComputedStyle(elem); - if (style.position !== 'fixed') { - offset = 0; - } else { - offset = elem.getBoundingClientRect().bottom; - } - } else if (!isNumber(offset)) { - offset = 0; - } - - return offset; - } - - function scrollTo(elem) { - if (elem) { - elem.scrollIntoView(); - - var offset = getYOffset(); - - if (offset) { - // `offset` is the number of pixels we should scroll UP in order to align `elem` properly. - // This is true ONLY if the call to `elem.scrollIntoView()` initially aligns `elem` at the - // top of the viewport. - // - // IF the number of pixels from the top of `elem` to the end of the page's content is less - // than the height of the viewport, then `elem.scrollIntoView()` will align the `elem` some - // way down the page. - // - // This is often the case for elements near the bottom of the page. - // - // In such cases we do not need to scroll the whole `offset` up, just the difference between - // the top of the element and the offset, which is enough to align the top of `elem` at the - // desired position. - var elemTop = elem.getBoundingClientRect().top; - $window.scrollBy(0, elemTop - offset); - } - } else { - $window.scrollTo(0, 0); - } - } - - function scroll(hash) { - // Allow numeric hashes - hash = isString(hash) ? hash : isNumber(hash) ? hash.toString() : $location.hash(); - var elm; - - // empty hash, scroll to the top of the page - if (!hash) scrollTo(null); - - // element with given id - else if ((elm = document.getElementById(hash))) scrollTo(elm); - - // first anchor with given name :-D - else if ((elm = getFirstAnchor(document.getElementsByName(hash)))) scrollTo(elm); - - // no element and hash === 'top', scroll to the top of the page - else if (hash === 'top') scrollTo(null); - } - - // does not scroll when user clicks on anchor link that is currently on - // (no url change, no $location.hash() change), browser native does scroll - if (autoScrollingEnabled) { - $rootScope.$watch(function autoScrollWatch() {return $location.hash();}, - function autoScrollWatchAction(newVal, oldVal) { - // skip the initial scroll if $location.hash is empty - if (newVal === oldVal && newVal === '') return; - - jqLiteDocumentLoaded(function() { - $rootScope.$evalAsync(scroll); - }); - }); - } - - return scroll; - }]; -} - -var $animateMinErr = minErr('$animate'); -var ELEMENT_NODE = 1; -var NG_ANIMATE_CLASSNAME = 'ng-animate'; - -function mergeClasses(a,b) { - if (!a && !b) return ''; - if (!a) return b; - if (!b) return a; - if (isArray(a)) a = a.join(' '); - if (isArray(b)) b = b.join(' '); - return a + ' ' + b; -} - -function extractElementNode(element) { - for (var i = 0; i < element.length; i++) { - var elm = element[i]; - if (elm.nodeType === ELEMENT_NODE) { - return elm; - } - } -} - -function splitClasses(classes) { - if (isString(classes)) { - classes = classes.split(' '); - } - - // Use createMap() to prevent class assumptions involving property names in - // Object.prototype - var obj = createMap(); - forEach(classes, function(klass) { - // sometimes the split leaves empty string values - // incase extra spaces were applied to the options - if (klass.length) { - obj[klass] = true; - } - }); - return obj; -} - -// if any other type of options value besides an Object value is -// passed into the $animate.method() animation then this helper code -// will be run which will ignore it. While this patch is not the -// greatest solution to this, a lot of existing plugins depend on -// $animate to either call the callback (< 1.2) or return a promise -// that can be changed. This helper function ensures that the options -// are wiped clean incase a callback function is provided. -function prepareAnimateOptions(options) { - return isObject(options) - ? options - : {}; -} - -var $$CoreAnimateJsProvider = /** @this */ function() { - this.$get = noop; -}; - -// this is prefixed with Core since it conflicts with -// the animateQueueProvider defined in ngAnimate/animateQueue.js -var $$CoreAnimateQueueProvider = /** @this */ function() { - var postDigestQueue = new NgMap(); - var postDigestElements = []; - - this.$get = ['$$AnimateRunner', '$rootScope', - function($$AnimateRunner, $rootScope) { - return { - enabled: noop, - on: noop, - off: noop, - pin: noop, - - push: function(element, event, options, domOperation) { - if (domOperation) { - domOperation(); - } - - options = options || {}; - if (options.from) { - element.css(options.from); - } - if (options.to) { - element.css(options.to); - } - - if (options.addClass || options.removeClass) { - addRemoveClassesPostDigest(element, options.addClass, options.removeClass); - } - - var runner = new $$AnimateRunner(); - - // since there are no animations to run the runner needs to be - // notified that the animation call is complete. - runner.complete(); - return runner; - } - }; - - - function updateData(data, classes, value) { - var changed = false; - if (classes) { - classes = isString(classes) ? classes.split(' ') : - isArray(classes) ? classes : []; - forEach(classes, function(className) { - if (className) { - changed = true; - data[className] = value; - } - }); - } - return changed; - } - - function handleCSSClassChanges() { - forEach(postDigestElements, function(element) { - var data = postDigestQueue.get(element); - if (data) { - var existing = splitClasses(element.attr('class')); - var toAdd = ''; - var toRemove = ''; - forEach(data, function(status, className) { - var hasClass = !!existing[className]; - if (status !== hasClass) { - if (status) { - toAdd += (toAdd.length ? ' ' : '') + className; - } else { - toRemove += (toRemove.length ? ' ' : '') + className; - } - } - }); - - forEach(element, function(elm) { - if (toAdd) { - jqLiteAddClass(elm, toAdd); - } - if (toRemove) { - jqLiteRemoveClass(elm, toRemove); - } - }); - postDigestQueue.delete(element); - } - }); - postDigestElements.length = 0; - } - - - function addRemoveClassesPostDigest(element, add, remove) { - var data = postDigestQueue.get(element) || {}; - - var classesAdded = updateData(data, add, true); - var classesRemoved = updateData(data, remove, false); - - if (classesAdded || classesRemoved) { - - postDigestQueue.set(element, data); - postDigestElements.push(element); - - if (postDigestElements.length === 1) { - $rootScope.$$postDigest(handleCSSClassChanges); - } - } - } - }]; -}; - -/** - * @ngdoc provider - * @name $animateProvider - * - * @description - * Default implementation of $animate that doesn't perform any animations, instead just - * synchronously performs DOM updates and resolves the returned runner promise. - * - * In order to enable animations the `ngAnimate` module has to be loaded. - * - * To see the functional implementation check out `src/ngAnimate/animate.js`. - */ -var $AnimateProvider = ['$provide', /** @this */ function($provide) { - var provider = this; - var classNameFilter = null; - var customFilter = null; - - this.$$registeredAnimations = Object.create(null); - - /** - * @ngdoc method - * @name $animateProvider#register - * - * @description - * Registers a new injectable animation factory function. The factory function produces the - * animation object which contains callback functions for each event that is expected to be - * animated. - * - * * `eventFn`: `function(element, ... , doneFunction, options)` - * The element to animate, the `doneFunction` and the options fed into the animation. Depending - * on the type of animation additional arguments will be injected into the animation function. The - * list below explains the function signatures for the different animation methods: - * - * - setClass: function(element, addedClasses, removedClasses, doneFunction, options) - * - addClass: function(element, addedClasses, doneFunction, options) - * - removeClass: function(element, removedClasses, doneFunction, options) - * - enter, leave, move: function(element, doneFunction, options) - * - animate: function(element, fromStyles, toStyles, doneFunction, options) - * - * Make sure to trigger the `doneFunction` once the animation is fully complete. - * - * ```js - * return { - * //enter, leave, move signature - * eventFn : function(element, done, options) { - * //code to run the animation - * //once complete, then run done() - * return function endFunction(wasCancelled) { - * //code to cancel the animation - * } - * } - * } - * ``` - * - * @param {string} name The name of the animation (this is what the class-based CSS value will be compared to). - * @param {Function} factory The factory function that will be executed to return the animation - * object. - */ - this.register = function(name, factory) { - if (name && name.charAt(0) !== '.') { - throw $animateMinErr('notcsel', 'Expecting class selector starting with \'.\' got \'{0}\'.', name); - } - - var key = name + '-animation'; - provider.$$registeredAnimations[name.substr(1)] = key; - $provide.factory(key, factory); - }; - - /** - * @ngdoc method - * @name $animateProvider#customFilter - * - * @description - * Sets and/or returns the custom filter function that is used to "filter" animations, i.e. - * determine if an animation is allowed or not. When no filter is specified (the default), no - * animation will be blocked. Setting the `customFilter` value will only allow animations for - * which the filter function's return value is truthy. - * - * This allows to easily create arbitrarily complex rules for filtering animations, such as - * allowing specific events only, or enabling animations on specific subtrees of the DOM, etc. - * Filtering animations can also boost performance for low-powered devices, as well as - * applications containing a lot of structural operations. - * - *
- * **Best Practice:** - * Keep the filtering function as lean as possible, because it will be called for each DOM - * action (e.g. insertion, removal, class change) performed by "animation-aware" directives. - * See {@link guide/animations#which-directives-support-animations- here} for a list of built-in - * directives that support animations. - * Performing computationally expensive or time-consuming operations on each call of the - * filtering function can make your animations sluggish. - *
- * - * **Note:** If present, `customFilter` will be checked before - * {@link $animateProvider#classNameFilter classNameFilter}. - * - * @param {Function=} filterFn - The filter function which will be used to filter all animations. - * If a falsy value is returned, no animation will be performed. The function will be called - * with the following arguments: - * - **node** `{DOMElement}` - The DOM element to be animated. - * - **event** `{String}` - The name of the animation event (e.g. `enter`, `leave`, `addClass` - * etc). - * - **options** `{Object}` - A collection of options/styles used for the animation. - * @return {Function} The current filter function or `null` if there is none set. - */ - this.customFilter = function(filterFn) { - if (arguments.length === 1) { - customFilter = isFunction(filterFn) ? filterFn : null; - } - - return customFilter; - }; - - /** - * @ngdoc method - * @name $animateProvider#classNameFilter - * - * @description - * Sets and/or returns the CSS class regular expression that is checked when performing - * an animation. Upon bootstrap the classNameFilter value is not set at all and will - * therefore enable $animate to attempt to perform an animation on any element that is triggered. - * When setting the `classNameFilter` value, animations will only be performed on elements - * that successfully match the filter expression. This in turn can boost performance - * for low-powered devices as well as applications containing a lot of structural operations. - * - * **Note:** If present, `classNameFilter` will be checked after - * {@link $animateProvider#customFilter customFilter}. If `customFilter` is present and returns - * false, `classNameFilter` will not be checked. - * - * @param {RegExp=} expression The className expression which will be checked against all animations - * @return {RegExp} The current CSS className expression value. If null then there is no expression value - */ - this.classNameFilter = function(expression) { - if (arguments.length === 1) { - classNameFilter = (expression instanceof RegExp) ? expression : null; - if (classNameFilter) { - var reservedRegex = new RegExp('[(\\s|\\/)]' + NG_ANIMATE_CLASSNAME + '[(\\s|\\/)]'); - if (reservedRegex.test(classNameFilter.toString())) { - classNameFilter = null; - throw $animateMinErr('nongcls', '$animateProvider.classNameFilter(regex) prohibits accepting a regex value which matches/contains the "{0}" CSS class.', NG_ANIMATE_CLASSNAME); - } - } - } - return classNameFilter; - }; - - this.$get = ['$$animateQueue', function($$animateQueue) { - function domInsert(element, parentElement, afterElement) { - // if for some reason the previous element was removed - // from the dom sometime before this code runs then let's - // just stick to using the parent element as the anchor - if (afterElement) { - var afterNode = extractElementNode(afterElement); - if (afterNode && !afterNode.parentNode && !afterNode.previousElementSibling) { - afterElement = null; - } - } - if (afterElement) { - afterElement.after(element); - } else { - parentElement.prepend(element); - } - } - - /** - * @ngdoc service - * @name $animate - * @description The $animate service exposes a series of DOM utility methods that provide support - * for animation hooks. The default behavior is the application of DOM operations, however, - * when an animation is detected (and animations are enabled), $animate will do the heavy lifting - * to ensure that animation runs with the triggered DOM operation. - * - * By default $animate doesn't trigger any animations. This is because the `ngAnimate` module isn't - * included and only when it is active then the animation hooks that `$animate` triggers will be - * functional. Once active then all structural `ng-` directives will trigger animations as they perform - * their DOM-related operations (enter, leave and move). Other directives such as `ngClass`, - * `ngShow`, `ngHide` and `ngMessages` also provide support for animations. - * - * It is recommended that the`$animate` service is always used when executing DOM-related procedures within directives. - * - * To learn more about enabling animation support, click here to visit the - * {@link ngAnimate ngAnimate module page}. - */ - return { - // we don't call it directly since non-existant arguments may - // be interpreted as null within the sub enabled function - - /** - * - * @ngdoc method - * @name $animate#on - * @kind function - * @description Sets up an event listener to fire whenever the animation event (enter, leave, move, etc...) - * has fired on the given element or among any of its children. Once the listener is fired, the provided callback - * is fired with the following params: - * - * ```js - * $animate.on('enter', container, - * function callback(element, phase) { - * // cool we detected an enter animation within the container - * } - * ); - * ``` - * - *
- * **Note**: Generally, the events that are fired correspond 1:1 to `$animate` method names, - * e.g. {@link ng.$animate#addClass addClass()} will fire `addClass`, and {@link ng.ngClass} - * will fire `addClass` if classes are added, and `removeClass` if classes are removed. - * However, there are two exceptions: - * - *
    - *
  • if both an {@link ng.$animate#addClass addClass()} and a - * {@link ng.$animate#removeClass removeClass()} action are performed during the same - * animation, the event fired will be `setClass`. This is true even for `ngClass`.
  • - *
  • an {@link ng.$animate#animate animate()} call that adds and removes classes will fire - * the `setClass` event, but if it either removes or adds classes, - * it will fire `animate` instead.
  • - *
- * - *
- * - * @param {string} event the animation event that will be captured (e.g. enter, leave, move, addClass, removeClass, etc...) - * @param {DOMElement} container the container element that will capture each of the animation events that are fired on itself - * as well as among its children - * @param {Function} callback the callback function that will be fired when the listener is triggered. - * - * The arguments present in the callback function are: - * * `element` - The captured DOM element that the animation was fired on. - * * `phase` - The phase of the animation. The two possible phases are **start** (when the animation starts) and **close** (when it ends). - * * `data` - an object with these properties: - * * addClass - `{string|null}` - space-separated CSS classes to add to the element - * * removeClass - `{string|null}` - space-separated CSS classes to remove from the element - * * from - `{Object|null}` - CSS properties & values at the beginning of the animation - * * to - `{Object|null}` - CSS properties & values at the end of the animation - * - * Note that the callback does not trigger a scope digest. Wrap your call into a - * {@link $rootScope.Scope#$apply scope.$apply} to propagate changes to the scope. - */ - on: $$animateQueue.on, - - /** - * - * @ngdoc method - * @name $animate#off - * @kind function - * @description Deregisters an event listener based on the event which has been associated with the provided element. This method - * can be used in three different ways depending on the arguments: - * - * ```js - * // remove all the animation event listeners listening for `enter` - * $animate.off('enter'); - * - * // remove listeners for all animation events from the container element - * $animate.off(container); - * - * // remove all the animation event listeners listening for `enter` on the given element and its children - * $animate.off('enter', container); - * - * // remove the event listener function provided by `callback` that is set - * // to listen for `enter` on the given `container` as well as its children - * $animate.off('enter', container, callback); - * ``` - * - * @param {string|DOMElement} event|container the animation event (e.g. enter, leave, move, - * addClass, removeClass, etc...), or the container element. If it is the element, all other - * arguments are ignored. - * @param {DOMElement=} container the container element the event listener was placed on - * @param {Function=} callback the callback function that was registered as the listener - */ - off: $$animateQueue.off, - - /** - * @ngdoc method - * @name $animate#pin - * @kind function - * @description Associates the provided element with a host parent element to allow the element to be animated even if it exists - * outside of the DOM structure of the AngularJS application. By doing so, any animation triggered via `$animate` can be issued on the - * element despite being outside the realm of the application or within another application. Say for example if the application - * was bootstrapped on an element that is somewhere inside of the `` tag, but we wanted to allow for an element to be situated - * as a direct child of `document.body`, then this can be achieved by pinning the element via `$animate.pin(element)`. Keep in mind - * that calling `$animate.pin(element, parentElement)` will not actually insert into the DOM anywhere; it will just create the association. - * - * Note that this feature is only active when the `ngAnimate` module is used. - * - * @param {DOMElement} element the external element that will be pinned - * @param {DOMElement} parentElement the host parent element that will be associated with the external element - */ - pin: $$animateQueue.pin, - - /** - * - * @ngdoc method - * @name $animate#enabled - * @kind function - * @description Used to get and set whether animations are enabled or not on the entire application or on an element and its children. This - * function can be called in four ways: - * - * ```js - * // returns true or false - * $animate.enabled(); - * - * // changes the enabled state for all animations - * $animate.enabled(false); - * $animate.enabled(true); - * - * // returns true or false if animations are enabled for an element - * $animate.enabled(element); - * - * // changes the enabled state for an element and its children - * $animate.enabled(element, true); - * $animate.enabled(element, false); - * ``` - * - * @param {DOMElement=} element the element that will be considered for checking/setting the enabled state - * @param {boolean=} enabled whether or not the animations will be enabled for the element - * - * @return {boolean} whether or not animations are enabled - */ - enabled: $$animateQueue.enabled, - - /** - * @ngdoc method - * @name $animate#cancel - * @kind function - * @description Cancels the provided animation and applies the end state of the animation. - * Note that this does not cancel the underlying operation, e.g. the setting of classes or - * adding the element to the DOM. - * - * @param {animationRunner} animationRunner An animation runner returned by an $animate function. - * - * @example - - - angular.module('animationExample', ['ngAnimate']).component('cancelExample', { - templateUrl: 'template.html', - controller: function($element, $animate) { - this.runner = null; - - this.addClass = function() { - this.runner = $animate.addClass($element.find('div'), 'red'); - var ctrl = this; - this.runner.finally(function() { - ctrl.runner = null; - }); - }; - - this.removeClass = function() { - this.runner = $animate.removeClass($element.find('div'), 'red'); - var ctrl = this; - this.runner.finally(function() { - ctrl.runner = null; - }); - }; - - this.cancel = function() { - $animate.cancel(this.runner); - }; - } - }); - - -

- - -
- -
-

CSS-Animated Text
-

-
- - - - - .red-add, .red-remove { - transition: all 4s cubic-bezier(0.250, 0.460, 0.450, 0.940); - } - - .red, - .red-add.red-add-active { - color: #FF0000; - font-size: 40px; - } - - .red-remove.red-remove-active { - font-size: 10px; - color: black; - } - - -
- */ - cancel: function(runner) { - if (runner.cancel) { - runner.cancel(); - } - }, - - /** - * - * @ngdoc method - * @name $animate#enter - * @kind function - * @description Inserts the element into the DOM either after the `after` element (if provided) or - * as the first child within the `parent` element and then triggers an animation. - * A promise is returned that will be resolved during the next digest once the animation - * has completed. - * - * @param {DOMElement} element the element which will be inserted into the DOM - * @param {DOMElement} parent the parent element which will append the element as - * a child (so long as the after element is not present) - * @param {DOMElement=} after the sibling element after which the element will be appended - * @param {object=} options an optional collection of options/styles that will be applied to the element. - * The object can have the following properties: - * - * - **addClass** - `{string}` - space-separated CSS classes to add to element - * - **from** - `{Object}` - CSS properties & values at the beginning of animation. Must have matching `to` - * - **removeClass** - `{string}` - space-separated CSS classes to remove from element - * - **to** - `{Object}` - CSS properties & values at end of animation. Must have matching `from` - * - * @return {Runner} the animation runner - */ - enter: function(element, parent, after, options) { - parent = parent && jqLite(parent); - after = after && jqLite(after); - parent = parent || after.parent(); - domInsert(element, parent, after); - return $$animateQueue.push(element, 'enter', prepareAnimateOptions(options)); - }, - - /** - * - * @ngdoc method - * @name $animate#move - * @kind function - * @description Inserts (moves) the element into its new position in the DOM either after - * the `after` element (if provided) or as the first child within the `parent` element - * and then triggers an animation. A promise is returned that will be resolved - * during the next digest once the animation has completed. - * - * @param {DOMElement} element the element which will be moved into the new DOM position - * @param {DOMElement} parent the parent element which will append the element as - * a child (so long as the after element is not present) - * @param {DOMElement=} after the sibling element after which the element will be appended - * @param {object=} options an optional collection of options/styles that will be applied to the element. - * The object can have the following properties: - * - * - **addClass** - `{string}` - space-separated CSS classes to add to element - * - **from** - `{Object}` - CSS properties & values at the beginning of animation. Must have matching `to` - * - **removeClass** - `{string}` - space-separated CSS classes to remove from element - * - **to** - `{Object}` - CSS properties & values at end of animation. Must have matching `from` - * - * @return {Runner} the animation runner - */ - move: function(element, parent, after, options) { - parent = parent && jqLite(parent); - after = after && jqLite(after); - parent = parent || after.parent(); - domInsert(element, parent, after); - return $$animateQueue.push(element, 'move', prepareAnimateOptions(options)); - }, - - /** - * @ngdoc method - * @name $animate#leave - * @kind function - * @description Triggers an animation and then removes the element from the DOM. - * When the function is called a promise is returned that will be resolved during the next - * digest once the animation has completed. - * - * @param {DOMElement} element the element which will be removed from the DOM - * @param {object=} options an optional collection of options/styles that will be applied to the element. - * The object can have the following properties: - * - * - **addClass** - `{string}` - space-separated CSS classes to add to element - * - **from** - `{Object}` - CSS properties & values at the beginning of animation. Must have matching `to` - * - **removeClass** - `{string}` - space-separated CSS classes to remove from element - * - **to** - `{Object}` - CSS properties & values at end of animation. Must have matching `from` - * - * @return {Runner} the animation runner - */ - leave: function(element, options) { - return $$animateQueue.push(element, 'leave', prepareAnimateOptions(options), function() { - element.remove(); - }); - }, - - /** - * @ngdoc method - * @name $animate#addClass - * @kind function - * - * @description Triggers an addClass animation surrounding the addition of the provided CSS class(es). Upon - * execution, the addClass operation will only be handled after the next digest and it will not trigger an - * animation if element already contains the CSS class or if the class is removed at a later step. - * Note that class-based animations are treated differently compared to structural animations - * (like enter, move and leave) since the CSS classes may be added/removed at different points - * depending if CSS or JavaScript animations are used. - * - * @param {DOMElement} element the element which the CSS classes will be applied to - * @param {string} className the CSS class(es) that will be added (multiple classes are separated via spaces) - * @param {object=} options an optional collection of options/styles that will be applied to the element. - * The object can have the following properties: - * - * - **removeClass** - `{string}` - space-separated CSS classes to remove from element - * - **from** - `{Object}` - CSS properties & values at the beginning of animation. Must have matching `to` - * - **to** - `{Object}` - CSS properties & values at end of animation. Must have matching `from` - * - * @return {Runner} animationRunner the animation runner - */ - addClass: function(element, className, options) { - options = prepareAnimateOptions(options); - options.addClass = mergeClasses(options.addclass, className); - return $$animateQueue.push(element, 'addClass', options); - }, - - /** - * @ngdoc method - * @name $animate#removeClass - * @kind function - * - * @description Triggers a removeClass animation surrounding the removal of the provided CSS class(es). Upon - * execution, the removeClass operation will only be handled after the next digest and it will not trigger an - * animation if element does not contain the CSS class or if the class is added at a later step. - * Note that class-based animations are treated differently compared to structural animations - * (like enter, move and leave) since the CSS classes may be added/removed at different points - * depending if CSS or JavaScript animations are used. - * - * @param {DOMElement} element the element which the CSS classes will be applied to - * @param {string} className the CSS class(es) that will be removed (multiple classes are separated via spaces) - * @param {object=} options an optional collection of options/styles that will be applied to the element. - * The object can have the following properties: - * - * - **addClass** - `{string}` - space-separated CSS classes to add to element - * - **from** - `{Object}` - CSS properties & values at the beginning of animation. Must have matching `to` - * - **to** - `{Object}` - CSS properties & values at end of animation. Must have matching `from` - * - * @return {Runner} the animation runner - */ - removeClass: function(element, className, options) { - options = prepareAnimateOptions(options); - options.removeClass = mergeClasses(options.removeClass, className); - return $$animateQueue.push(element, 'removeClass', options); - }, - - /** - * @ngdoc method - * @name $animate#setClass - * @kind function - * - * @description Performs both the addition and removal of a CSS classes on an element and (during the process) - * triggers an animation surrounding the class addition/removal. Much like `$animate.addClass` and - * `$animate.removeClass`, `setClass` will only evaluate the classes being added/removed once a digest has - * passed. Note that class-based animations are treated differently compared to structural animations - * (like enter, move and leave) since the CSS classes may be added/removed at different points - * depending if CSS or JavaScript animations are used. - * - * @param {DOMElement} element the element which the CSS classes will be applied to - * @param {string} add the CSS class(es) that will be added (multiple classes are separated via spaces) - * @param {string} remove the CSS class(es) that will be removed (multiple classes are separated via spaces) - * @param {object=} options an optional collection of options/styles that will be applied to the element. - * The object can have the following properties: - * - * - **addClass** - `{string}` - space-separated CSS classes to add to element - * - **removeClass** - `{string}` - space-separated CSS classes to remove from element - * - **from** - `{Object}` - CSS properties & values at the beginning of animation. Must have matching `to` - * - **to** - `{Object}` - CSS properties & values at end of animation. Must have matching `from` - * - * @return {Runner} the animation runner - */ - setClass: function(element, add, remove, options) { - options = prepareAnimateOptions(options); - options.addClass = mergeClasses(options.addClass, add); - options.removeClass = mergeClasses(options.removeClass, remove); - return $$animateQueue.push(element, 'setClass', options); - }, - - /** - * @ngdoc method - * @name $animate#animate - * @kind function - * - * @description Performs an inline animation on the element which applies the provided to and from CSS styles to the element. - * If any detected CSS transition, keyframe or JavaScript matches the provided className value, then the animation will take - * on the provided styles. For example, if a transition animation is set for the given className, then the provided `from` and - * `to` styles will be applied alongside the given transition. If the CSS style provided in `from` does not have a corresponding - * style in `to`, the style in `from` is applied immediately, and no animation is run. - * If a JavaScript animation is detected then the provided styles will be given in as function parameters into the `animate` - * method (or as part of the `options` parameter): - * - * ```js - * ngModule.animation('.my-inline-animation', function() { - * return { - * animate : function(element, from, to, done, options) { - * //animation - * done(); - * } - * } - * }); - * ``` - * - * @param {DOMElement} element the element which the CSS styles will be applied to - * @param {object} from the from (starting) CSS styles that will be applied to the element and across the animation. - * @param {object} to the to (destination) CSS styles that will be applied to the element and across the animation. - * @param {string=} className an optional CSS class that will be applied to the element for the duration of the animation. If - * this value is left as empty then a CSS class of `ng-inline-animate` will be applied to the element. - * (Note that if no animation is detected then this value will not be applied to the element.) - * @param {object=} options an optional collection of options/styles that will be applied to the element. - * The object can have the following properties: - * - * - **addClass** - `{string}` - space-separated CSS classes to add to element - * - **from** - `{Object}` - CSS properties & values at the beginning of animation. Must have matching `to` - * - **removeClass** - `{string}` - space-separated CSS classes to remove from element - * - **to** - `{Object}` - CSS properties & values at end of animation. Must have matching `from` - * - * @return {Runner} the animation runner - */ - animate: function(element, from, to, className, options) { - options = prepareAnimateOptions(options); - options.from = options.from ? extend(options.from, from) : from; - options.to = options.to ? extend(options.to, to) : to; - - className = className || 'ng-inline-animate'; - options.tempClasses = mergeClasses(options.tempClasses, className); - return $$animateQueue.push(element, 'animate', options); - } - }; - }]; -}]; - -var $$AnimateAsyncRunFactoryProvider = /** @this */ function() { - this.$get = ['$$rAF', function($$rAF) { - var waitQueue = []; - - function waitForTick(fn) { - waitQueue.push(fn); - if (waitQueue.length > 1) return; - $$rAF(function() { - for (var i = 0; i < waitQueue.length; i++) { - waitQueue[i](); - } - waitQueue = []; - }); - } - - return function() { - var passed = false; - waitForTick(function() { - passed = true; - }); - return function(callback) { - if (passed) { - callback(); - } else { - waitForTick(callback); - } - }; - }; - }]; -}; - -var $$AnimateRunnerFactoryProvider = /** @this */ function() { - this.$get = ['$q', '$sniffer', '$$animateAsyncRun', '$$isDocumentHidden', '$timeout', - function($q, $sniffer, $$animateAsyncRun, $$isDocumentHidden, $timeout) { - - var INITIAL_STATE = 0; - var DONE_PENDING_STATE = 1; - var DONE_COMPLETE_STATE = 2; - - AnimateRunner.chain = function(chain, callback) { - var index = 0; - - next(); - function next() { - if (index === chain.length) { - callback(true); - return; - } - - chain[index](function(response) { - if (response === false) { - callback(false); - return; - } - index++; - next(); - }); - } - }; - - AnimateRunner.all = function(runners, callback) { - var count = 0; - var status = true; - forEach(runners, function(runner) { - runner.done(onProgress); - }); - - function onProgress(response) { - status = status && response; - if (++count === runners.length) { - callback(status); - } - } - }; - - function AnimateRunner(host) { - this.setHost(host); - - var rafTick = $$animateAsyncRun(); - var timeoutTick = function(fn) { - $timeout(fn, 0, false); - }; - - this._doneCallbacks = []; - this._tick = function(fn) { - if ($$isDocumentHidden()) { - timeoutTick(fn); - } else { - rafTick(fn); - } - }; - this._state = 0; - } - - AnimateRunner.prototype = { - setHost: function(host) { - this.host = host || {}; - }, - - done: function(fn) { - if (this._state === DONE_COMPLETE_STATE) { - fn(); - } else { - this._doneCallbacks.push(fn); - } - }, - - progress: noop, - - getPromise: function() { - if (!this.promise) { - var self = this; - this.promise = $q(function(resolve, reject) { - self.done(function(status) { - if (status === false) { - reject(); - } else { - resolve(); - } - }); - }); - } - return this.promise; - }, - - then: function(resolveHandler, rejectHandler) { - return this.getPromise().then(resolveHandler, rejectHandler); - }, - - 'catch': function(handler) { - return this.getPromise()['catch'](handler); - }, - - 'finally': function(handler) { - return this.getPromise()['finally'](handler); - }, - - pause: function() { - if (this.host.pause) { - this.host.pause(); - } - }, - - resume: function() { - if (this.host.resume) { - this.host.resume(); - } - }, - - end: function() { - if (this.host.end) { - this.host.end(); - } - this._resolve(true); - }, - - cancel: function() { - if (this.host.cancel) { - this.host.cancel(); - } - this._resolve(false); - }, - - complete: function(response) { - var self = this; - if (self._state === INITIAL_STATE) { - self._state = DONE_PENDING_STATE; - self._tick(function() { - self._resolve(response); - }); - } - }, - - _resolve: function(response) { - if (this._state !== DONE_COMPLETE_STATE) { - forEach(this._doneCallbacks, function(fn) { - fn(response); - }); - this._doneCallbacks.length = 0; - this._state = DONE_COMPLETE_STATE; - } - } - }; - - return AnimateRunner; - }]; -}; - -/* exported $CoreAnimateCssProvider */ - -/** - * @ngdoc service - * @name $animateCss - * @kind object - * @this - * - * @description - * This is the core version of `$animateCss`. By default, only when the `ngAnimate` is included, - * then the `$animateCss` service will actually perform animations. - * - * Click here {@link ngAnimate.$animateCss to read the documentation for $animateCss}. - */ -var $CoreAnimateCssProvider = function() { - this.$get = ['$$rAF', '$q', '$$AnimateRunner', function($$rAF, $q, $$AnimateRunner) { - - return function(element, initialOptions) { - // all of the animation functions should create - // a copy of the options data, however, if a - // parent service has already created a copy then - // we should stick to using that - var options = initialOptions || {}; - if (!options.$$prepared) { - options = copy(options); - } - - // there is no point in applying the styles since - // there is no animation that goes on at all in - // this version of $animateCss. - if (options.cleanupStyles) { - options.from = options.to = null; - } - - if (options.from) { - element.css(options.from); - options.from = null; - } - - var closed, runner = new $$AnimateRunner(); - return { - start: run, - end: run - }; - - function run() { - $$rAF(function() { - applyAnimationContents(); - if (!closed) { - runner.complete(); - } - closed = true; - }); - return runner; - } - - function applyAnimationContents() { - if (options.addClass) { - element.addClass(options.addClass); - options.addClass = null; - } - if (options.removeClass) { - element.removeClass(options.removeClass); - options.removeClass = null; - } - if (options.to) { - element.css(options.to); - options.to = null; - } - } - }; - }]; -}; - -/* global getHash: true, stripHash: false */ - -function getHash(url) { - var index = url.indexOf('#'); - return index === -1 ? '' : url.substr(index); -} - -function trimEmptyHash(url) { - return url.replace(/#$/, ''); -} - -/** - * ! This is a private undocumented service ! - * - * @name $browser - * @requires $log - * @description - * This object has two goals: - * - * - hide all the global state in the browser caused by the window object - * - abstract away all the browser specific features and inconsistencies - * - * For tests we provide {@link ngMock.$browser mock implementation} of the `$browser` - * service, which can be used for convenient testing of the application without the interaction with - * the real browser apis. - */ -/** - * @param {object} window The global window object. - * @param {object} document jQuery wrapped document. - * @param {object} $log window.console or an object with the same interface. - * @param {object} $sniffer $sniffer service - */ -function Browser(window, document, $log, $sniffer, $$taskTrackerFactory) { - var self = this, - location = window.location, - history = window.history, - setTimeout = window.setTimeout, - clearTimeout = window.clearTimeout, - pendingDeferIds = {}, - taskTracker = $$taskTrackerFactory($log); - - self.isMock = false; - - ////////////////////////////////////////////////////////////// - // Task-tracking API - ////////////////////////////////////////////////////////////// - - // TODO(vojta): remove this temporary api - self.$$completeOutstandingRequest = taskTracker.completeTask; - self.$$incOutstandingRequestCount = taskTracker.incTaskCount; - - // TODO(vojta): prefix this method with $$ ? - self.notifyWhenNoOutstandingRequests = taskTracker.notifyWhenNoPendingTasks; - - ////////////////////////////////////////////////////////////// - // URL API - ////////////////////////////////////////////////////////////// - - var cachedState, lastHistoryState, - lastBrowserUrl = location.href, - baseElement = document.find('base'), - pendingLocation = null, - getCurrentState = !$sniffer.history ? noop : function getCurrentState() { - try { - return history.state; - } catch (e) { - // MSIE can reportedly throw when there is no state (UNCONFIRMED). - } - }; - - cacheState(); - - /** - * @name $browser#url - * - * @description - * GETTER: - * Without any argument, this method just returns current value of `location.href` (with a - * trailing `#` stripped of if the hash is empty). - * - * SETTER: - * With at least one argument, this method sets url to new value. - * If html5 history api supported, `pushState`/`replaceState` is used, otherwise - * `location.href`/`location.replace` is used. - * Returns its own instance to allow chaining. - * - * NOTE: this api is intended for use only by the `$location` service. Please use the - * {@link ng.$location $location service} to change url. - * - * @param {string} url New url (when used as setter) - * @param {boolean=} replace Should new url replace current history record? - * @param {object=} state State object to use with `pushState`/`replaceState` - */ - self.url = function(url, replace, state) { - // In modern browsers `history.state` is `null` by default; treating it separately - // from `undefined` would cause `$browser.url('/foo')` to change `history.state` - // to undefined via `pushState`. Instead, let's change `undefined` to `null` here. - if (isUndefined(state)) { - state = null; - } - - // Android Browser BFCache causes location, history reference to become stale. - if (location !== window.location) location = window.location; - if (history !== window.history) history = window.history; - - // setter - if (url) { - var sameState = lastHistoryState === state; - - // Normalize the inputted URL - url = urlResolve(url).href; - - // Don't change anything if previous and current URLs and states match. This also prevents - // IE<10 from getting into redirect loop when in LocationHashbangInHtml5Url mode. - // See https://github.com/angular/angular.js/commit/ffb2701 - if (lastBrowserUrl === url && (!$sniffer.history || sameState)) { - return self; - } - var sameBase = lastBrowserUrl && stripHash(lastBrowserUrl) === stripHash(url); - lastBrowserUrl = url; - lastHistoryState = state; - // Don't use history API if only the hash changed - // due to a bug in IE10/IE11 which leads - // to not firing a `hashchange` nor `popstate` event - // in some cases (see #9143). - if ($sniffer.history && (!sameBase || !sameState)) { - history[replace ? 'replaceState' : 'pushState'](state, '', url); - cacheState(); - } else { - if (!sameBase) { - pendingLocation = url; - } - if (replace) { - location.replace(url); - } else if (!sameBase) { - location.href = url; - } else { - location.hash = getHash(url); - } - if (location.href !== url) { - pendingLocation = url; - } - } - if (pendingLocation) { - pendingLocation = url; - } - return self; - // getter - } else { - // - pendingLocation is needed as browsers don't allow to read out - // the new location.href if a reload happened or if there is a bug like in iOS 9 (see - // https://openradar.appspot.com/22186109). - return trimEmptyHash(pendingLocation || location.href); - } - }; - - /** - * @name $browser#state - * - * @description - * This method is a getter. - * - * Return history.state or null if history.state is undefined. - * - * @returns {object} state - */ - self.state = function() { - return cachedState; - }; - - var urlChangeListeners = [], - urlChangeInit = false; - - function cacheStateAndFireUrlChange() { - pendingLocation = null; - fireStateOrUrlChange(); - } - - // This variable should be used *only* inside the cacheState function. - var lastCachedState = null; - function cacheState() { - // This should be the only place in $browser where `history.state` is read. - cachedState = getCurrentState(); - cachedState = isUndefined(cachedState) ? null : cachedState; - - // Prevent callbacks fo fire twice if both hashchange & popstate were fired. - if (equals(cachedState, lastCachedState)) { - cachedState = lastCachedState; - } - - lastCachedState = cachedState; - lastHistoryState = cachedState; - } - - function fireStateOrUrlChange() { - var prevLastHistoryState = lastHistoryState; - cacheState(); - - if (lastBrowserUrl === self.url() && prevLastHistoryState === cachedState) { - return; - } - - lastBrowserUrl = self.url(); - lastHistoryState = cachedState; - forEach(urlChangeListeners, function(listener) { - listener(self.url(), cachedState); - }); - } - - /** - * @name $browser#onUrlChange - * - * @description - * Register callback function that will be called, when url changes. - * - * It's only called when the url is changed from outside of AngularJS: - * - user types different url into address bar - * - user clicks on history (forward/back) button - * - user clicks on a link - * - * It's not called when url is changed by $browser.url() method - * - * The listener gets called with new url as parameter. - * - * NOTE: this api is intended for use only by the $location service. Please use the - * {@link ng.$location $location service} to monitor url changes in AngularJS apps. - * - * @param {function(string)} listener Listener function to be called when url changes. - * @return {function(string)} Returns the registered listener fn - handy if the fn is anonymous. - */ - self.onUrlChange = function(callback) { - // TODO(vojta): refactor to use node's syntax for events - if (!urlChangeInit) { - // We listen on both (hashchange/popstate) when available, as some browsers don't - // fire popstate when user changes the address bar and don't fire hashchange when url - // changed by push/replaceState - - // html5 history api - popstate event - if ($sniffer.history) jqLite(window).on('popstate', cacheStateAndFireUrlChange); - // hashchange event - jqLite(window).on('hashchange', cacheStateAndFireUrlChange); - - urlChangeInit = true; - } - - urlChangeListeners.push(callback); - return callback; - }; - - /** - * @private - * Remove popstate and hashchange handler from window. - * - * NOTE: this api is intended for use only by $rootScope. - */ - self.$$applicationDestroyed = function() { - jqLite(window).off('hashchange popstate', cacheStateAndFireUrlChange); - }; - - /** - * Checks whether the url has changed outside of AngularJS. - * Needs to be exported to be able to check for changes that have been done in sync, - * as hashchange/popstate events fire in async. - */ - self.$$checkUrlChange = fireStateOrUrlChange; - - ////////////////////////////////////////////////////////////// - // Misc API - ////////////////////////////////////////////////////////////// - - /** - * @name $browser#baseHref - * - * @description - * Returns current - * (always relative - without domain) - * - * @returns {string} The current base href - */ - self.baseHref = function() { - var href = baseElement.attr('href'); - return href ? href.replace(/^(https?:)?\/\/[^/]*/, '') : ''; - }; - - /** - * @name $browser#defer - * @param {function()} fn A function, who's execution should be deferred. - * @param {number=} [delay=0] Number of milliseconds to defer the function execution. - * @param {string=} [taskType=DEFAULT_TASK_TYPE] The type of task that is deferred. - * @returns {*} DeferId that can be used to cancel the task via `$browser.defer.cancel()`. - * - * @description - * Executes a fn asynchronously via `setTimeout(fn, delay)`. - * - * Unlike when calling `setTimeout` directly, in test this function is mocked and instead of using - * `setTimeout` in tests, the fns are queued in an array, which can be programmatically flushed - * via `$browser.defer.flush()`. - * - */ - self.defer = function(fn, delay, taskType) { - var timeoutId; - - delay = delay || 0; - taskType = taskType || taskTracker.DEFAULT_TASK_TYPE; - - taskTracker.incTaskCount(taskType); - timeoutId = setTimeout(function() { - delete pendingDeferIds[timeoutId]; - taskTracker.completeTask(fn, taskType); - }, delay); - pendingDeferIds[timeoutId] = taskType; - - return timeoutId; - }; - - - /** - * @name $browser#defer.cancel - * - * @description - * Cancels a deferred task identified with `deferId`. - * - * @param {*} deferId Token returned by the `$browser.defer` function. - * @returns {boolean} Returns `true` if the task hasn't executed yet and was successfully - * canceled. - */ - self.defer.cancel = function(deferId) { - if (pendingDeferIds.hasOwnProperty(deferId)) { - var taskType = pendingDeferIds[deferId]; - delete pendingDeferIds[deferId]; - clearTimeout(deferId); - taskTracker.completeTask(noop, taskType); - return true; - } - return false; - }; - -} - -/** @this */ -function $BrowserProvider() { - this.$get = ['$window', '$log', '$sniffer', '$document', '$$taskTrackerFactory', - function($window, $log, $sniffer, $document, $$taskTrackerFactory) { - return new Browser($window, $document, $log, $sniffer, $$taskTrackerFactory); - }]; -} - -/** - * @ngdoc service - * @name $cacheFactory - * @this - * - * @description - * Factory that constructs {@link $cacheFactory.Cache Cache} objects and gives access to - * them. - * - * ```js - * - * var cache = $cacheFactory('cacheId'); - * expect($cacheFactory.get('cacheId')).toBe(cache); - * expect($cacheFactory.get('noSuchCacheId')).not.toBeDefined(); - * - * cache.put("key", "value"); - * cache.put("another key", "another value"); - * - * // We've specified no options on creation - * expect(cache.info()).toEqual({id: 'cacheId', size: 2}); - * - * ``` - * - * - * @param {string} cacheId Name or id of the newly created cache. - * @param {object=} options Options object that specifies the cache behavior. Properties: - * - * - `{number=}` `capacity` — turns the cache into LRU cache. - * - * @returns {object} Newly created cache object with the following set of methods: - * - * - `{object}` `info()` — Returns id, size, and options of cache. - * - `{{*}}` `put({string} key, {*} value)` — Puts a new key-value pair into the cache and returns - * it. - * - `{{*}}` `get({string} key)` — Returns cached value for `key` or undefined for cache miss. - * - `{void}` `remove({string} key)` — Removes a key-value pair from the cache. - * - `{void}` `removeAll()` — Removes all cached values. - * - `{void}` `destroy()` — Removes references to this cache from $cacheFactory. - * - * @example - - -
- - - - -

Cached Values

-
- - : - -
- -

Cache Info

-
- - : - -
-
-
- - angular.module('cacheExampleApp', []). - controller('CacheController', ['$scope', '$cacheFactory', function($scope, $cacheFactory) { - $scope.keys = []; - $scope.cache = $cacheFactory('cacheId'); - $scope.put = function(key, value) { - if (angular.isUndefined($scope.cache.get(key))) { - $scope.keys.push(key); - } - $scope.cache.put(key, angular.isUndefined(value) ? null : value); - }; - }]); - - - p { - margin: 10px 0 3px; - } - -
- */ -function $CacheFactoryProvider() { - - this.$get = function() { - var caches = {}; - - function cacheFactory(cacheId, options) { - if (cacheId in caches) { - throw minErr('$cacheFactory')('iid', 'CacheId \'{0}\' is already taken!', cacheId); - } - - var size = 0, - stats = extend({}, options, {id: cacheId}), - data = createMap(), - capacity = (options && options.capacity) || Number.MAX_VALUE, - lruHash = createMap(), - freshEnd = null, - staleEnd = null; - - /** - * @ngdoc type - * @name $cacheFactory.Cache - * - * @description - * A cache object used to store and retrieve data, primarily used by - * {@link $templateRequest $templateRequest} and the {@link ng.directive:script script} - * directive to cache templates and other data. - * - * ```js - * angular.module('superCache') - * .factory('superCache', ['$cacheFactory', function($cacheFactory) { - * return $cacheFactory('super-cache'); - * }]); - * ``` - * - * Example test: - * - * ```js - * it('should behave like a cache', inject(function(superCache) { - * superCache.put('key', 'value'); - * superCache.put('another key', 'another value'); - * - * expect(superCache.info()).toEqual({ - * id: 'super-cache', - * size: 2 - * }); - * - * superCache.remove('another key'); - * expect(superCache.get('another key')).toBeUndefined(); - * - * superCache.removeAll(); - * expect(superCache.info()).toEqual({ - * id: 'super-cache', - * size: 0 - * }); - * })); - * ``` - */ - return (caches[cacheId] = { - - /** - * @ngdoc method - * @name $cacheFactory.Cache#put - * @kind function - * - * @description - * Inserts a named entry into the {@link $cacheFactory.Cache Cache} object to be - * retrieved later, and incrementing the size of the cache if the key was not already - * present in the cache. If behaving like an LRU cache, it will also remove stale - * entries from the set. - * - * It will not insert undefined values into the cache. - * - * @param {string} key the key under which the cached data is stored. - * @param {*} value the value to store alongside the key. If it is undefined, the key - * will not be stored. - * @returns {*} the value stored. - */ - put: function(key, value) { - if (isUndefined(value)) return; - if (capacity < Number.MAX_VALUE) { - var lruEntry = lruHash[key] || (lruHash[key] = {key: key}); - - refresh(lruEntry); - } - - if (!(key in data)) size++; - data[key] = value; - - if (size > capacity) { - this.remove(staleEnd.key); - } - - return value; - }, - - /** - * @ngdoc method - * @name $cacheFactory.Cache#get - * @kind function - * - * @description - * Retrieves named data stored in the {@link $cacheFactory.Cache Cache} object. - * - * @param {string} key the key of the data to be retrieved - * @returns {*} the value stored. - */ - get: function(key) { - if (capacity < Number.MAX_VALUE) { - var lruEntry = lruHash[key]; - - if (!lruEntry) return; - - refresh(lruEntry); - } - - return data[key]; - }, - - - /** - * @ngdoc method - * @name $cacheFactory.Cache#remove - * @kind function - * - * @description - * Removes an entry from the {@link $cacheFactory.Cache Cache} object. - * - * @param {string} key the key of the entry to be removed - */ - remove: function(key) { - if (capacity < Number.MAX_VALUE) { - var lruEntry = lruHash[key]; - - if (!lruEntry) return; - - if (lruEntry === freshEnd) freshEnd = lruEntry.p; - if (lruEntry === staleEnd) staleEnd = lruEntry.n; - link(lruEntry.n,lruEntry.p); - - delete lruHash[key]; - } - - if (!(key in data)) return; - - delete data[key]; - size--; - }, - - - /** - * @ngdoc method - * @name $cacheFactory.Cache#removeAll - * @kind function - * - * @description - * Clears the cache object of any entries. - */ - removeAll: function() { - data = createMap(); - size = 0; - lruHash = createMap(); - freshEnd = staleEnd = null; - }, - - - /** - * @ngdoc method - * @name $cacheFactory.Cache#destroy - * @kind function - * - * @description - * Destroys the {@link $cacheFactory.Cache Cache} object entirely, - * removing it from the {@link $cacheFactory $cacheFactory} set. - */ - destroy: function() { - data = null; - stats = null; - lruHash = null; - delete caches[cacheId]; - }, - - - /** - * @ngdoc method - * @name $cacheFactory.Cache#info - * @kind function - * - * @description - * Retrieve information regarding a particular {@link $cacheFactory.Cache Cache}. - * - * @returns {object} an object with the following properties: - *
    - *
  • **id**: the id of the cache instance
  • - *
  • **size**: the number of entries kept in the cache instance
  • - *
  • **...**: any additional properties from the options object when creating the - * cache.
  • - *
- */ - info: function() { - return extend({}, stats, {size: size}); - } - }); - - - /** - * makes the `entry` the freshEnd of the LRU linked list - */ - function refresh(entry) { - if (entry !== freshEnd) { - if (!staleEnd) { - staleEnd = entry; - } else if (staleEnd === entry) { - staleEnd = entry.n; - } - - link(entry.n, entry.p); - link(entry, freshEnd); - freshEnd = entry; - freshEnd.n = null; - } - } - - - /** - * bidirectionally links two entries of the LRU linked list - */ - function link(nextEntry, prevEntry) { - if (nextEntry !== prevEntry) { - if (nextEntry) nextEntry.p = prevEntry; //p stands for previous, 'prev' didn't minify - if (prevEntry) prevEntry.n = nextEntry; //n stands for next, 'next' didn't minify - } - } - } - - - /** - * @ngdoc method - * @name $cacheFactory#info - * - * @description - * Get information about all the caches that have been created - * - * @returns {Object} - key-value map of `cacheId` to the result of calling `cache#info` - */ - cacheFactory.info = function() { - var info = {}; - forEach(caches, function(cache, cacheId) { - info[cacheId] = cache.info(); - }); - return info; - }; - - - /** - * @ngdoc method - * @name $cacheFactory#get - * - * @description - * Get access to a cache object by the `cacheId` used when it was created. - * - * @param {string} cacheId Name or id of a cache to access. - * @returns {object} Cache object identified by the cacheId or undefined if no such cache. - */ - cacheFactory.get = function(cacheId) { - return caches[cacheId]; - }; - - - return cacheFactory; - }; -} - -/** - * @ngdoc service - * @name $templateCache - * @this - * - * @description - * `$templateCache` is a {@link $cacheFactory.Cache Cache object} created by the - * {@link ng.$cacheFactory $cacheFactory}. - * - * The first time a template is used, it is loaded in the template cache for quick retrieval. You - * can load templates directly into the cache in a `script` tag, by using {@link $templateRequest}, - * or by consuming the `$templateCache` service directly. - * - * Adding via the `script` tag: - * - * ```html - * - * ``` - * - * **Note:** the `script` tag containing the template does not need to be included in the `head` of - * the document, but it must be a descendent of the {@link ng.$rootElement $rootElement} (e.g. - * element with {@link ngApp} attribute), otherwise the template will be ignored. - * - * Adding via the `$templateCache` service: - * - * ```js - * var myApp = angular.module('myApp', []); - * myApp.run(function($templateCache) { - * $templateCache.put('templateId.html', 'This is the content of the template'); - * }); - * ``` - * - * To retrieve the template later, simply use it in your component: - * ```js - * myApp.component('myComponent', { - * templateUrl: 'templateId.html' - * }); - * ``` - * - * or get it via the `$templateCache` service: - * ```js - * $templateCache.get('templateId.html') - * ``` - * - */ -function $TemplateCacheProvider() { - this.$get = ['$cacheFactory', function($cacheFactory) { - return $cacheFactory('templates'); - }]; -} - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * Any commits to this file should be reviewed with security in mind. * - * Changes to this file can potentially create security vulnerabilities. * - * An approval from 2 Core members with history of modifying * - * this file is required. * - * * - * Does the change somehow allow for arbitrary javascript to be executed? * - * Or allows for someone to change the prototype of built-in objects? * - * Or gives undesired access to variables like document or window? * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -/* ! VARIABLE/FUNCTION NAMING CONVENTIONS THAT APPLY TO THIS FILE! - * - * DOM-related variables: - * - * - "node" - DOM Node - * - "element" - DOM Element or Node - * - "$node" or "$element" - jqLite-wrapped node or element - * - * - * Compiler related stuff: - * - * - "linkFn" - linking fn of a single directive - * - "nodeLinkFn" - function that aggregates all linking fns for a particular node - * - "childLinkFn" - function that aggregates all linking fns for child nodes of a particular node - * - "compositeLinkFn" - function that aggregates all linking fns for a compilation root (nodeList) - */ - - -/** - * @ngdoc service - * @name $compile - * @kind function - * - * @description - * Compiles an HTML string or DOM into a template and produces a template function, which - * can then be used to link {@link ng.$rootScope.Scope `scope`} and the template together. - * - * The compilation is a process of walking the DOM tree and matching DOM elements to - * {@link ng.$compileProvider#directive directives}. - * - *
- * **Note:** This document is an in-depth reference of all directive options. - * For a gentle introduction to directives with examples of common use cases, - * see the {@link guide/directive directive guide}. - *
- * - * ## Comprehensive Directive API - * - * There are many different options for a directive. - * - * The difference resides in the return value of the factory function. - * You can either return a {@link $compile#directive-definition-object Directive Definition Object (see below)} - * that defines the directive properties, or just the `postLink` function (all other properties will have - * the default values). - * - *
- * **Best Practice:** It's recommended to use the "directive definition object" form. - *
- * - * Here's an example directive declared with a Directive Definition Object: - * - * ```js - * var myModule = angular.module(...); - * - * myModule.directive('directiveName', function factory(injectables) { - * var directiveDefinitionObject = { - * {@link $compile#-priority- priority}: 0, - * {@link $compile#-template- template}: '
', // or // function(tElement, tAttrs) { ... }, - * // or - * // {@link $compile#-templateurl- templateUrl}: 'directive.html', // or // function(tElement, tAttrs) { ... }, - * {@link $compile#-transclude- transclude}: false, - * {@link $compile#-restrict- restrict}: 'A', - * {@link $compile#-templatenamespace- templateNamespace}: 'html', - * {@link $compile#-scope- scope}: false, - * {@link $compile#-controller- controller}: function($scope, $element, $attrs, $transclude, otherInjectables) { ... }, - * {@link $compile#-controlleras- controllerAs}: 'stringIdentifier', - * {@link $compile#-bindtocontroller- bindToController}: false, - * {@link $compile#-require- require}: 'siblingDirectiveName', // or // ['^parentDirectiveName', '?optionalDirectiveName', '?^optionalParent'], - * {@link $compile#-multielement- multiElement}: false, - * {@link $compile#-compile- compile}: function compile(tElement, tAttrs, transclude) { - * return { - * {@link $compile#pre-linking-function pre}: function preLink(scope, iElement, iAttrs, controller) { ... }, - * {@link $compile#post-linking-function post}: function postLink(scope, iElement, iAttrs, controller) { ... } - * } - * // or - * // return function postLink( ... ) { ... } - * }, - * // or - * // {@link $compile#-link- link}: { - * // {@link $compile#pre-linking-function pre}: function preLink(scope, iElement, iAttrs, controller) { ... }, - * // {@link $compile#post-linking-function post}: function postLink(scope, iElement, iAttrs, controller) { ... } - * // } - * // or - * // {@link $compile#-link- link}: function postLink( ... ) { ... } - * }; - * return directiveDefinitionObject; - * }); - * ``` - * - *
- * **Note:** Any unspecified options will use the default value. You can see the default values below. - *
- * - * Therefore the above can be simplified as: - * - * ```js - * var myModule = angular.module(...); - * - * myModule.directive('directiveName', function factory(injectables) { - * var directiveDefinitionObject = { - * link: function postLink(scope, iElement, iAttrs) { ... } - * }; - * return directiveDefinitionObject; - * // or - * // return function postLink(scope, iElement, iAttrs) { ... } - * }); - * ``` - * - * ### Life-cycle hooks - * Directive controllers can provide the following methods that are called by AngularJS at points in the life-cycle of the - * directive: - * * `$onInit()` - Called on each controller after all the controllers on an element have been constructed and - * had their bindings initialized (and before the pre & post linking functions for the directives on - * this element). This is a good place to put initialization code for your controller. - * * `$onChanges(changesObj)` - Called whenever one-way (`<`) or interpolation (`@`) bindings are updated. The - * `changesObj` is a hash whose keys are the names of the bound properties that have changed, and the values are an - * object of the form `{ currentValue, previousValue, isFirstChange() }`. Use this hook to trigger updates within a - * component such as cloning the bound value to prevent accidental mutation of the outer value. Note that this will - * also be called when your bindings are initialized. - * * `$doCheck()` - Called on each turn of the digest cycle. Provides an opportunity to detect and act on - * changes. Any actions that you wish to take in response to the changes that you detect must be - * invoked from this hook; implementing this has no effect on when `$onChanges` is called. For example, this hook - * could be useful if you wish to perform a deep equality check, or to check a Date object, changes to which would not - * be detected by AngularJS's change detector and thus not trigger `$onChanges`. This hook is invoked with no arguments; - * if detecting changes, you must store the previous value(s) for comparison to the current values. - * * `$onDestroy()` - Called on a controller when its containing scope is destroyed. Use this hook for releasing - * external resources, watches and event handlers. Note that components have their `$onDestroy()` hooks called in - * the same order as the `$scope.$broadcast` events are triggered, which is top down. This means that parent - * components will have their `$onDestroy()` hook called before child components. - * * `$postLink()` - Called after this controller's element and its children have been linked. Similar to the post-link - * function this hook can be used to set up DOM event handlers and do direct DOM manipulation. - * Note that child elements that contain `templateUrl` directives will not have been compiled and linked since - * they are waiting for their template to load asynchronously and their own compilation and linking has been - * suspended until that occurs. - * - * #### Comparison with life-cycle hooks in the new Angular - * The new Angular also uses life-cycle hooks for its components. While the AngularJS life-cycle hooks are similar there are - * some differences that you should be aware of, especially when it comes to moving your code from AngularJS to Angular: - * - * * AngularJS hooks are prefixed with `$`, such as `$onInit`. Angular hooks are prefixed with `ng`, such as `ngOnInit`. - * * AngularJS hooks can be defined on the controller prototype or added to the controller inside its constructor. - * In Angular you can only define hooks on the prototype of the Component class. - * * Due to the differences in change-detection, you may get many more calls to `$doCheck` in AngularJS than you would to - * `ngDoCheck` in Angular. - * * Changes to the model inside `$doCheck` will trigger new turns of the digest loop, which will cause the changes to be - * propagated throughout the application. - * Angular does not allow the `ngDoCheck` hook to trigger a change outside of the component. It will either throw an - * error or do nothing depending upon the state of `enableProdMode()`. - * - * #### Life-cycle hook examples - * - * This example shows how you can check for mutations to a Date object even though the identity of the object - * has not changed. - * - * - * - * angular.module('do-check-module', []) - * .component('app', { - * template: - * 'Month: ' + - * 'Date: {{ $ctrl.date }}' + - * '', - * controller: function() { - * this.date = new Date(); - * this.month = this.date.getMonth(); - * this.updateDate = function() { - * this.date.setMonth(this.month); - * }; - * } - * }) - * .component('test', { - * bindings: { date: '<' }, - * template: - * '
{{ $ctrl.log | json }}
', - * controller: function() { - * var previousValue; - * this.log = []; - * this.$doCheck = function() { - * var currentValue = this.date && this.date.valueOf(); - * if (previousValue !== currentValue) { - * this.log.push('doCheck: date mutated: ' + this.date); - * previousValue = currentValue; - * } - * }; - * } - * }); - *
- * - * - * - *
- * - * This example show how you might use `$doCheck` to trigger changes in your component's inputs even if the - * actual identity of the component doesn't change. (Be aware that cloning and deep equality checks on large - * arrays or objects can have a negative impact on your application performance.) - * - * - * - *
- * - * - *
{{ items }}
- * - *
- *
- * - * angular.module('do-check-module', []) - * .component('test', { - * bindings: { items: '<' }, - * template: - * '
{{ $ctrl.log | json }}
', - * controller: function() { - * this.log = []; - * - * this.$doCheck = function() { - * if (this.items_ref !== this.items) { - * this.log.push('doCheck: items changed'); - * this.items_ref = this.items; - * } - * if (!angular.equals(this.items_clone, this.items)) { - * this.log.push('doCheck: items mutated'); - * this.items_clone = angular.copy(this.items); - * } - * }; - * } - * }); - *
- *
- * - * - * ### Directive Definition Object - * - * The directive definition object provides instructions to the {@link ng.$compile - * compiler}. The attributes are: - * - * #### `multiElement` - * When this property is set to true (default is `false`), 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 behavioral (such as {@link ngClick}), and which - * do not manipulate or replace child nodes (such as {@link ngInclude}). - * - * #### `priority` - * 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` - * 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` - * The scope property can be `false`, `true`, or an object: - * - * * **`false` (default):** No scope will be created for the directive. The directive will use its - * parent's scope. - * - * * **`true`:** A new child scope that prototypically inherits from its parent will be created for - * the directive's element. If multiple directives on the same element request a new scope, - * only one new scope is created. - * - * * **`{...}` (an object hash):** A new "isolate" scope is created for the directive's template. - * The 'isolate' scope differs from normal scope in that it does not prototypically - * inherit from its parent scope. This is useful when creating reusable components, which should not - * accidentally read or modify data in the parent scope. Note that an isolate scope - * directive without a `template` or `templateUrl` will not apply the isolate scope - * to its children elements. - * - * The 'isolate' scope object hash defines a set of local scope properties derived from attributes on the - * directive's element. These local properties are useful for aliasing values for templates. The keys in - * the object hash map to the name of the property on the isolate scope; the values define how the property - * is bound to the parent scope, via matching attributes on the directive's element: - * - * * `@` or `@attr` - bind a local scope property to the value of DOM attribute. The result is - * always a string since DOM attributes are strings. If no `attr` name is specified then the - * attribute name is assumed to be the same as the local name. Given `` and the isolate scope definition `scope: { localName:'@myAttr' }`, - * the directive's scope property `localName` will reflect the interpolated value of `hello - * {{name}}`. As the `name` attribute changes so will the `localName` property on the directive's - * scope. The `name` is read from the parent scope (not the directive's scope). - * - * * `=` or `=attr` - set up a bidirectional binding between a local scope property and an expression - * passed via the attribute `attr`. The expression is evaluated in the context of the parent scope. - * If no `attr` name is specified then the attribute name is assumed to be the same as the local - * name. Given `` and the isolate scope definition `scope: { - * localModel: '=myAttr' }`, the property `localModel` on the directive's scope will reflect the - * value of `parentModel` on the parent scope. Changes to `parentModel` will be reflected in - * `localModel` and vice versa. If the binding expression is non-assignable, or if the attribute - * isn't optional and doesn't exist, an exception - * ({@link error/$compile/nonassign `$compile:nonassign`}) will be thrown upon discovering changes - * to the local value, since it will be impossible to sync them back to the parent scope. - * - * By default, the {@link ng.$rootScope.Scope#$watch `$watch`} - * method is used for tracking changes, and the equality check is based on object identity. - * However, if an object literal or an array literal is passed as the binding expression, the - * equality check is done by value (using the {@link angular.equals} function). It's also possible - * to watch the evaluated value shallowly with {@link ng.$rootScope.Scope#$watchCollection - * `$watchCollection`}: use `=*` or `=*attr` - * - * * `<` or `` and directive definition of - * `scope: { localModel:'` and the isolate scope definition `scope: { - * localFn:'&myAttr' }`, the isolate scope property `localFn` will point to a function wrapper for - * the `count = count + value` expression. Often it's desirable to pass data from the isolated scope - * via an expression to the parent scope. This can be done by passing a map of local variable names - * and values into the expression wrapper fn. For example, if the expression is `increment(amount)` - * then we can specify the amount value by calling the `localFn` as `localFn({amount: 22})`. - * - * All 4 kinds of bindings (`@`, `=`, `<`, and `&`) can be made optional by adding `?` to the expression. - * The marker must come after the mode and before the attribute name. - * See the {@link error/$compile/iscp Invalid Isolate Scope Definition error} for definition examples. - * This is useful to refine the interface directives provide. - * One subtle difference between optional and non-optional happens **when the binding attribute is not - * set**: - * - the binding is optional: the property will not be defined - * - the binding is not optional: the property is defined - * - * ```js - *app.directive('testDir', function() { - return { - scope: { - notoptional: '=', - optional: '=?', - }, - bindToController: true, - controller: function() { - this.$onInit = function() { - console.log(this.hasOwnProperty('notoptional')) // true - console.log(this.hasOwnProperty('optional')) // false - } - } - } - }) - *``` - * - * - * ##### Combining directives with different scope defintions - * - * In general it's possible to apply more than one directive to one element, but there might be limitations - * depending on the type of scope required by the directives. The following points will help explain these limitations. - * For simplicity only two directives are taken into account, but it is also applicable for several directives: - * - * * **no scope** + **no scope** => Two directives which don't require their own scope will use their parent's scope - * * **child scope** + **no scope** => Both directives will share one single child scope - * * **child scope** + **child scope** => Both directives will share one single child scope - * * **isolated scope** + **no scope** => The isolated directive will use it's own created isolated scope. The other directive will use - * its parent's scope - * * **isolated scope** + **child scope** => **Won't work!** Only one scope can be related to one element. Therefore these directives cannot - * be applied to the same element. - * * **isolated scope** + **isolated scope** => **Won't work!** Only one scope can be related to one element. Therefore these directives - * cannot be applied to the same element. - * - * - * #### `bindToController` - * This property is used to bind scope properties directly to the controller. It can be either - * `true` or an object hash with the same format as the `scope` property. - * - * When an isolate scope is used for a directive (see above), `bindToController: true` will - * allow a component to have its properties bound to the controller, rather than to scope. - * - * After the controller is instantiated, the initial values of the isolate scope bindings will be bound to the controller - * properties. You can access these bindings once they have been initialized by providing a controller method called - * `$onInit`, which is called after all the controllers on an element have been constructed and had their bindings - * initialized. - * - * It is also possible to set `bindToController` to an object hash with the same format as the `scope` property. - * This will set up the scope bindings to the controller directly. Note that `scope` can still be used - * to define which kind of scope is created. By default, no scope is created. Use `scope: {}` to create an isolate - * scope (useful for component directives). - * - * If both `bindToController` and `scope` are defined and have object hashes, `bindToController` overrides `scope`. - * - * - * #### `controller` - * Controller constructor function. The controller is instantiated before the - * pre-linking phase and can be accessed by other directives (see - * `require` attribute). This allows the directives to communicate with each other and augment - * each other's behavior. The controller is injectable (and supports bracket notation) with the following locals: - * - * * `$scope` - Current scope associated with the element - * * `$element` - Current element - * * `$attrs` - Current attributes object for the element - * * `$transclude` - A transclude linking function pre-bound to the correct transclusion scope: - * `function([scope], cloneLinkingFn, futureParentElement, slotName)`: - * * `scope`: (optional) override the scope. - * * `cloneLinkingFn`: (optional) argument to create clones of the original transcluded content. - * * `futureParentElement` (optional): - * * defines the parent to which the `cloneLinkingFn` will add the cloned elements. - * * default: `$element.parent()` resp. `$element` for `transclude:'element'` resp. `transclude:true`. - * * only needed for transcludes that are allowed to contain non html elements (e.g. SVG elements) - * and when the `cloneLinkingFn` is passed, - * as those elements need to created and cloned in a special way when they are defined outside their - * usual containers (e.g. like ``). - * * See also the `directive.templateNamespace` property. - * * `slotName`: (optional) the name of the slot to transclude. If falsy (e.g. `null`, `undefined` or `''`) - * then the default transclusion is provided. - * The `$transclude` function also has a method on it, `$transclude.isSlotFilled(slotName)`, which returns - * `true` if the specified slot contains content (i.e. one or more DOM nodes). - * - * #### `require` - * Require another directive and inject its controller as the fourth argument to the linking function. The - * `require` property can be a string, an array or an object: - * * a **string** containing the name of the directive to pass to the linking function - * * an **array** containing the names of directives to pass to the linking function. The argument passed to the - * linking function will be an array of controllers in the same order as the names in the `require` property - * * an **object** whose property values are the names of the directives to pass to the linking function. The argument - * passed to the linking function will also be an object with matching keys, whose values will hold the corresponding - * controllers. - * - * If the `require` property is an object and `bindToController` is truthy, then the required controllers are - * bound to the controller using the keys of the `require` property. This binding occurs after all the controllers - * have been constructed but before `$onInit` is called. - * If the name of the required controller is the same as the local name (the key), the name can be - * omitted. For example, `{parentDir: '^^'}` is equivalent to `{parentDir: '^^parentDir'}`. - * See the {@link $compileProvider#component} helper for an example of how this can be used. - * If no such required directive(s) can be found, or if the directive does not have a controller, then an error is - * raised (unless no link function is specified and the required controllers are not being bound to the directive - * controller, in which case error checking is skipped). The name can be prefixed with: - * - * * (no prefix) - Locate the required controller on the current element. Throw an error if not found. - * * `?` - Attempt to locate the required controller or pass `null` to the `link` fn if not found. - * * `^` - Locate the required controller by searching the element and its parents. Throw an error if not found. - * * `^^` - Locate the required controller by searching the element's parents. Throw an error if not found. - * * `?^` - Attempt to locate the required controller by searching the element and its parents or pass - * `null` to the `link` fn if not found. - * * `?^^` - Attempt to locate the required controller by searching the element's parents, or pass - * `null` to the `link` fn if not found. - * - * - * #### `controllerAs` - * Identifier name for a reference to the controller in the directive's scope. - * This allows the controller to be referenced from the directive template. This is especially - * useful when a directive is used as component, i.e. with an `isolate` scope. It's also possible - * to use it in a directive without an `isolate` / `new` scope, but you need to be aware that the - * `controllerAs` reference might overwrite a property that already exists on the parent scope. - * - * - * #### `restrict` - * 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): `` - * * `A` - Attribute (default): `
` - * * `C` - Class: `
` - * * `M` - Comment: `` - * - * - * #### `templateNamespace` - * 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 `` and ``. - * - * * `html` - All root nodes in the template are HTML. Root nodes may also be - * top-level elements such as `` or ``. - * * `svg` - The root nodes in the template are SVG elements (excluding ``). - * * `math` - The root nodes in the template are MathML elements (excluding ``). - * - * If no `templateNamespace` is specified, then the namespace is considered to be `html`. - * - * #### `template` - * 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). - * - * Value may be: - * - * * A string. For example `
{{delete_str}}
`. - * * A function which takes two arguments `tElement` and `tAttrs` (described in the `compile` - * function api below) and returns a string value. - * - * - * #### `templateUrl` - * This is similar to `template` but the template is loaded from the specified URL, asynchronously. - * - * Because template loading is asynchronous the compiler will suspend compilation of directives on that element - * for later when the template has been resolved. In the meantime it will continue to compile and link - * sibling and parent elements as though this element had not contained any directives. - * - * The compiler does not suspend the entire compilation to wait for templates to be loaded because this - * would result in the whole app "stalling" until all templates are loaded asynchronously - even in the - * case when only one deeply nested directive has `templateUrl`. - * - * Template loading is asynchronous even if the template has been preloaded into the {@link $templateCache}. - * - * You can specify `templateUrl` as a string representing the URL or as a function which takes two - * arguments `tElement` and `tAttrs` (described in the `compile` function api below) and returns - * a string value representing the url. In either case, the template URL is passed through {@link - * $sce#getTrustedResourceUrl $sce.getTrustedResourceUrl}. - * - * - * #### `replace` - *
- * **Note:** `replace` is deprecated in AngularJS and has been removed in the new Angular (v2+). - *
- * - * Specifies what the template should replace. Defaults to `false`. - * - * * `true` - the template will replace the directive's element. - * * `false` - the template will replace the contents of the directive's element. - * - * The replacement process migrates all of the attributes / classes from the old element to the new - * one. See the {@link guide/directive#template-expanding-directive - * Directives Guide} for an example. - * - * There are very few scenarios where element replacement is required for the application function, - * the main one being reusable custom components that are used within SVG contexts - * (because SVG doesn't work with custom elements in the DOM tree). - * - * #### `transclude` - * 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**. See the - * {@link $compile#transclusion Transclusion} section below. - * - * - * #### `compile` - * - * ```js - * function compile(tElement, tAttrs, transclude) { ... } - * ``` - * - * The compile function deals with transforming the template DOM. Since most directives do not do - * template transformation, it is not used often. The compile function takes the following arguments: - * - * * `tElement` - template element - The element where the directive has been declared. It is - * safe to do template transformation on the element and child elements only. - * - * * `tAttrs` - template attributes - Normalized list of attributes declared on this element shared - * between all directive compile functions. - * - * * `transclude` - [*DEPRECATED*!] A transclude linking function: `function(scope, cloneLinkingFn)` - * - *
- * **Note:** The template instance and the link instance may be different objects if the template has - * been cloned. For this reason it is **not** safe to do anything other than DOM transformations that - * apply to all cloned DOM nodes within the compile function. Specifically, DOM listener registration - * should be done in a linking function rather than in a compile function. - *
- - *
- * **Note:** The compile function cannot handle directives that recursively use themselves in their - * own templates or compile functions. Compiling these directives results in an infinite loop and - * stack overflow errors. - * - * This can be avoided by manually using `$compile` in the postLink function to imperatively compile - * a directive's template instead of relying on automatic template compilation via `template` or - * `templateUrl` declaration or manual compilation inside the compile function. - *
- * - *
- * **Note:** The `transclude` function that is passed to the compile function is deprecated, as it - * e.g. does not know about the right outer scope. Please use the transclude function that is passed - * to the link function instead. - *
- - * A compile function can have a return value which can be either a function or an object. - * - * * returning a (post-link) function - is equivalent to registering the linking function via the - * `link` property of the config object when the compile function is empty. - * - * * returning an object with function(s) registered via `pre` and `post` properties - allows you to - * control when a linking function should be called during the linking phase. See info about - * pre-linking and post-linking functions below. - * - * - * #### `link` - * This property is used only if the `compile` property is not defined. - * - * ```js - * function link(scope, iElement, iAttrs, controller, transcludeFn) { ... } - * ``` - * - * 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. - * - * * `scope` - {@link ng.$rootScope.Scope Scope} - The scope to be used by the - * directive for registering {@link ng.$rootScope.Scope#$watch watches}. - * - * * `iElement` - instance element - The element where the directive is to be used. It is safe to - * manipulate the children of the element only in `postLink` function since the children have - * already been linked. - * - * * `iAttrs` - instance attributes - Normalized list of attributes declared on this element shared - * between all directive linking functions. - * - * * `controller` - the directive's required controller instance(s) - Instances are shared - * among all directives, which allows the directives to use the controllers as a communication - * channel. The exact value depends on the directive's `require` property: - * * no controller(s) required: the directive's own controller, or `undefined` if it doesn't have one - * * `string`: the controller instance - * * `array`: array of controller instances - * - * If a required controller cannot be found, and it is optional, the instance is `null`, - * otherwise the {@link error:$compile:ctreq Missing Required Controller} error is thrown. - * - * Note that you can also require the directive's own controller - it will be made available like - * any other controller. - * - * * `transcludeFn` - A transclude linking function pre-bound to the correct transclusion scope. - * This is the same as the `$transclude` parameter of directive controllers, - * see {@link ng.$compile#-controller- the controller section for details}. - * `function([scope], cloneLinkingFn, futureParentElement)`. - * - * #### Pre-linking function - * - * Executed before the child elements are linked. Not safe to do DOM transformation since the - * compiler linking function will fail to locate the correct elements for linking. - * - * #### Post-linking function - * - * Executed after the child elements are linked. - * - * Note that child elements that contain `templateUrl` directives will not have been compiled - * and linked since they are waiting for their template to load asynchronously and their own - * compilation and linking has been suspended until that occurs. - * - * It is safe to do DOM transformation in the post-linking function on elements that are not waiting - * for their async templates to be resolved. - * - * - * ### Transclusion - * - * Transclusion is the process of extracting a collection of DOM elements from one part of the DOM and - * copying them to another part of the DOM, while maintaining their connection to the original AngularJS - * scope from where they were taken. - * - * Transclusion is used (often with {@link ngTransclude}) to insert the - * original contents of a directive's element into a specified place in the template of the directive. - * The benefit of transclusion, over simply moving the DOM elements manually, is that the transcluded - * content has access to the properties on the scope from which it was taken, even if the directive - * has isolated scope. - * See the {@link guide/directive#creating-a-directive-that-wraps-other-elements Directives Guide}. - * - * This makes it possible for the widget to have private state for its template, while the transcluded - * content has access to its originating scope. - * - *
- * **Note:** When testing an element transclude directive you must not place the directive at the root of the - * DOM fragment that is being compiled. See {@link guide/unit-testing#testing-transclusion-directives - * Testing Transclusion Directives}. - *
- * - * There are three kinds of transclusion depending upon whether you want to transclude just the contents of the - * directive's element, the entire element or multiple parts of the element contents: - * - * * `true` - transclude the content (i.e. the child nodes) of the directive's element. - * * `'element'` - transclude the whole of the directive's element including any directives on this - * element that are defined at a lower priority than this directive. When used, the `template` - * property is ignored. - * * **`{...}` (an object hash):** - map elements of the content onto transclusion "slots" in the template. - * - * **Multi-slot transclusion** is declared by providing an object for the `transclude` property. - * - * This object is a map where the keys are the name of the slot to fill and the value is an element selector - * used to match the HTML to the slot. The element selector should be in normalized form (e.g. `myElement`) - * and will match the standard element variants (e.g. `my-element`, `my:element`, `data-my-element`, etc). - * - * For further information check out the guide on {@link guide/directive#matching-directives Matching Directives}. - * - * If the element selector is prefixed with a `?` then that slot is optional. - * - * For example, the transclude object `{ slotA: '?myCustomElement' }` maps `` elements to - * the `slotA` slot, which can be accessed via the `$transclude` function or via the {@link ngTransclude} directive. - * - * Slots that are not marked as optional (`?`) will trigger a compile time error if there are no matching elements - * in the transclude content. If you wish to know if an optional slot was filled with content, then you can call - * `$transclude.isSlotFilled(slotName)` on the transclude function passed to the directive's link function and - * injectable into the directive's controller. - * - * - * #### Transclusion Functions - * - * When a directive requests transclusion, the compiler extracts its contents and provides a **transclusion - * function** to the directive's `link` function and `controller`. This transclusion function is a special - * **linking function** that will return the compiled contents linked to a new transclusion scope. - * - *
- * If you are just using {@link ngTransclude} then you don't need to worry about this function, since - * ngTransclude will deal with it for us. - *
- * - * If you want to manually control the insertion and removal of the transcluded content in your directive - * then you must use this transclude function. When you call a transclude function it returns a jqLite/JQuery - * object that contains the compiled DOM, which is linked to the correct transclusion scope. - * - * When you call a transclusion function you can pass in a **clone attach function**. This function accepts - * two parameters, `function(clone, scope) { ... }`, where the `clone` is a fresh compiled copy of your transcluded - * content and the `scope` is the newly created transclusion scope, which the clone will be linked to. - * - *
- * **Best Practice**: Always provide a `cloneFn` (clone attach function) when you call a transclude function - * since you then get a fresh clone of the original DOM and also have access to the new transclusion scope. - *
- * - * It is normal practice to attach your transcluded content (`clone`) to the DOM inside your **clone - * attach function**: - * - * ```js - * var transcludedContent, transclusionScope; - * - * $transclude(function(clone, scope) { - * element.append(clone); - * transcludedContent = clone; - * transclusionScope = scope; - * }); - * ``` - * - * Later, if you want to remove the transcluded content from your DOM then you should also destroy the - * associated transclusion scope: - * - * ```js - * transcludedContent.remove(); - * transclusionScope.$destroy(); - * ``` - * - *
- * **Best Practice**: if you intend to add and remove transcluded content manually in your directive - * (by calling the transclude function to get the DOM and calling `element.remove()` to remove it), - * then you are also responsible for calling `$destroy` on the transclusion scope. - *
- * - * The built-in DOM manipulation directives, such as {@link ngIf}, {@link ngSwitch} and {@link ngRepeat} - * automatically destroy their transcluded clones as necessary so you do not need to worry about this if - * you are simply using {@link ngTransclude} to inject the transclusion into your directive. - * - * - * #### Transclusion Scopes - * - * When you call a transclude function it returns a DOM fragment that is pre-bound to a **transclusion - * scope**. This scope is special, in that it is a child of the directive's scope (and so gets destroyed - * when the directive's scope gets destroyed) but it inherits the properties of the scope from which it - * was taken. - * - * For example consider a directive that uses transclusion and isolated scope. The DOM hierarchy might look - * like this: - * - * ```html - *
- *
- *
- *
- *
- *
- * ``` - * - * The `$parent` scope hierarchy will look like this: - * - ``` - - $rootScope - - isolate - - transclusion - ``` - * - * but the scopes will inherit prototypically from different scopes to their `$parent`. - * - ``` - - $rootScope - - transclusion - - isolate - ``` - * - * - * ### Attributes - * - * The {@link ng.$compile.directive.Attributes Attributes} object - passed as a parameter in the - * `link()` or `compile()` functions. It has a variety of uses. - * - * * *Accessing normalized attribute names:* Directives like `ngBind` can be expressed in many ways: - * `ng:bind`, `data-ng-bind`, or `x-ng-bind`. The attributes object allows for normalized access - * to the attributes. - * - * * *Directive inter-communication:* All directives share the same instance of the attributes - * object which allows the directives to use the attributes object as inter directive - * communication. - * - * * *Supports interpolation:* Interpolation attributes are assigned to the attribute object - * allowing other directives to read the interpolated value. - * - * * *Observing interpolated attributes:* Use `$observe` to observe the value changes of attributes - * that contain interpolation (e.g. `src="{{bar}}"`). Not only is this very efficient but it's also - * the only way to easily get the actual value because during the linking phase the interpolation - * hasn't been evaluated yet and so the value is at this time set to `undefined`. - * - * ```js - * function linkingFn(scope, elm, attrs, ctrl) { - * // get the attribute value - * console.log(attrs.ngModel); - * - * // change the attribute - * attrs.$set('ngModel', 'new value'); - * - * // observe changes to interpolated attribute - * attrs.$observe('ngModel', function(value) { - * console.log('ngModel has changed value to ' + value); - * }); - * } - * ``` - * - * ## Example - * - *
- * **Note**: Typically directives are registered with `module.directive`. The example below is - * to illustrate how `$compile` works. - *
- * - - - -
-
-
-
-
-
- - it('should auto compile', function() { - var textarea = $('textarea'); - var output = $('div[compile]'); - // The initial state reads 'Hello AngularJS'. - expect(output.getText()).toBe('Hello AngularJS'); - textarea.clear(); - textarea.sendKeys('{{name}}!'); - expect(output.getText()).toBe('AngularJS!'); - }); - -
- - * - * - * @param {string|DOMElement} element Element or HTML string to compile into a template function. - * @param {function(angular.Scope, cloneAttachFn=)} transclude function available to directives - DEPRECATED. - * - *
- * **Note:** Passing a `transclude` function to the $compile function is deprecated, as it - * e.g. will not use the right outer scope. Please pass the transclude function as a - * `parentBoundTranscludeFn` to the link function instead. - *
- * - * @param {number} maxPriority only apply directives lower than given priority (Only effects the - * root element(s), not their children) - * @returns {function(scope, cloneAttachFn=, options=)} a link function which is used to bind template - * (a DOM element/tree) to a scope. Where: - * - * * `scope` - A {@link ng.$rootScope.Scope Scope} to bind to. - * * `cloneAttachFn` - If `cloneAttachFn` is provided, then the link function will clone the - * `template` and call the `cloneAttachFn` function allowing the caller to attach the - * cloned elements to the DOM document at the appropriate place. The `cloneAttachFn` is - * called as:
`cloneAttachFn(clonedElement, scope)` where: - * - * * `clonedElement` - is a clone of the original `element` passed into the compiler. - * * `scope` - is the current scope with which the linking function is working with. - * - * * `options` - An optional object hash with linking options. If `options` is provided, then the following - * keys may be used to control linking behavior: - * - * * `parentBoundTranscludeFn` - the transclude function made available to - * directives; if given, it will be passed through to the link functions of - * directives found in `element` during compilation. - * * `transcludeControllers` - an object hash with keys that map controller names - * to a hash with the key `instance`, which maps to the controller instance; - * if given, it will make the controllers available to directives on the compileNode: - * ``` - * { - * parent: { - * instance: parentControllerInstance - * } - * } - * ``` - * * `futureParentElement` - defines the parent to which the `cloneAttachFn` will add - * the cloned elements; only needed for transcludes that are allowed to contain non HTML - * elements (e.g. SVG elements). See also the `directive.controller` property. - * - * Calling the linking function returns the element of the template. It is either the original - * element passed in, or the clone of the element if the `cloneAttachFn` is provided. - * - * After linking the view is not updated until after a call to `$digest`, which typically is done by - * AngularJS automatically. - * - * If you need access to the bound view, there are two ways to do it: - * - * - If you are not asking the linking function to clone the template, create the DOM element(s) - * before you send them to the compiler and keep this reference around. - * ```js - * var element = angular.element('

{{total}}

'); - * $compile(element)(scope); - * ``` - * - * - if on the other hand, you need the element to be cloned, the view reference from the original - * example would not point to the clone, but rather to the original template that was cloned. In - * this case, you can access the clone either via the `cloneAttachFn` or the value returned by the - * linking function: - * ```js - * var templateElement = angular.element('

{{total}}

'); - * var clonedElement = $compile(templateElement)(scope, function(clonedElement, scope) { - * // Attach the clone to DOM document at the right place. - * }); - * - * // Now we have reference to the cloned DOM via `clonedElement`. - * // NOTE: The `clonedElement` returned by the linking function is the same as the - * // `clonedElement` passed to `cloneAttachFn`. - * ``` - * - * - * For information on how the compiler works, see the - * {@link guide/compiler AngularJS HTML Compiler} section of the Developer Guide. - * - * @knownIssue - * - * ### Double Compilation - * - Double compilation occurs when an already compiled part of the DOM gets - compiled again. This is an undesired effect and can lead to misbehaving directives, performance issues, - and memory leaks. Refer to the Compiler Guide {@link guide/compiler#double-compilation-and-how-to-avoid-it - section on double compilation} for an in-depth explanation and ways to avoid it. - - * @knownIssue - - ### Issues with `replace: true` - * - *
- * **Note**: {@link $compile#-replace- `replace: true`} is deprecated and not recommended to use, - * mainly due to the issues listed here. It has been completely removed in the new Angular. - *
- * - * #### Attribute values are not merged - * - * When a `replace` directive encounters the same attribute on the original and the replace node, - * it will simply deduplicate the attribute and join the values with a space or with a `;` in case of - * the `style` attribute. - * ```html - * Original Node: - * Replace Template: - * Result: - * ``` - * - * That means attributes that contain AngularJS expressions will not be merged correctly, e.g. - * {@link ngShow} or {@link ngClass} will cause a {@link $parse} error: - * - * ```html - * Original Node: - * Replace Template: - * Result: - * ``` - * - * See issue [#5695](https://github.com/angular/angular.js/issues/5695). - * - * #### Directives are not deduplicated before compilation - * - * When the original node and the replace template declare the same directive(s), they will be - * {@link guide/compiler#double-compilation-and-how-to-avoid-it compiled twice} because the compiler - * does not deduplicate them. In many cases, this is not noticable, but e.g. {@link ngModel} will - * attach `$formatters` and `$parsers` twice. - * - * See issue [#2573](https://github.com/angular/angular.js/issues/2573). - * - * #### `transclude: element` in the replace template root can have unexpected effects - * - * When the replace template has a directive at the root node that uses - * {@link $compile#-transclude- `transclude: element`}, e.g. - * {@link ngIf} or {@link ngRepeat}, the DOM structure or scope inheritance can be incorrect. - * See the following issues: - * - * - Incorrect scope on replaced element: - * [#9837](https://github.com/angular/angular.js/issues/9837) - * - Different DOM between `template` and `templateUrl`: - * [#10612](https://github.com/angular/angular.js/issues/14326) - * - */ - -/** - * @ngdoc directive - * @name ngProp - * @restrict A - * @element ANY - * - * @usage - * - * ```html - * - * - * ``` - * - * or with uppercase letters in property (e.g. "propName"): - * - * - * ```html - * - * - * ``` - * - * - * @description - * The `ngProp` directive binds an expression to a DOM element property. - * `ngProp` allows writing to arbitrary properties by including - * the property name in the attribute, e.g. `ng-prop-value="'my value'"` binds 'my value' to - * the `value` property. - * - * Usually, it's not necessary to write to properties in AngularJS, as the built-in directives - * handle the most common use cases (instead of the above example, you would use {@link ngValue}). - * - * However, [custom elements](https://developer.mozilla.org/docs/Web/Web_Components/Using_custom_elements) - * often use custom properties to hold data, and `ngProp` can be used to provide input to these - * custom elements. - * - * ## Binding to camelCase properties - * - * Since HTML attributes are case-insensitive, camelCase properties like `innerHTML` must be escaped. - * AngularJS uses the underscore (_) in front of a character to indicate that it is uppercase, so - * `innerHTML` must be written as `ng-prop-inner_h_t_m_l="expression"` (Note that this is just an - * example, and for binding HTML {@link ngBindHtml} should be used. - * - * ## Security - * - * Binding expressions to arbitrary properties poses a security risk, as properties like `innerHTML` - * can insert potentially dangerous HTML into the application, e.g. script tags that execute - * malicious code. - * For this reason, `ngProp` applies Strict Contextual Escaping with the {@link ng.$sce $sce service}. - * This means vulnerable properties require their content to be "trusted", based on the - * context of the property. For example, the `innerHTML` is in the `HTML` context, and the - * `iframe.src` property is in the `RESOURCE_URL` context, which requires that values written to - * this property are trusted as a `RESOURCE_URL`. - * - * This can be set explicitly by calling $sce.trustAs(type, value) on the value that is - * trusted before passing it to the `ng-prop-*` directive. There are exist shorthand methods for - * each context type in the form of {@link ng.$sce#trustAsResourceUrl $sce.trustAsResourceUrl()} et al. - * - * In some cases you can also rely upon automatic sanitization of untrusted values - see below. - * - * Based on the context, other options may exist to mark a value as trusted / configure the behavior - * of {@link ng.$sce}. For example, to restrict the `RESOURCE_URL` context to specific origins, use - * the {@link $sceDelegateProvider#resourceUrlWhitelist resourceUrlWhitelist()} - * and {@link $sceDelegateProvider#resourceUrlBlacklist resourceUrlBlacklist()}. - * - * {@link ng.$sce#what-trusted-context-types-are-supported- Find out more about the different context types}. - * - * ### HTML Sanitization - * - * By default, `$sce` will throw an error if it detects untrusted HTML content, and will not bind the - * content. - * However, if you include the {@link ngSanitize ngSanitize module}, it will try to sanitize the - * potentially dangerous HTML, e.g. strip non-whitelisted tags and attributes when binding to - * `innerHTML`. - * - * @example - * ### Binding to different contexts - * - * - * - * angular.module('exampleNgProp', []) - * .component('main', { - * templateUrl: 'main.html', - * controller: function($sce) { - * this.safeContent = 'Safe content'; - * this.unsafeContent = ''; - * this.trustedUnsafeContent = $sce.trustAsHtml(this.unsafeContent); - * } - * }); - * - * - *
- *
- * Binding to a property without security context: - *
- * innerText (safeContent) - *
- * - *
- * "Safe" content that requires a security context will throw because the contents could potentially be dangerous ... - *
- * innerHTML (safeContent) - *
- * - *
- * ... so that actually dangerous content cannot be executed: - *
- * innerHTML (unsafeContent) - *
- * - *
- * ... but unsafe Content that has been trusted explicitly works - only do this if you are 100% sure! - *
- * innerHTML (trustedUnsafeContent) - *
- *
- *
- * - *
- *
- * - * .prop-unit { - * margin-bottom: 10px; - * } - * - * .prop-binding { - * min-height: 30px; - * border: 1px solid blue; - * } - * - * .prop-note { - * font-family: Monospace; - * } - * - *
- * - * - * @example - * ### Binding to innerHTML with ngSanitize - * - * - * - * angular.module('exampleNgProp', ['ngSanitize']) - * .component('main', { - * templateUrl: 'main.html', - * controller: function($sce) { - * this.safeContent = 'Safe content'; - * this.unsafeContent = ''; - * this.trustedUnsafeContent = $sce.trustAsHtml(this.unsafeContent); - * } - * }); - * - * - *
- *
- * "Safe" content will be sanitized ... - *
- * innerHTML (safeContent) - *
- * - *
- * ... as will dangerous content: - *
- * innerHTML (unsafeContent) - *
- * - *
- * ... and content that has been trusted explicitly works the same as without ngSanitize: - *
- * innerHTML (trustedUnsafeContent) - *
- *
- *
- * - *
- *
- * - * .prop-unit { - * margin-bottom: 10px; - * } - * - * .prop-binding { - * min-height: 30px; - * border: 1px solid blue; - * } - * - * .prop-note { - * font-family: Monospace; - * } - * - *
- * - */ - -/** @ngdoc directive - * @name ngOn - * @restrict A - * @element ANY - * - * @usage - * - * ```html - * - * - * ``` - * - * or with uppercase letters in property (e.g. "eventName"): - * - * - * ```html - * - * - * ``` - * - * @description - * The `ngOn` directive adds an event listener to a DOM element via - * {@link angular.element angular.element().on()}, and evaluates an expression when the event is - * fired. - * `ngOn` allows adding listeners for arbitrary events by including - * the event name in the attribute, e.g. `ng-on-drop="onDrop()"` executes the 'onDrop()' expression - * when the `drop` event is fired. - * - * AngularJS provides specific directives for many events, such as {@link ngClick}, so in most - * cases it is not necessary to use `ngOn`. However, AngularJS does not support all events - * (e.g. the `drop` event in the example above), and new events might be introduced in later DOM - * standards. - * - * Another use-case for `ngOn` is listening to - * [custom events](https://developer.mozilla.org/docs/Web/Guide/Events/Creating_and_triggering_events) - * fired by - * [custom elements](https://developer.mozilla.org/docs/Web/Web_Components/Using_custom_elements). - * - * ## Binding to camelCase properties - * - * Since HTML attributes are case-insensitive, camelCase properties like `myEvent` must be escaped. - * AngularJS uses the underscore (_) in front of a character to indicate that it is uppercase, so - * `myEvent` must be written as `ng-on-my_event="expression"`. - * - * @example - * ### Bind to built-in DOM events - * - * - * - * angular.module('exampleNgOn', []) - * .component('main', { - * templateUrl: 'main.html', - * controller: function() { - * this.clickCount = 0; - * this.mouseoverCount = 0; - * - * this.loadingState = 0; - * } - * }); - * - * - *
- * This is equivalent to `ngClick` and `ngMouseover`:
- *
- * clickCount: {{$ctrl.clickCount}}
- * mouseover: {{$ctrl.mouseoverCount}} - * - *
- * - * For the `error` and `load` event on images no built-in AngularJS directives exist:
- *
- *
- * Image is loading - * Image load error - * Image loaded successfully - *
- *
- *
- * - *
- *
- *
- * - * - * @example - * ### Bind to custom DOM events - * - * - * - * angular.module('exampleNgOn', []) - * .component('main', { - * templateUrl: 'main.html', - * controller: function() { - * this.eventLog = ''; - * - * this.listener = function($event) { - * this.eventLog = 'Event with type "' + $event.type + '" fired at ' + $event.detail; - * }; - * } - * }) - * .component('childComponent', { - * templateUrl: 'child.html', - * controller: function($element) { - * this.fireEvent = function() { - * var event = new CustomEvent('customtype', { detail: new Date()}); - * - * $element[0].dispatchEvent(event); - * }; - * } - * }); - * - * - *
- * Event log: {{$ctrl.eventLog}} - *
- * - - * - * - *
- *
- *
- */ - -var $compileMinErr = minErr('$compile'); - -function UNINITIALIZED_VALUE() {} -var _UNINITIALIZED_VALUE = new UNINITIALIZED_VALUE(); - -/** - * @ngdoc provider - * @name $compileProvider - * - * @description - */ -$CompileProvider.$inject = ['$provide', '$$sanitizeUriProvider']; -/** @this */ -function $CompileProvider($provide, $$sanitizeUriProvider) { - var hasDirectives = {}, - Suffix = 'Directive', - COMMENT_DIRECTIVE_REGEXP = /^\s*directive:\s*([\w-]+)\s+(.*)$/, - CLASS_DIRECTIVE_REGEXP = /(([\w-]+)(?::([^;]+))?;?)/, - ALL_OR_NOTHING_ATTRS = makeMap('ngSrc,ngSrcset,src,srcset'), - REQUIRE_PREFIX_REGEXP = /^(?:(\^\^?)?(\?)?(\^\^?)?)?/; - - // Ref: http://developers.whatwg.org/webappapis.html#event-handler-idl-attributes - // The assumption is that future DOM event attribute names will begin with - // 'on' and be composed of only English letters. - var EVENT_HANDLER_ATTR_REGEXP = /^(on[a-z]+|formaction)$/; - var bindingCache = createMap(); - - function parseIsolateBindings(scope, directiveName, isController) { - var LOCAL_REGEXP = /^([@&]|[=<](\*?))(\??)\s*([\w$]*)$/; - - var bindings = createMap(); - - forEach(scope, function(definition, scopeName) { - definition = definition.trim(); - - if (definition in bindingCache) { - bindings[scopeName] = bindingCache[definition]; - return; - } - var match = definition.match(LOCAL_REGEXP); - - if (!match) { - throw $compileMinErr('iscp', - 'Invalid {3} for directive \'{0}\'.' + - ' Definition: {... {1}: \'{2}\' ...}', - directiveName, scopeName, definition, - (isController ? 'controller bindings definition' : - 'isolate scope definition')); - } - - bindings[scopeName] = { - mode: match[1][0], - collection: match[2] === '*', - optional: match[3] === '?', - attrName: match[4] || scopeName - }; - if (match[4]) { - bindingCache[definition] = bindings[scopeName]; - } - }); - - return bindings; - } - - function parseDirectiveBindings(directive, directiveName) { - var bindings = { - isolateScope: null, - bindToController: null - }; - if (isObject(directive.scope)) { - if (directive.bindToController === true) { - bindings.bindToController = parseIsolateBindings(directive.scope, - directiveName, true); - bindings.isolateScope = {}; - } else { - bindings.isolateScope = parseIsolateBindings(directive.scope, - directiveName, false); - } - } - if (isObject(directive.bindToController)) { - bindings.bindToController = - parseIsolateBindings(directive.bindToController, directiveName, true); - } - if (bindings.bindToController && !directive.controller) { - // There is no controller - throw $compileMinErr('noctrl', - 'Cannot bind to controller without directive \'{0}\'s controller.', - directiveName); - } - return bindings; - } - - function assertValidDirectiveName(name) { - var letter = name.charAt(0); - if (!letter || letter !== lowercase(letter)) { - throw $compileMinErr('baddir', 'Directive/Component name \'{0}\' is invalid. The first character must be a lowercase letter', name); - } - if (name !== name.trim()) { - throw $compileMinErr('baddir', - 'Directive/Component name \'{0}\' is invalid. The name should not contain leading or trailing whitespaces', - name); - } - } - - function getDirectiveRequire(directive) { - var require = directive.require || (directive.controller && directive.name); - - if (!isArray(require) && isObject(require)) { - forEach(require, function(value, key) { - var match = value.match(REQUIRE_PREFIX_REGEXP); - var name = value.substring(match[0].length); - if (!name) require[key] = match[0] + key; - }); - } - - return require; - } - - function getDirectiveRestrict(restrict, name) { - if (restrict && !(isString(restrict) && /[EACM]/.test(restrict))) { - throw $compileMinErr('badrestrict', - 'Restrict property \'{0}\' of directive \'{1}\' is invalid', - restrict, - name); - } - - return restrict || 'EA'; - } - - /** - * @ngdoc method - * @name $compileProvider#directive - * @kind function - * - * @description - * Register a new directive with the compiler. - * - * @param {string|Object} name Name of the directive in camel-case (i.e. `ngBind` which will match - * as `ng-bind`), or an object map of directives where the keys are the names and the values - * are the factories. - * @param {Function|Array} directiveFactory An injectable directive factory function. See the - * {@link guide/directive directive guide} and the {@link $compile compile API} for more info. - * @returns {ng.$compileProvider} Self for chaining. - */ - this.directive = function registerDirective(name, directiveFactory) { - assertArg(name, 'name'); - assertNotHasOwnProperty(name, 'directive'); - if (isString(name)) { - assertValidDirectiveName(name); - assertArg(directiveFactory, 'directiveFactory'); - if (!hasDirectives.hasOwnProperty(name)) { - hasDirectives[name] = []; - $provide.factory(name + Suffix, ['$injector', '$exceptionHandler', - function($injector, $exceptionHandler) { - var directives = []; - forEach(hasDirectives[name], function(directiveFactory, index) { - try { - var directive = $injector.invoke(directiveFactory); - if (isFunction(directive)) { - directive = { compile: valueFn(directive) }; - } else if (!directive.compile && directive.link) { - directive.compile = valueFn(directive.link); - } - directive.priority = directive.priority || 0; - directive.index = index; - directive.name = directive.name || name; - directive.require = getDirectiveRequire(directive); - directive.restrict = getDirectiveRestrict(directive.restrict, name); - directive.$$moduleName = directiveFactory.$$moduleName; - directives.push(directive); - } catch (e) { - $exceptionHandler(e); - } - }); - return directives; - }]); - } - hasDirectives[name].push(directiveFactory); - } else { - forEach(name, reverseParams(registerDirective)); - } - return this; - }; - - /** - * @ngdoc method - * @name $compileProvider#component - * @module ng - * @param {string|Object} name Name of the component in camelCase (i.e. `myComp` which will match ``), - * or an object map of components where the keys are the names and the values are the component definition objects. - * @param {Object} options Component definition object (a simplified - * {@link ng.$compile#directive-definition-object directive definition object}), - * with the following properties (all optional): - * - * - `controller` – `{(string|function()=}` – controller constructor function that should be - * associated with newly created scope or the name of a {@link ng.$compile#-controller- - * registered controller} if passed as a string. An empty `noop` function by default. - * - `controllerAs` – `{string=}` – identifier name for to reference the controller in the component's scope. - * If present, the controller will be published to scope under the `controllerAs` name. - * If not present, this will default to be `$ctrl`. - * - `template` – `{string=|function()=}` – html template as a string or a function that - * returns an html template as a string which should be used as the contents of this component. - * Empty string by default. - * - * If `template` is a function, then it is {@link auto.$injector#invoke injected} with - * the following locals: - * - * - `$element` - Current element - * - `$attrs` - Current attributes object for the element - * - * - `templateUrl` – `{string=|function()=}` – path or function that returns a path to an html - * template that should be used as the contents of this component. - * - * If `templateUrl` is a function, then it is {@link auto.$injector#invoke injected} with - * the following locals: - * - * - `$element` - Current element - * - `$attrs` - Current attributes object for the element - * - * - `bindings` – `{object=}` – defines bindings between DOM attributes and component properties. - * Component properties are always bound to the component controller and not to the scope. - * See {@link ng.$compile#-bindtocontroller- `bindToController`}. - * - `transclude` – `{boolean=}` – whether {@link $compile#transclusion content transclusion} is enabled. - * Disabled by default. - * - `require` - `{Object=}` - requires the controllers of other directives and binds them to - * this component's controller. The object keys specify the property names under which the required - * controllers (object values) will be bound. See {@link ng.$compile#-require- `require`}. - * - `$...` – additional properties to attach to the directive factory function and the controller - * constructor function. (This is used by the component router to annotate) - * - * @returns {ng.$compileProvider} the compile provider itself, for chaining of function calls. - * @description - * Register a **component definition** with the compiler. This is a shorthand for registering a special - * type of directive, which represents a self-contained UI component in your application. Such components - * are always isolated (i.e. `scope: {}`) and are always restricted to elements (i.e. `restrict: 'E'`). - * - * Component definitions are very simple and do not require as much configuration as defining general - * directives. Component definitions usually consist only of a template and a controller backing it. - * - * In order to make the definition easier, components enforce best practices like use of `controllerAs`, - * `bindToController`. They always have **isolate scope** and are restricted to elements. - * - * Here are a few examples of how you would usually define components: - * - * ```js - * var myMod = angular.module(...); - * myMod.component('myComp', { - * template: '
My name is {{$ctrl.name}}
', - * controller: function() { - * this.name = 'shahar'; - * } - * }); - * - * myMod.component('myComp', { - * template: '
My name is {{$ctrl.name}}
', - * bindings: {name: '@'} - * }); - * - * myMod.component('myComp', { - * templateUrl: 'views/my-comp.html', - * controller: 'MyCtrl', - * controllerAs: 'ctrl', - * bindings: {name: '@'} - * }); - * - * ``` - * For more examples, and an in-depth guide, see the {@link guide/component component guide}. - * - *
- * See also {@link ng.$compileProvider#directive $compileProvider.directive()}. - */ - this.component = function registerComponent(name, options) { - if (!isString(name)) { - forEach(name, reverseParams(bind(this, registerComponent))); - return this; - } - - var controller = options.controller || function() {}; - - function factory($injector) { - function makeInjectable(fn) { - if (isFunction(fn) || isArray(fn)) { - return /** @this */ function(tElement, tAttrs) { - return $injector.invoke(fn, this, {$element: tElement, $attrs: tAttrs}); - }; - } else { - return fn; - } - } - - var template = (!options.template && !options.templateUrl ? '' : options.template); - var ddo = { - controller: controller, - controllerAs: identifierForController(options.controller) || options.controllerAs || '$ctrl', - template: makeInjectable(template), - templateUrl: makeInjectable(options.templateUrl), - transclude: options.transclude, - scope: {}, - bindToController: options.bindings || {}, - restrict: 'E', - require: options.require - }; - - // Copy annotations (starting with $) over to the DDO - forEach(options, function(val, key) { - if (key.charAt(0) === '$') ddo[key] = val; - }); - - return ddo; - } - - // TODO(pete) remove the following `forEach` before we release 1.6.0 - // The component-router@0.2.0 looks for the annotations on the controller constructor - // Nothing in AngularJS looks for annotations on the factory function but we can't remove - // it from 1.5.x yet. - - // Copy any annotation properties (starting with $) over to the factory and controller constructor functions - // These could be used by libraries such as the new component router - forEach(options, function(val, key) { - if (key.charAt(0) === '$') { - factory[key] = val; - // Don't try to copy over annotations to named controller - if (isFunction(controller)) controller[key] = val; - } - }); - - factory.$inject = ['$injector']; - - return this.directive(name, factory); - }; - - - /** - * @ngdoc method - * @name $compileProvider#aHrefSanitizationWhitelist - * @kind function - * - * @description - * Retrieves or overrides the default regular expression that is used for whitelisting of safe - * urls during a[href] sanitization. - * - * The sanitization is a security measure aimed at preventing XSS attacks via html links. - * - * Any url about to be assigned to a[href] via data-binding is first normalized and turned into - * an absolute url. Afterwards, the url is matched against the `aHrefSanitizationWhitelist` - * regular expression. If a match is found, the original url is written into the dom. Otherwise, - * the absolute url is prefixed with `'unsafe:'` string and only then is it written into the DOM. - * - * @param {RegExp=} regexp New regexp to whitelist urls with. - * @returns {RegExp|ng.$compileProvider} Current RegExp if called without value or self for - * chaining otherwise. - */ - this.aHrefSanitizationWhitelist = function(regexp) { - if (isDefined(regexp)) { - $$sanitizeUriProvider.aHrefSanitizationWhitelist(regexp); - return this; - } else { - return $$sanitizeUriProvider.aHrefSanitizationWhitelist(); - } - }; - - - /** - * @ngdoc method - * @name $compileProvider#imgSrcSanitizationWhitelist - * @kind function - * - * @description - * Retrieves or overrides the default regular expression that is used for whitelisting of safe - * urls during img[src] sanitization. - * - * The sanitization is a security measure aimed at prevent XSS attacks via html links. - * - * Any url about to be assigned to img[src] via data-binding is first normalized and turned into - * an absolute url. Afterwards, the url is matched against the `imgSrcSanitizationWhitelist` - * regular expression. If a match is found, the original url is written into the dom. Otherwise, - * the absolute url is prefixed with `'unsafe:'` string and only then is it written into the DOM. - * - * @param {RegExp=} regexp New regexp to whitelist urls with. - * @returns {RegExp|ng.$compileProvider} Current RegExp if called without value or self for - * chaining otherwise. - */ - this.imgSrcSanitizationWhitelist = function(regexp) { - if (isDefined(regexp)) { - $$sanitizeUriProvider.imgSrcSanitizationWhitelist(regexp); - return this; - } else { - return $$sanitizeUriProvider.imgSrcSanitizationWhitelist(); - } - }; - - /** - * @ngdoc method - * @name $compileProvider#debugInfoEnabled - * - * @param {boolean=} enabled update the debugInfoEnabled state if provided, otherwise just return the - * current debugInfoEnabled state - * @returns {*} current value if used as getter or itself (chaining) if used as setter - * - * @kind function - * - * @description - * Call this method to enable/disable various debug runtime information in the compiler such as adding - * binding information and a reference to the current scope on to DOM elements. - * If enabled, the compiler will add the following to DOM elements that have been bound to the scope - * * `ng-binding` CSS class - * * `ng-scope` and `ng-isolated-scope` CSS classes - * * `$binding` data property containing an array of the binding expressions - * * Data properties used by the {@link angular.element#methods `scope()`/`isolateScope()` methods} to return - * the element's scope. - * * Placeholder comments will contain information about what directive and binding caused the placeholder. - * E.g. ``. - * - * You may want to disable this in production for a significant performance boost. See - * {@link guide/production#disabling-debug-data Disabling Debug Data} for more. - * - * The default value is true. - */ - var debugInfoEnabled = true; - this.debugInfoEnabled = function(enabled) { - if (isDefined(enabled)) { - debugInfoEnabled = enabled; - return this; - } - return debugInfoEnabled; - }; - - /** - * @ngdoc method - * @name $compileProvider#strictComponentBindingsEnabled - * - * @param {boolean=} enabled update the strictComponentBindingsEnabled state if provided, - * otherwise return the current strictComponentBindingsEnabled state. - * @returns {*} current value if used as getter or itself (chaining) if used as setter - * - * @kind function - * - * @description - * Call this method to enable / disable the strict component bindings check. If enabled, the - * compiler will enforce that all scope / controller bindings of a - * {@link $compileProvider#directive directive} / {@link $compileProvider#component component} - * that are not set as optional with `?`, must be provided when the directive is instantiated. - * If not provided, the compiler will throw the - * {@link error/$compile/missingattr $compile:missingattr error}. - * - * The default value is false. - */ - var strictComponentBindingsEnabled = false; - this.strictComponentBindingsEnabled = function(enabled) { - if (isDefined(enabled)) { - strictComponentBindingsEnabled = enabled; - return this; - } - return strictComponentBindingsEnabled; - }; - - var TTL = 10; - /** - * @ngdoc method - * @name $compileProvider#onChangesTtl - * @description - * - * Sets the number of times `$onChanges` hooks can trigger new changes before giving up and - * assuming that the model is unstable. - * - * The current default is 10 iterations. - * - * In complex applications it's possible that dependencies between `$onChanges` hooks and bindings will result - * in several iterations of calls to these hooks. However if an application needs more than the default 10 - * iterations to stabilize then you should investigate what is causing the model to continuously change during - * the `$onChanges` hook execution. - * - * Increasing the TTL could have performance implications, so you should not change it without proper justification. - * - * @param {number} limit The number of `$onChanges` hook iterations. - * @returns {number|object} the current limit (or `this` if called as a setter for chaining) - */ - this.onChangesTtl = function(value) { - if (arguments.length) { - TTL = value; - return this; - } - return TTL; - }; - - var commentDirectivesEnabledConfig = true; - /** - * @ngdoc method - * @name $compileProvider#commentDirectivesEnabled - * @description - * - * It indicates to the compiler - * whether or not directives on comments should be compiled. - * Defaults to `true`. - * - * Calling this function with false disables the compilation of directives - * on comments for the whole application. - * This results in a compilation performance gain, - * as the compiler doesn't have to check comments when looking for directives. - * This should however only be used if you are sure that no comment directives are used in - * the application (including any 3rd party directives). - * - * @param {boolean} enabled `false` if the compiler may ignore directives on comments - * @returns {boolean|object} the current value (or `this` if called as a setter for chaining) - */ - this.commentDirectivesEnabled = function(value) { - if (arguments.length) { - commentDirectivesEnabledConfig = value; - return this; - } - return commentDirectivesEnabledConfig; - }; - - - var cssClassDirectivesEnabledConfig = true; - /** - * @ngdoc method - * @name $compileProvider#cssClassDirectivesEnabled - * @description - * - * It indicates to the compiler - * whether or not directives on element classes should be compiled. - * Defaults to `true`. - * - * Calling this function with false disables the compilation of directives - * on element classes for the whole application. - * This results in a compilation performance gain, - * as the compiler doesn't have to check element classes when looking for directives. - * This should however only be used if you are sure that no class directives are used in - * the application (including any 3rd party directives). - * - * @param {boolean} enabled `false` if the compiler may ignore directives on element classes - * @returns {boolean|object} the current value (or `this` if called as a setter for chaining) - */ - this.cssClassDirectivesEnabled = function(value) { - if (arguments.length) { - cssClassDirectivesEnabledConfig = value; - return this; - } - return cssClassDirectivesEnabledConfig; - }; - - - /** - * The security context of DOM Properties. - * @private - */ - var PROP_CONTEXTS = createMap(); - - /** - * @ngdoc method - * @name $compileProvider#addPropertySecurityContext - * @description - * - * Defines the security context for DOM properties bound by ng-prop-*. - * - * @param {string} elementName The element name or '*' to match any element. - * @param {string} propertyName The DOM property name. - * @param {string} ctx The {@link $sce} security context in which this value is safe for use, e.g. `$sce.URL` - * @returns {object} `this` for chaining - */ - this.addPropertySecurityContext = function(elementName, propertyName, ctx) { - var key = (elementName.toLowerCase() + '|' + propertyName.toLowerCase()); - - if (key in PROP_CONTEXTS && PROP_CONTEXTS[key] !== ctx) { - throw $compileMinErr('ctxoverride', 'Property context \'{0}.{1}\' already set to \'{2}\', cannot override to \'{3}\'.', elementName, propertyName, PROP_CONTEXTS[key], ctx); - } - - PROP_CONTEXTS[key] = ctx; - return this; - }; - - /* Default property contexts. - * - * Copy of https://github.com/angular/angular/blob/6.0.6/packages/compiler/src/schema/dom_security_schema.ts#L31-L58 - * Changing: - * - SecurityContext.* => SCE_CONTEXTS/$sce.* - * - STYLE => CSS - * - various URL => MEDIA_URL - * - *|formAction, form|action URL => RESOURCE_URL (like the attribute) - */ - (function registerNativePropertyContexts() { - function registerContext(ctx, values) { - forEach(values, function(v) { PROP_CONTEXTS[v.toLowerCase()] = ctx; }); - } - - registerContext(SCE_CONTEXTS.HTML, [ - 'iframe|srcdoc', - '*|innerHTML', - '*|outerHTML' - ]); - registerContext(SCE_CONTEXTS.CSS, ['*|style']); - registerContext(SCE_CONTEXTS.URL, [ - 'area|href', 'area|ping', - 'a|href', 'a|ping', - 'blockquote|cite', - 'body|background', - 'del|cite', - 'input|src', - 'ins|cite', - 'q|cite' - ]); - registerContext(SCE_CONTEXTS.MEDIA_URL, [ - 'audio|src', - 'img|src', 'img|srcset', - 'source|src', 'source|srcset', - 'track|src', - 'video|src', 'video|poster' - ]); - registerContext(SCE_CONTEXTS.RESOURCE_URL, [ - '*|formAction', - 'applet|code', 'applet|codebase', - 'base|href', - 'embed|src', - 'frame|src', - 'form|action', - 'head|profile', - 'html|manifest', - 'iframe|src', - 'link|href', - 'media|src', - 'object|codebase', 'object|data', - 'script|src' - ]); - })(); - - - this.$get = [ - '$injector', '$interpolate', '$exceptionHandler', '$templateRequest', '$parse', - '$controller', '$rootScope', '$sce', '$animate', - function($injector, $interpolate, $exceptionHandler, $templateRequest, $parse, - $controller, $rootScope, $sce, $animate) { - - var SIMPLE_ATTR_NAME = /^\w/; - var specialAttrHolder = window.document.createElement('div'); - - - var commentDirectivesEnabled = commentDirectivesEnabledConfig; - var cssClassDirectivesEnabled = cssClassDirectivesEnabledConfig; - - - var onChangesTtl = TTL; - // The onChanges hooks should all be run together in a single digest - // When changes occur, the call to trigger their hooks will be added to this queue - var onChangesQueue; - - // This function is called in a $$postDigest to trigger all the onChanges hooks in a single digest - function flushOnChangesQueue() { - try { - if (!(--onChangesTtl)) { - // We have hit the TTL limit so reset everything - onChangesQueue = undefined; - throw $compileMinErr('infchng', '{0} $onChanges() iterations reached. Aborting!\n', TTL); - } - // We must run this hook in an apply since the $$postDigest runs outside apply - $rootScope.$apply(function() { - for (var i = 0, ii = onChangesQueue.length; i < ii; ++i) { - try { - onChangesQueue[i](); - } catch (e) { - $exceptionHandler(e); - } - } - // Reset the queue to trigger a new schedule next time there is a change - onChangesQueue = undefined; - }); - } finally { - onChangesTtl++; - } - } - - - function sanitizeSrcset(value, invokeType) { - if (!value) { - return value; - } - if (!isString(value)) { - throw $compileMinErr('srcset', 'Can\'t pass trusted values to `{0}`: "{1}"', invokeType, value.toString()); - } - - // Such values are a bit too complex to handle automatically inside $sce. - // Instead, we sanitize each of the URIs individually, which works, even dynamically. - - // It's not possible to work around this using `$sce.trustAsMediaUrl`. - // If you want to programmatically set explicitly trusted unsafe URLs, you should use - // `$sce.trustAsHtml` on the whole `img` tag and inject it into the DOM using the - // `ng-bind-html` directive. - - var result = ''; - - // first check if there are spaces because it's not the same pattern - var trimmedSrcset = trim(value); - // ( 999x ,| 999w ,| ,|, ) - var srcPattern = /(\s+\d+x\s*,|\s+\d+w\s*,|\s+,|,\s+)/; - var pattern = /\s/.test(trimmedSrcset) ? srcPattern : /(,)/; - - // split srcset into tuple of uri and descriptor except for the last item - var rawUris = trimmedSrcset.split(pattern); - - // for each tuples - var nbrUrisWith2parts = Math.floor(rawUris.length / 2); - for (var i = 0; i < nbrUrisWith2parts; i++) { - var innerIdx = i * 2; - // sanitize the uri - result += $sce.getTrustedMediaUrl(trim(rawUris[innerIdx])); - // add the descriptor - result += ' ' + trim(rawUris[innerIdx + 1]); - } - - // split the last item into uri and descriptor - var lastTuple = trim(rawUris[i * 2]).split(/\s/); - - // sanitize the last uri - result += $sce.getTrustedMediaUrl(trim(lastTuple[0])); - - // and add the last descriptor if any - if (lastTuple.length === 2) { - result += (' ' + trim(lastTuple[1])); - } - return result; - } - - - function Attributes(element, attributesToCopy) { - if (attributesToCopy) { - var keys = Object.keys(attributesToCopy); - var i, l, key; - - for (i = 0, l = keys.length; i < l; i++) { - key = keys[i]; - this[key] = attributesToCopy[key]; - } - } else { - this.$attr = {}; - } - - this.$$element = element; - } - - Attributes.prototype = { - /** - * @ngdoc method - * @name $compile.directive.Attributes#$normalize - * @kind function - * - * @description - * Converts an attribute name (e.g. dash/colon/underscore-delimited string, optionally prefixed with `x-` or - * `data-`) to its normalized, camelCase form. - * - * Also there is special case for Moz prefix starting with upper case letter. - * - * For further information check out the guide on {@link guide/directive#matching-directives Matching Directives} - * - * @param {string} name Name to normalize - */ - $normalize: directiveNormalize, - - - /** - * @ngdoc method - * @name $compile.directive.Attributes#$addClass - * @kind function - * - * @description - * Adds the CSS class value specified by the classVal parameter to the element. If animations - * are enabled then an animation will be triggered for the class addition. - * - * @param {string} classVal The className value that will be added to the element - */ - $addClass: function(classVal) { - if (classVal && classVal.length > 0) { - $animate.addClass(this.$$element, classVal); - } - }, - - /** - * @ngdoc method - * @name $compile.directive.Attributes#$removeClass - * @kind function - * - * @description - * Removes the CSS class value specified by the classVal parameter from the element. If - * animations are enabled then an animation will be triggered for the class removal. - * - * @param {string} classVal The className value that will be removed from the element - */ - $removeClass: function(classVal) { - if (classVal && classVal.length > 0) { - $animate.removeClass(this.$$element, classVal); - } - }, - - /** - * @ngdoc method - * @name $compile.directive.Attributes#$updateClass - * @kind function - * - * @description - * Adds and removes the appropriate CSS class values to the element based on the difference - * between the new and old CSS class values (specified as newClasses and oldClasses). - * - * @param {string} newClasses The current CSS className value - * @param {string} oldClasses The former CSS className value - */ - $updateClass: function(newClasses, oldClasses) { - var toAdd = tokenDifference(newClasses, oldClasses); - if (toAdd && toAdd.length) { - $animate.addClass(this.$$element, toAdd); - } - - var toRemove = tokenDifference(oldClasses, newClasses); - if (toRemove && toRemove.length) { - $animate.removeClass(this.$$element, toRemove); - } - }, - - /** - * Set a normalized attribute on the element in a way such that all directives - * can share the attribute. This function properly handles boolean attributes. - * @param {string} key Normalized key. (ie ngAttribute) - * @param {string|boolean} value The value to set. If `null` attribute will be deleted. - * @param {boolean=} writeAttr If false, does not write the value to DOM element attribute. - * Defaults to true. - * @param {string=} attrName Optional none normalized name. Defaults to key. - */ - $set: function(key, value, writeAttr, attrName) { - // TODO: decide whether or not to throw an error if "class" - // is set through this function since it may cause $updateClass to - // become unstable. - - var node = this.$$element[0], - booleanKey = getBooleanAttrName(node, key), - aliasedKey = getAliasedAttrName(key), - observer = key, - nodeName; - - if (booleanKey) { - this.$$element.prop(key, value); - attrName = booleanKey; - } else if (aliasedKey) { - this[aliasedKey] = value; - observer = aliasedKey; - } - - this[key] = value; - - // translate normalized key to actual key - if (attrName) { - this.$attr[key] = attrName; - } else { - attrName = this.$attr[key]; - if (!attrName) { - this.$attr[key] = attrName = snake_case(key, '-'); - } - } - - nodeName = nodeName_(this.$$element); - - // Sanitize img[srcset] values. - if (nodeName === 'img' && key === 'srcset') { - this[key] = value = sanitizeSrcset(value, '$set(\'srcset\', value)'); - } - - if (writeAttr !== false) { - if (value === null || isUndefined(value)) { - this.$$element.removeAttr(attrName); - } else { - if (SIMPLE_ATTR_NAME.test(attrName)) { - // jQuery skips special boolean attrs treatment in XML nodes for - // historical reasons and hence AngularJS cannot freely call - // `.attr(attrName, false) with such attributes. To avoid issues - // in XHTML, call `removeAttr` in such cases instead. - // See https://github.com/jquery/jquery/issues/4249 - if (booleanKey && value === false) { - this.$$element.removeAttr(attrName); - } else { - this.$$element.attr(attrName, value); - } - } else { - setSpecialAttr(this.$$element[0], attrName, value); - } - } - } - - // fire observers - var $$observers = this.$$observers; - if ($$observers) { - forEach($$observers[observer], function(fn) { - try { - fn(value); - } catch (e) { - $exceptionHandler(e); - } - }); - } - }, - - - /** - * @ngdoc method - * @name $compile.directive.Attributes#$observe - * @kind function - * - * @description - * Observes an interpolated attribute. - * - * The observer function will be invoked once during the next `$digest` following - * compilation. The observer is then invoked whenever the interpolated value - * changes. - * - * @param {string} key Normalized key. (ie ngAttribute) . - * @param {function(interpolatedValue)} fn Function that will be called whenever - the interpolated value of the attribute changes. - * See the {@link guide/interpolation#how-text-and-attribute-bindings-work Interpolation - * guide} for more info. - * @returns {function()} Returns a deregistration function for this observer. - */ - $observe: function(key, fn) { - var attrs = this, - $$observers = (attrs.$$observers || (attrs.$$observers = createMap())), - listeners = ($$observers[key] || ($$observers[key] = [])); - - listeners.push(fn); - $rootScope.$evalAsync(function() { - if (!listeners.$$inter && attrs.hasOwnProperty(key) && !isUndefined(attrs[key])) { - // no one registered attribute interpolation function, so lets call it manually - fn(attrs[key]); - } - }); - - return function() { - arrayRemove(listeners, fn); - }; - } - }; - - function setSpecialAttr(element, attrName, value) { - // Attributes names that do not start with letters (such as `(click)`) cannot be set using `setAttribute` - // so we have to jump through some hoops to get such an attribute - // https://github.com/angular/angular.js/pull/13318 - specialAttrHolder.innerHTML = ''; - var attributes = specialAttrHolder.firstChild.attributes; - var attribute = attributes[0]; - // We have to remove the attribute from its container element before we can add it to the destination element - attributes.removeNamedItem(attribute.name); - attribute.value = value; - element.attributes.setNamedItem(attribute); - } - - function safeAddClass($element, className) { - try { - $element.addClass(className); - } catch (e) { - // ignore, since it means that we are trying to set class on - // SVG element, where class name is read-only. - } - } - - - var startSymbol = $interpolate.startSymbol(), - endSymbol = $interpolate.endSymbol(), - denormalizeTemplate = (startSymbol === '{{' && endSymbol === '}}') - ? identity - : function denormalizeTemplate(template) { - return template.replace(/\{\{/g, startSymbol).replace(/}}/g, endSymbol); - }, - NG_PREFIX_BINDING = /^ng(Attr|Prop|On)([A-Z].*)$/; - var MULTI_ELEMENT_DIR_RE = /^(.+)Start$/; - - compile.$$addBindingInfo = debugInfoEnabled ? function $$addBindingInfo($element, binding) { - var bindings = $element.data('$binding') || []; - - if (isArray(binding)) { - bindings = bindings.concat(binding); - } else { - bindings.push(binding); - } - - $element.data('$binding', bindings); - } : noop; - - compile.$$addBindingClass = debugInfoEnabled ? function $$addBindingClass($element) { - safeAddClass($element, 'ng-binding'); - } : noop; - - compile.$$addScopeInfo = debugInfoEnabled ? function $$addScopeInfo($element, scope, isolated, noTemplate) { - var dataName = isolated ? (noTemplate ? '$isolateScopeNoTemplate' : '$isolateScope') : '$scope'; - $element.data(dataName, scope); - } : noop; - - compile.$$addScopeClass = debugInfoEnabled ? function $$addScopeClass($element, isolated) { - safeAddClass($element, isolated ? 'ng-isolate-scope' : 'ng-scope'); - } : noop; - - compile.$$createComment = function(directiveName, comment) { - var content = ''; - if (debugInfoEnabled) { - content = ' ' + (directiveName || '') + ': '; - if (comment) content += comment + ' '; - } - return window.document.createComment(content); - }; - - return compile; - - //================================ - - function compile($compileNodes, transcludeFn, maxPriority, ignoreDirective, - previousCompileContext) { - if (!($compileNodes instanceof jqLite)) { - // jquery always rewraps, whereas we need to preserve the original selector so that we can - // modify it. - $compileNodes = jqLite($compileNodes); - } - var compositeLinkFn = - compileNodes($compileNodes, transcludeFn, $compileNodes, - maxPriority, ignoreDirective, previousCompileContext); - compile.$$addScopeClass($compileNodes); - var namespace = null; - return function publicLinkFn(scope, cloneConnectFn, options) { - if (!$compileNodes) { - throw $compileMinErr('multilink', 'This element has already been linked.'); - } - assertArg(scope, 'scope'); - - if (previousCompileContext && previousCompileContext.needsNewScope) { - // A parent directive did a replace and a directive on this element asked - // for transclusion, which caused us to lose a layer of element on which - // we could hold the new transclusion scope, so we will create it manually - // here. - scope = scope.$parent.$new(); - } - - options = options || {}; - var parentBoundTranscludeFn = options.parentBoundTranscludeFn, - transcludeControllers = options.transcludeControllers, - futureParentElement = options.futureParentElement; - - // When `parentBoundTranscludeFn` is passed, it is a - // `controllersBoundTransclude` function (it was previously passed - // as `transclude` to directive.link) so we must unwrap it to get - // its `boundTranscludeFn` - if (parentBoundTranscludeFn && parentBoundTranscludeFn.$$boundTransclude) { - parentBoundTranscludeFn = parentBoundTranscludeFn.$$boundTransclude; - } - - if (!namespace) { - namespace = detectNamespaceForChildElements(futureParentElement); - } - var $linkNode; - if (namespace !== 'html') { - // When using a directive with replace:true and templateUrl the $compileNodes - // (or a child element inside of them) - // might change, so we need to recreate the namespace adapted compileNodes - // for call to the link function. - // Note: This will already clone the nodes... - $linkNode = jqLite( - wrapTemplate(namespace, jqLite('
').append($compileNodes).html()) - ); - } else if (cloneConnectFn) { - // important!!: we must call our jqLite.clone() since the jQuery one is trying to be smart - // and sometimes changes the structure of the DOM. - $linkNode = JQLitePrototype.clone.call($compileNodes); - } else { - $linkNode = $compileNodes; - } - - if (transcludeControllers) { - for (var controllerName in transcludeControllers) { - $linkNode.data('$' + controllerName + 'Controller', transcludeControllers[controllerName].instance); - } - } - - compile.$$addScopeInfo($linkNode, scope); - - if (cloneConnectFn) cloneConnectFn($linkNode, scope); - if (compositeLinkFn) compositeLinkFn(scope, $linkNode, $linkNode, parentBoundTranscludeFn); - - if (!cloneConnectFn) { - $compileNodes = compositeLinkFn = null; - } - return $linkNode; - }; - } - - function detectNamespaceForChildElements(parentElement) { - // TODO: Make this detect MathML as well... - var node = parentElement && parentElement[0]; - if (!node) { - return 'html'; - } else { - return nodeName_(node) !== 'foreignobject' && toString.call(node).match(/SVG/) ? 'svg' : 'html'; - } - } - - /** - * Compile function matches each node in nodeList against the directives. Once all directives - * for a particular node are collected their compile functions are executed. The compile - * functions return values - the linking functions - are combined into a composite linking - * function, which is the a linking function for the node. - * - * @param {NodeList} nodeList an array of nodes or NodeList to compile - * @param {function(angular.Scope, cloneAttachFn=)} transcludeFn A linking function, where the - * scope argument is auto-generated to the new child of the transcluded parent scope. - * @param {DOMElement=} $rootElement If the nodeList is the root of the compilation tree then - * the rootElement must be set the jqLite collection of the compile root. This is - * needed so that the jqLite collection items can be replaced with widgets. - * @param {number=} maxPriority Max directive priority. - * @returns {Function} A composite linking function of all of the matched directives or null. - */ - function compileNodes(nodeList, transcludeFn, $rootElement, maxPriority, ignoreDirective, - previousCompileContext) { - var linkFns = [], - // `nodeList` can be either an element's `.childNodes` (live NodeList) - // or a jqLite/jQuery collection or an array - notLiveList = isArray(nodeList) || (nodeList instanceof jqLite), - attrs, directives, nodeLinkFn, childNodes, childLinkFn, linkFnFound, nodeLinkFnFound; - - - for (var i = 0; i < nodeList.length; i++) { - attrs = new Attributes(); - - // Support: IE 11 only - // Workaround for #11781 and #14924 - if (msie === 11) { - mergeConsecutiveTextNodes(nodeList, i, notLiveList); - } - - // We must always refer to `nodeList[i]` hereafter, - // since the nodes can be replaced underneath us. - directives = collectDirectives(nodeList[i], [], attrs, i === 0 ? maxPriority : undefined, - ignoreDirective); - - nodeLinkFn = (directives.length) - ? applyDirectivesToNode(directives, nodeList[i], attrs, transcludeFn, $rootElement, - null, [], [], previousCompileContext) - : null; - - if (nodeLinkFn && nodeLinkFn.scope) { - compile.$$addScopeClass(attrs.$$element); - } - - childLinkFn = (nodeLinkFn && nodeLinkFn.terminal || - !(childNodes = nodeList[i].childNodes) || - !childNodes.length) - ? null - : compileNodes(childNodes, - nodeLinkFn ? ( - (nodeLinkFn.transcludeOnThisElement || !nodeLinkFn.templateOnThisElement) - && nodeLinkFn.transclude) : transcludeFn); - - if (nodeLinkFn || childLinkFn) { - linkFns.push(i, nodeLinkFn, childLinkFn); - linkFnFound = true; - nodeLinkFnFound = nodeLinkFnFound || nodeLinkFn; - } - - //use the previous context only for the first element in the virtual group - previousCompileContext = null; - } - - // return a linking function if we have found anything, null otherwise - return linkFnFound ? compositeLinkFn : null; - - function compositeLinkFn(scope, nodeList, $rootElement, parentBoundTranscludeFn) { - var nodeLinkFn, childLinkFn, node, childScope, i, ii, idx, childBoundTranscludeFn; - var stableNodeList; - - - if (nodeLinkFnFound) { - // copy nodeList so that if a nodeLinkFn removes or adds an element at this DOM level our - // offsets don't get screwed up - var nodeListLength = nodeList.length; - stableNodeList = new Array(nodeListLength); - - // create a sparse array by only copying the elements which have a linkFn - for (i = 0; i < linkFns.length; i += 3) { - idx = linkFns[i]; - stableNodeList[idx] = nodeList[idx]; - } - } else { - stableNodeList = nodeList; - } - - for (i = 0, ii = linkFns.length; i < ii;) { - node = stableNodeList[linkFns[i++]]; - nodeLinkFn = linkFns[i++]; - childLinkFn = linkFns[i++]; - - if (nodeLinkFn) { - if (nodeLinkFn.scope) { - childScope = scope.$new(); - compile.$$addScopeInfo(jqLite(node), childScope); - } else { - childScope = scope; - } - - if (nodeLinkFn.transcludeOnThisElement) { - childBoundTranscludeFn = createBoundTranscludeFn( - scope, nodeLinkFn.transclude, parentBoundTranscludeFn); - - } else if (!nodeLinkFn.templateOnThisElement && parentBoundTranscludeFn) { - childBoundTranscludeFn = parentBoundTranscludeFn; - - } else if (!parentBoundTranscludeFn && transcludeFn) { - childBoundTranscludeFn = createBoundTranscludeFn(scope, transcludeFn); - - } else { - childBoundTranscludeFn = null; - } - - nodeLinkFn(childLinkFn, childScope, node, $rootElement, childBoundTranscludeFn); - - } else if (childLinkFn) { - childLinkFn(scope, node.childNodes, undefined, parentBoundTranscludeFn); - } - } - } - } - - function mergeConsecutiveTextNodes(nodeList, idx, notLiveList) { - var node = nodeList[idx]; - var parent = node.parentNode; - var sibling; - - if (node.nodeType !== NODE_TYPE_TEXT) { - return; - } - - while (true) { - sibling = parent ? node.nextSibling : nodeList[idx + 1]; - if (!sibling || sibling.nodeType !== NODE_TYPE_TEXT) { - break; - } - - node.nodeValue = node.nodeValue + sibling.nodeValue; - - if (sibling.parentNode) { - sibling.parentNode.removeChild(sibling); - } - if (notLiveList && sibling === nodeList[idx + 1]) { - nodeList.splice(idx + 1, 1); - } - } - } - - function createBoundTranscludeFn(scope, transcludeFn, previousBoundTranscludeFn) { - function boundTranscludeFn(transcludedScope, cloneFn, controllers, futureParentElement, containingScope) { - - if (!transcludedScope) { - transcludedScope = scope.$new(false, containingScope); - transcludedScope.$$transcluded = true; - } - - return transcludeFn(transcludedScope, cloneFn, { - parentBoundTranscludeFn: previousBoundTranscludeFn, - transcludeControllers: controllers, - futureParentElement: futureParentElement - }); - } - - // We need to attach the transclusion slots onto the `boundTranscludeFn` - // so that they are available inside the `controllersBoundTransclude` function - var boundSlots = boundTranscludeFn.$$slots = createMap(); - for (var slotName in transcludeFn.$$slots) { - if (transcludeFn.$$slots[slotName]) { - boundSlots[slotName] = createBoundTranscludeFn(scope, transcludeFn.$$slots[slotName], previousBoundTranscludeFn); - } else { - boundSlots[slotName] = null; - } - } - - return boundTranscludeFn; - } - - /** - * Looks for directives on the given node and adds them to the directive collection which is - * sorted. - * - * @param node Node to search. - * @param directives An array to which the directives are added to. This array is sorted before - * the function returns. - * @param attrs The shared attrs object which is used to populate the normalized attributes. - * @param {number=} maxPriority Max directive priority. - */ - function collectDirectives(node, directives, attrs, maxPriority, ignoreDirective) { - var nodeType = node.nodeType, - attrsMap = attrs.$attr, - match, - nodeName, - className; - - switch (nodeType) { - case NODE_TYPE_ELEMENT: /* Element */ - - nodeName = nodeName_(node); - - // use the node name: - addDirective(directives, - directiveNormalize(nodeName), 'E', maxPriority, ignoreDirective); - - // iterate over the attributes - for (var attr, name, nName, value, ngPrefixMatch, nAttrs = node.attributes, - j = 0, jj = nAttrs && nAttrs.length; j < jj; j++) { - var attrStartName = false; - var attrEndName = false; - - var isNgAttr = false, isNgProp = false, isNgEvent = false; - var multiElementMatch; - - attr = nAttrs[j]; - name = attr.name; - value = attr.value; - - nName = directiveNormalize(name.toLowerCase()); - - // Support ng-attr-*, ng-prop-* and ng-on-* - if ((ngPrefixMatch = nName.match(NG_PREFIX_BINDING))) { - isNgAttr = ngPrefixMatch[1] === 'Attr'; - isNgProp = ngPrefixMatch[1] === 'Prop'; - isNgEvent = ngPrefixMatch[1] === 'On'; - - // Normalize the non-prefixed name - name = name.replace(PREFIX_REGEXP, '') - .toLowerCase() - .substr(4 + ngPrefixMatch[1].length).replace(/_(.)/g, function(match, letter) { - return letter.toUpperCase(); - }); - - // Support *-start / *-end multi element directives - } else if ((multiElementMatch = nName.match(MULTI_ELEMENT_DIR_RE)) && directiveIsMultiElement(multiElementMatch[1])) { - attrStartName = name; - attrEndName = name.substr(0, name.length - 5) + 'end'; - name = name.substr(0, name.length - 6); - } - - if (isNgProp || isNgEvent) { - attrs[nName] = value; - attrsMap[nName] = attr.name; - - if (isNgProp) { - addPropertyDirective(node, directives, nName, name); - } else { - addEventDirective(directives, nName, name); - } - } else { - // Update nName for cases where a prefix was removed - // NOTE: the .toLowerCase() is unnecessary and causes https://github.com/angular/angular.js/issues/16624 for ng-attr-* - nName = directiveNormalize(name.toLowerCase()); - attrsMap[nName] = name; - - if (isNgAttr || !attrs.hasOwnProperty(nName)) { - attrs[nName] = value; - if (getBooleanAttrName(node, nName)) { - attrs[nName] = true; // presence means true - } - } - - addAttrInterpolateDirective(node, directives, value, nName, isNgAttr); - addDirective(directives, nName, 'A', maxPriority, ignoreDirective, attrStartName, - attrEndName); - } - } - - if (nodeName === 'input' && node.getAttribute('type') === 'hidden') { - // Hidden input elements can have strange behaviour when navigating back to the page - // This tells the browser not to try to cache and reinstate previous values - node.setAttribute('autocomplete', 'off'); - } - - // use class as directive - if (!cssClassDirectivesEnabled) break; - className = node.className; - if (isObject(className)) { - // Maybe SVGAnimatedString - className = className.animVal; - } - if (isString(className) && className !== '') { - while ((match = CLASS_DIRECTIVE_REGEXP.exec(className))) { - nName = directiveNormalize(match[2]); - if (addDirective(directives, nName, 'C', maxPriority, ignoreDirective)) { - attrs[nName] = trim(match[3]); - } - className = className.substr(match.index + match[0].length); - } - } - break; - case NODE_TYPE_TEXT: /* Text Node */ - addTextInterpolateDirective(directives, node.nodeValue); - break; - case NODE_TYPE_COMMENT: /* Comment */ - if (!commentDirectivesEnabled) break; - collectCommentDirectives(node, directives, attrs, maxPriority, ignoreDirective); - break; - } - - directives.sort(byPriority); - return directives; - } - - function collectCommentDirectives(node, directives, attrs, maxPriority, ignoreDirective) { - // function created because of performance, try/catch disables - // the optimization of the whole function #14848 - try { - var match = COMMENT_DIRECTIVE_REGEXP.exec(node.nodeValue); - if (match) { - var nName = directiveNormalize(match[1]); - if (addDirective(directives, nName, 'M', maxPriority, ignoreDirective)) { - attrs[nName] = trim(match[2]); - } - } - } catch (e) { - // turns out that under some circumstances IE9 throws errors when one attempts to read - // comment's node value. - // Just ignore it and continue. (Can't seem to reproduce in test case.) - } - } - - /** - * Given a node with a directive-start it collects all of the siblings until it finds - * directive-end. - * @param node - * @param attrStart - * @param attrEnd - * @returns {*} - */ - function groupScan(node, attrStart, attrEnd) { - var nodes = []; - var depth = 0; - if (attrStart && node.hasAttribute && node.hasAttribute(attrStart)) { - do { - if (!node) { - throw $compileMinErr('uterdir', - 'Unterminated attribute, found \'{0}\' but no matching \'{1}\' found.', - attrStart, attrEnd); - } - if (node.nodeType === NODE_TYPE_ELEMENT) { - if (node.hasAttribute(attrStart)) depth++; - if (node.hasAttribute(attrEnd)) depth--; - } - nodes.push(node); - node = node.nextSibling; - } while (depth > 0); - } else { - nodes.push(node); - } - - return jqLite(nodes); - } - - /** - * Wrapper for linking function which converts normal linking function into a grouped - * linking function. - * @param linkFn - * @param attrStart - * @param attrEnd - * @returns {Function} - */ - function groupElementsLinkFnWrapper(linkFn, attrStart, attrEnd) { - return function groupedElementsLink(scope, element, attrs, controllers, transcludeFn) { - element = groupScan(element[0], attrStart, attrEnd); - return linkFn(scope, element, attrs, controllers, transcludeFn); - }; - } - - /** - * A function generator that is used to support both eager and lazy compilation - * linking function. - * @param eager - * @param $compileNodes - * @param transcludeFn - * @param maxPriority - * @param ignoreDirective - * @param previousCompileContext - * @returns {Function} - */ - function compilationGenerator(eager, $compileNodes, transcludeFn, maxPriority, ignoreDirective, previousCompileContext) { - var compiled; - - if (eager) { - return compile($compileNodes, transcludeFn, maxPriority, ignoreDirective, previousCompileContext); - } - return /** @this */ function lazyCompilation() { - if (!compiled) { - compiled = compile($compileNodes, transcludeFn, maxPriority, ignoreDirective, previousCompileContext); - - // Null out all of these references in order to make them eligible for garbage collection - // since this is a potentially long lived closure - $compileNodes = transcludeFn = previousCompileContext = null; - } - return compiled.apply(this, arguments); - }; - } - - /** - * Once the directives have been collected, their compile functions are executed. This method - * is responsible for inlining directive templates as well as terminating the application - * of the directives if the terminal directive has been reached. - * - * @param {Array} directives Array of collected directives to execute their compile function. - * this needs to be pre-sorted by priority order. - * @param {Node} compileNode The raw DOM node to apply the compile functions to - * @param {Object} templateAttrs The shared attribute function - * @param {function(angular.Scope, cloneAttachFn=)} transcludeFn A linking function, where the - * scope argument is auto-generated to the new - * child of the transcluded parent scope. - * @param {JQLite} jqCollection If we are working on the root of the compile tree then this - * argument has the root jqLite array so that we can replace nodes - * on it. - * @param {Object=} originalReplaceDirective An optional directive that will be ignored when - * compiling the transclusion. - * @param {Array.} preLinkFns - * @param {Array.} postLinkFns - * @param {Object} previousCompileContext Context used for previous compilation of the current - * node - * @returns {Function} linkFn - */ - function applyDirectivesToNode(directives, compileNode, templateAttrs, transcludeFn, - jqCollection, originalReplaceDirective, preLinkFns, postLinkFns, - previousCompileContext) { - previousCompileContext = previousCompileContext || {}; - - var terminalPriority = -Number.MAX_VALUE, - newScopeDirective = previousCompileContext.newScopeDirective, - controllerDirectives = previousCompileContext.controllerDirectives, - newIsolateScopeDirective = previousCompileContext.newIsolateScopeDirective, - templateDirective = previousCompileContext.templateDirective, - nonTlbTranscludeDirective = previousCompileContext.nonTlbTranscludeDirective, - hasTranscludeDirective = false, - hasTemplate = false, - hasElementTranscludeDirective = previousCompileContext.hasElementTranscludeDirective, - $compileNode = templateAttrs.$$element = jqLite(compileNode), - directive, - directiveName, - $template, - replaceDirective = originalReplaceDirective, - childTranscludeFn = transcludeFn, - linkFn, - didScanForMultipleTransclusion = false, - mightHaveMultipleTransclusionError = false, - directiveValue; - - // executes all directives on the current element - for (var i = 0, ii = directives.length; i < ii; i++) { - directive = directives[i]; - var attrStart = directive.$$start; - var attrEnd = directive.$$end; - - // collect multiblock sections - if (attrStart) { - $compileNode = groupScan(compileNode, attrStart, attrEnd); - } - $template = undefined; - - if (terminalPriority > directive.priority) { - break; // prevent further processing of directives - } - - directiveValue = directive.scope; - - if (directiveValue) { - - // skip the check for directives with async templates, we'll check the derived sync - // directive when the template arrives - if (!directive.templateUrl) { - if (isObject(directiveValue)) { - // This directive is trying to add an isolated scope. - // Check that there is no scope of any kind already - assertNoDuplicate('new/isolated scope', newIsolateScopeDirective || newScopeDirective, - directive, $compileNode); - newIsolateScopeDirective = directive; - } else { - // This directive is trying to add a child scope. - // Check that there is no isolated scope already - assertNoDuplicate('new/isolated scope', newIsolateScopeDirective, directive, - $compileNode); - } - } - - newScopeDirective = newScopeDirective || directive; - } - - directiveName = directive.name; - - // If we encounter a condition that can result in transclusion on the directive, - // then scan ahead in the remaining directives for others that may cause a multiple - // transclusion error to be thrown during the compilation process. If a matching directive - // is found, then we know that when we encounter a transcluded directive, we need to eagerly - // compile the `transclude` function rather than doing it lazily in order to throw - // exceptions at the correct time - if (!didScanForMultipleTransclusion && ((directive.replace && (directive.templateUrl || directive.template)) - || (directive.transclude && !directive.$$tlb))) { - var candidateDirective; - - for (var scanningIndex = i + 1; (candidateDirective = directives[scanningIndex++]);) { - if ((candidateDirective.transclude && !candidateDirective.$$tlb) - || (candidateDirective.replace && (candidateDirective.templateUrl || candidateDirective.template))) { - mightHaveMultipleTransclusionError = true; - break; - } - } - - didScanForMultipleTransclusion = true; - } - - if (!directive.templateUrl && directive.controller) { - controllerDirectives = controllerDirectives || createMap(); - assertNoDuplicate('\'' + directiveName + '\' controller', - controllerDirectives[directiveName], directive, $compileNode); - controllerDirectives[directiveName] = directive; - } - - directiveValue = directive.transclude; - - if (directiveValue) { - hasTranscludeDirective = true; - - // Special case ngIf and ngRepeat so that we don't complain about duplicate transclusion. - // This option should only be used by directives that know how to safely handle element transclusion, - // where the transcluded nodes are added or replaced after linking. - if (!directive.$$tlb) { - assertNoDuplicate('transclusion', nonTlbTranscludeDirective, directive, $compileNode); - nonTlbTranscludeDirective = directive; - } - - if (directiveValue === 'element') { - hasElementTranscludeDirective = true; - terminalPriority = directive.priority; - $template = $compileNode; - $compileNode = templateAttrs.$$element = - jqLite(compile.$$createComment(directiveName, templateAttrs[directiveName])); - compileNode = $compileNode[0]; - replaceWith(jqCollection, sliceArgs($template), compileNode); - - childTranscludeFn = compilationGenerator(mightHaveMultipleTransclusionError, $template, transcludeFn, terminalPriority, - replaceDirective && replaceDirective.name, { - // Don't pass in: - // - controllerDirectives - otherwise we'll create duplicates controllers - // - newIsolateScopeDirective or templateDirective - combining templates with - // element transclusion doesn't make sense. - // - // We need only nonTlbTranscludeDirective so that we prevent putting transclusion - // on the same element more than once. - nonTlbTranscludeDirective: nonTlbTranscludeDirective - }); - } else { - - var slots = createMap(); - - if (!isObject(directiveValue)) { - $template = jqLite(jqLiteClone(compileNode)).contents(); - } else { - - // We have transclusion slots, - // collect them up, compile them and store their transclusion functions - $template = window.document.createDocumentFragment(); - - var slotMap = createMap(); - var filledSlots = createMap(); - - // Parse the element selectors - forEach(directiveValue, function(elementSelector, slotName) { - // If an element selector starts with a ? then it is optional - var optional = (elementSelector.charAt(0) === '?'); - elementSelector = optional ? elementSelector.substring(1) : elementSelector; - - slotMap[elementSelector] = slotName; - - // We explicitly assign `null` since this implies that a slot was defined but not filled. - // Later when calling boundTransclusion functions with a slot name we only error if the - // slot is `undefined` - slots[slotName] = null; - - // filledSlots contains `true` for all slots that are either optional or have been - // filled. This is used to check that we have not missed any required slots - filledSlots[slotName] = optional; - }); - - // Add the matching elements into their slot - forEach($compileNode.contents(), function(node) { - var slotName = slotMap[directiveNormalize(nodeName_(node))]; - if (slotName) { - filledSlots[slotName] = true; - slots[slotName] = slots[slotName] || window.document.createDocumentFragment(); - slots[slotName].appendChild(node); - } else { - $template.appendChild(node); - } - }); - - // Check for required slots that were not filled - forEach(filledSlots, function(filled, slotName) { - if (!filled) { - throw $compileMinErr('reqslot', 'Required transclusion slot `{0}` was not filled.', slotName); - } - }); - - for (var slotName in slots) { - if (slots[slotName]) { - // Only define a transclusion function if the slot was filled - var slotCompileNodes = jqLite(slots[slotName].childNodes); - slots[slotName] = compilationGenerator(mightHaveMultipleTransclusionError, slotCompileNodes, transcludeFn); - } - } - - $template = jqLite($template.childNodes); - } - - $compileNode.empty(); // clear contents - childTranscludeFn = compilationGenerator(mightHaveMultipleTransclusionError, $template, transcludeFn, undefined, - undefined, { needsNewScope: directive.$$isolateScope || directive.$$newScope}); - childTranscludeFn.$$slots = slots; - } - } - - if (directive.template) { - hasTemplate = true; - assertNoDuplicate('template', templateDirective, directive, $compileNode); - templateDirective = directive; - - directiveValue = (isFunction(directive.template)) - ? directive.template($compileNode, templateAttrs) - : directive.template; - - directiveValue = denormalizeTemplate(directiveValue); - - if (directive.replace) { - replaceDirective = directive; - if (jqLiteIsTextNode(directiveValue)) { - $template = []; - } else { - $template = removeComments(wrapTemplate(directive.templateNamespace, trim(directiveValue))); - } - compileNode = $template[0]; - - if ($template.length !== 1 || compileNode.nodeType !== NODE_TYPE_ELEMENT) { - throw $compileMinErr('tplrt', - 'Template for directive \'{0}\' must have exactly one root element. {1}', - directiveName, ''); - } - - replaceWith(jqCollection, $compileNode, compileNode); - - var newTemplateAttrs = {$attr: {}}; - - // combine directives from the original node and from the template: - // - take the array of directives for this element - // - split it into two parts, those that already applied (processed) and those that weren't (unprocessed) - // - collect directives from the template and sort them by priority - // - combine directives as: processed + template + unprocessed - var templateDirectives = collectDirectives(compileNode, [], newTemplateAttrs); - var unprocessedDirectives = directives.splice(i + 1, directives.length - (i + 1)); - - if (newIsolateScopeDirective || newScopeDirective) { - // The original directive caused the current element to be replaced but this element - // also needs to have a new scope, so we need to tell the template directives - // that they would need to get their scope from further up, if they require transclusion - markDirectiveScope(templateDirectives, newIsolateScopeDirective, newScopeDirective); - } - directives = directives.concat(templateDirectives).concat(unprocessedDirectives); - mergeTemplateAttributes(templateAttrs, newTemplateAttrs); - - ii = directives.length; - } else { - $compileNode.html(directiveValue); - } - } - - if (directive.templateUrl) { - hasTemplate = true; - assertNoDuplicate('template', templateDirective, directive, $compileNode); - templateDirective = directive; - - if (directive.replace) { - replaceDirective = directive; - } - - // eslint-disable-next-line no-func-assign - nodeLinkFn = compileTemplateUrl(directives.splice(i, directives.length - i), $compileNode, - templateAttrs, jqCollection, hasTranscludeDirective && childTranscludeFn, preLinkFns, postLinkFns, { - controllerDirectives: controllerDirectives, - newScopeDirective: (newScopeDirective !== directive) && newScopeDirective, - newIsolateScopeDirective: newIsolateScopeDirective, - templateDirective: templateDirective, - nonTlbTranscludeDirective: nonTlbTranscludeDirective - }); - ii = directives.length; - } else if (directive.compile) { - try { - linkFn = directive.compile($compileNode, templateAttrs, childTranscludeFn); - var context = directive.$$originalDirective || directive; - if (isFunction(linkFn)) { - addLinkFns(null, bind(context, linkFn), attrStart, attrEnd); - } else if (linkFn) { - addLinkFns(bind(context, linkFn.pre), bind(context, linkFn.post), attrStart, attrEnd); - } - } catch (e) { - $exceptionHandler(e, startingTag($compileNode)); - } - } - - if (directive.terminal) { - nodeLinkFn.terminal = true; - terminalPriority = Math.max(terminalPriority, directive.priority); - } - - } - - nodeLinkFn.scope = newScopeDirective && newScopeDirective.scope === true; - nodeLinkFn.transcludeOnThisElement = hasTranscludeDirective; - nodeLinkFn.templateOnThisElement = hasTemplate; - nodeLinkFn.transclude = childTranscludeFn; - - previousCompileContext.hasElementTranscludeDirective = hasElementTranscludeDirective; - - // might be normal or delayed nodeLinkFn depending on if templateUrl is present - return nodeLinkFn; - - //////////////////// - - function addLinkFns(pre, post, attrStart, attrEnd) { - if (pre) { - if (attrStart) pre = groupElementsLinkFnWrapper(pre, attrStart, attrEnd); - pre.require = directive.require; - pre.directiveName = directiveName; - if (newIsolateScopeDirective === directive || directive.$$isolateScope) { - pre = cloneAndAnnotateFn(pre, {isolateScope: true}); - } - preLinkFns.push(pre); - } - if (post) { - if (attrStart) post = groupElementsLinkFnWrapper(post, attrStart, attrEnd); - post.require = directive.require; - post.directiveName = directiveName; - if (newIsolateScopeDirective === directive || directive.$$isolateScope) { - post = cloneAndAnnotateFn(post, {isolateScope: true}); - } - postLinkFns.push(post); - } - } - - function nodeLinkFn(childLinkFn, scope, linkNode, $rootElement, boundTranscludeFn) { - var i, ii, linkFn, isolateScope, controllerScope, elementControllers, transcludeFn, $element, - attrs, scopeBindingInfo; - - if (compileNode === linkNode) { - attrs = templateAttrs; - $element = templateAttrs.$$element; - } else { - $element = jqLite(linkNode); - attrs = new Attributes($element, templateAttrs); - } - - controllerScope = scope; - if (newIsolateScopeDirective) { - isolateScope = scope.$new(true); - } else if (newScopeDirective) { - controllerScope = scope.$parent; - } - - if (boundTranscludeFn) { - // track `boundTranscludeFn` so it can be unwrapped if `transcludeFn` - // is later passed as `parentBoundTranscludeFn` to `publicLinkFn` - transcludeFn = controllersBoundTransclude; - transcludeFn.$$boundTransclude = boundTranscludeFn; - // expose the slots on the `$transclude` function - transcludeFn.isSlotFilled = function(slotName) { - return !!boundTranscludeFn.$$slots[slotName]; - }; - } - - if (controllerDirectives) { - elementControllers = setupControllers($element, attrs, transcludeFn, controllerDirectives, isolateScope, scope, newIsolateScopeDirective); - } - - if (newIsolateScopeDirective) { - // Initialize isolate scope bindings for new isolate scope directive. - compile.$$addScopeInfo($element, isolateScope, true, !(templateDirective && (templateDirective === newIsolateScopeDirective || - templateDirective === newIsolateScopeDirective.$$originalDirective))); - compile.$$addScopeClass($element, true); - isolateScope.$$isolateBindings = - newIsolateScopeDirective.$$isolateBindings; - scopeBindingInfo = initializeDirectiveBindings(scope, attrs, isolateScope, - isolateScope.$$isolateBindings, - newIsolateScopeDirective); - if (scopeBindingInfo.removeWatches) { - isolateScope.$on('$destroy', scopeBindingInfo.removeWatches); - } - } - - // Initialize bindToController bindings - for (var name in elementControllers) { - var controllerDirective = controllerDirectives[name]; - var controller = elementControllers[name]; - var bindings = controllerDirective.$$bindings.bindToController; - - controller.instance = controller(); - $element.data('$' + controllerDirective.name + 'Controller', controller.instance); - controller.bindingInfo = - initializeDirectiveBindings(controllerScope, attrs, controller.instance, bindings, controllerDirective); - } - - // Bind the required controllers to the controller, if `require` is an object and `bindToController` is truthy - forEach(controllerDirectives, function(controllerDirective, name) { - var require = controllerDirective.require; - if (controllerDirective.bindToController && !isArray(require) && isObject(require)) { - extend(elementControllers[name].instance, getControllers(name, require, $element, elementControllers)); - } - }); - - // Handle the init and destroy lifecycle hooks on all controllers that have them - forEach(elementControllers, function(controller) { - var controllerInstance = controller.instance; - if (isFunction(controllerInstance.$onChanges)) { - try { - controllerInstance.$onChanges(controller.bindingInfo.initialChanges); - } catch (e) { - $exceptionHandler(e); - } - } - if (isFunction(controllerInstance.$onInit)) { - try { - controllerInstance.$onInit(); - } catch (e) { - $exceptionHandler(e); - } - } - if (isFunction(controllerInstance.$doCheck)) { - controllerScope.$watch(function() { controllerInstance.$doCheck(); }); - controllerInstance.$doCheck(); - } - if (isFunction(controllerInstance.$onDestroy)) { - controllerScope.$on('$destroy', function callOnDestroyHook() { - controllerInstance.$onDestroy(); - }); - } - }); - - // PRELINKING - for (i = 0, ii = preLinkFns.length; i < ii; i++) { - linkFn = preLinkFns[i]; - invokeLinkFn(linkFn, - linkFn.isolateScope ? isolateScope : scope, - $element, - attrs, - linkFn.require && getControllers(linkFn.directiveName, linkFn.require, $element, elementControllers), - transcludeFn - ); - } - - // RECURSION - // We only pass the isolate scope, if the isolate directive has a template, - // otherwise the child elements do not belong to the isolate directive. - var scopeToChild = scope; - if (newIsolateScopeDirective && (newIsolateScopeDirective.template || newIsolateScopeDirective.templateUrl === null)) { - scopeToChild = isolateScope; - } - if (childLinkFn) { - childLinkFn(scopeToChild, linkNode.childNodes, undefined, boundTranscludeFn); - } - - // POSTLINKING - for (i = postLinkFns.length - 1; i >= 0; i--) { - linkFn = postLinkFns[i]; - invokeLinkFn(linkFn, - linkFn.isolateScope ? isolateScope : scope, - $element, - attrs, - linkFn.require && getControllers(linkFn.directiveName, linkFn.require, $element, elementControllers), - transcludeFn - ); - } - - // Trigger $postLink lifecycle hooks - forEach(elementControllers, function(controller) { - var controllerInstance = controller.instance; - if (isFunction(controllerInstance.$postLink)) { - controllerInstance.$postLink(); - } - }); - - // This is the function that is injected as `$transclude`. - // Note: all arguments are optional! - function controllersBoundTransclude(scope, cloneAttachFn, futureParentElement, slotName) { - var transcludeControllers; - // No scope passed in: - if (!isScope(scope)) { - slotName = futureParentElement; - futureParentElement = cloneAttachFn; - cloneAttachFn = scope; - scope = undefined; - } - - if (hasElementTranscludeDirective) { - transcludeControllers = elementControllers; - } - if (!futureParentElement) { - futureParentElement = hasElementTranscludeDirective ? $element.parent() : $element; - } - if (slotName) { - // slotTranscludeFn can be one of three things: - // * a transclude function - a filled slot - // * `null` - an optional slot that was not filled - // * `undefined` - a slot that was not declared (i.e. invalid) - var slotTranscludeFn = boundTranscludeFn.$$slots[slotName]; - if (slotTranscludeFn) { - return slotTranscludeFn(scope, cloneAttachFn, transcludeControllers, futureParentElement, scopeToChild); - } else if (isUndefined(slotTranscludeFn)) { - throw $compileMinErr('noslot', - 'No parent directive that requires a transclusion with slot name "{0}". ' + - 'Element: {1}', - slotName, startingTag($element)); - } - } else { - return boundTranscludeFn(scope, cloneAttachFn, transcludeControllers, futureParentElement, scopeToChild); - } - } - } - } - - function getControllers(directiveName, require, $element, elementControllers) { - var value; - - if (isString(require)) { - var match = require.match(REQUIRE_PREFIX_REGEXP); - var name = require.substring(match[0].length); - var inheritType = match[1] || match[3]; - var optional = match[2] === '?'; - - //If only parents then start at the parent element - if (inheritType === '^^') { - $element = $element.parent(); - //Otherwise attempt getting the controller from elementControllers in case - //the element is transcluded (and has no data) and to avoid .data if possible - } else { - value = elementControllers && elementControllers[name]; - value = value && value.instance; - } - - if (!value) { - var dataName = '$' + name + 'Controller'; - - if (inheritType === '^^' && $element[0] && $element[0].nodeType === NODE_TYPE_DOCUMENT) { - // inheritedData() uses the documentElement when it finds the document, so we would - // require from the element itself. - value = null; - } else { - value = inheritType ? $element.inheritedData(dataName) : $element.data(dataName); - } - } - - if (!value && !optional) { - throw $compileMinErr('ctreq', - 'Controller \'{0}\', required by directive \'{1}\', can\'t be found!', - name, directiveName); - } - } else if (isArray(require)) { - value = []; - for (var i = 0, ii = require.length; i < ii; i++) { - value[i] = getControllers(directiveName, require[i], $element, elementControllers); - } - } else if (isObject(require)) { - value = {}; - forEach(require, function(controller, property) { - value[property] = getControllers(directiveName, controller, $element, elementControllers); - }); - } - - return value || null; - } - - function setupControllers($element, attrs, transcludeFn, controllerDirectives, isolateScope, scope, newIsolateScopeDirective) { - var elementControllers = createMap(); - for (var controllerKey in controllerDirectives) { - var directive = controllerDirectives[controllerKey]; - var locals = { - $scope: directive === newIsolateScopeDirective || directive.$$isolateScope ? isolateScope : scope, - $element: $element, - $attrs: attrs, - $transclude: transcludeFn - }; - - var controller = directive.controller; - if (controller === '@') { - controller = attrs[directive.name]; - } - - var controllerInstance = $controller(controller, locals, true, directive.controllerAs); - - // For directives with element transclusion the element is a comment. - // In this case .data will not attach any data. - // Instead, we save the controllers for the element in a local hash and attach to .data - // later, once we have the actual element. - elementControllers[directive.name] = controllerInstance; - $element.data('$' + directive.name + 'Controller', controllerInstance.instance); - } - return elementControllers; - } - - // Depending upon the context in which a directive finds itself it might need to have a new isolated - // or child scope created. For instance: - // * if the directive has been pulled into a template because another directive with a higher priority - // asked for element transclusion - // * if the directive itself asks for transclusion but it is at the root of a template and the original - // element was replaced. See https://github.com/angular/angular.js/issues/12936 - function markDirectiveScope(directives, isolateScope, newScope) { - for (var j = 0, jj = directives.length; j < jj; j++) { - directives[j] = inherit(directives[j], {$$isolateScope: isolateScope, $$newScope: newScope}); - } - } - - /** - * looks up the directive and decorates it with exception handling and proper parameters. We - * call this the boundDirective. - * - * @param {string} name name of the directive to look up. - * @param {string} location The directive must be found in specific format. - * String containing any of theses characters: - * - * * `E`: element name - * * `A': attribute - * * `C`: class - * * `M`: comment - * @returns {boolean} true if directive was added. - */ - function addDirective(tDirectives, name, location, maxPriority, ignoreDirective, startAttrName, - endAttrName) { - if (name === ignoreDirective) return null; - var match = null; - if (hasDirectives.hasOwnProperty(name)) { - for (var directive, directives = $injector.get(name + Suffix), - i = 0, ii = directives.length; i < ii; i++) { - directive = directives[i]; - if ((isUndefined(maxPriority) || maxPriority > directive.priority) && - directive.restrict.indexOf(location) !== -1) { - if (startAttrName) { - directive = inherit(directive, {$$start: startAttrName, $$end: endAttrName}); - } - if (!directive.$$bindings) { - var bindings = directive.$$bindings = - parseDirectiveBindings(directive, directive.name); - if (isObject(bindings.isolateScope)) { - directive.$$isolateBindings = bindings.isolateScope; - } - } - tDirectives.push(directive); - match = directive; - } - } - } - return match; - } - - - /** - * looks up the directive and returns true if it is a multi-element directive, - * and therefore requires DOM nodes between -start and -end markers to be grouped - * together. - * - * @param {string} name name of the directive to look up. - * @returns true if directive was registered as multi-element. - */ - function directiveIsMultiElement(name) { - if (hasDirectives.hasOwnProperty(name)) { - for (var directive, directives = $injector.get(name + Suffix), - i = 0, ii = directives.length; i < ii; i++) { - directive = directives[i]; - if (directive.multiElement) { - return true; - } - } - } - return false; - } - - /** - * When the element is replaced with HTML template then the new attributes - * on the template need to be merged with the existing attributes in the DOM. - * The desired effect is to have both of the attributes present. - * - * @param {object} dst destination attributes (original DOM) - * @param {object} src source attributes (from the directive template) - */ - function mergeTemplateAttributes(dst, src) { - var srcAttr = src.$attr, - dstAttr = dst.$attr; - - // reapply the old attributes to the new element - forEach(dst, function(value, key) { - if (key.charAt(0) !== '$') { - if (src[key] && src[key] !== value) { - if (value.length) { - value += (key === 'style' ? ';' : ' ') + src[key]; - } else { - value = src[key]; - } - } - dst.$set(key, value, true, srcAttr[key]); - } - }); - - // copy the new attributes on the old attrs object - forEach(src, function(value, key) { - // Check if we already set this attribute in the loop above. - // `dst` will never contain hasOwnProperty as DOM parser won't let it. - // You will get an "InvalidCharacterError: DOM Exception 5" error if you - // have an attribute like "has-own-property" or "data-has-own-property", etc. - if (!dst.hasOwnProperty(key) && key.charAt(0) !== '$') { - dst[key] = value; - - if (key !== 'class' && key !== 'style') { - dstAttr[key] = srcAttr[key]; - } - } - }); - } - - - function compileTemplateUrl(directives, $compileNode, tAttrs, - $rootElement, childTranscludeFn, preLinkFns, postLinkFns, previousCompileContext) { - var linkQueue = [], - afterTemplateNodeLinkFn, - afterTemplateChildLinkFn, - beforeTemplateCompileNode = $compileNode[0], - origAsyncDirective = directives.shift(), - derivedSyncDirective = inherit(origAsyncDirective, { - templateUrl: null, transclude: null, replace: null, $$originalDirective: origAsyncDirective - }), - templateUrl = (isFunction(origAsyncDirective.templateUrl)) - ? origAsyncDirective.templateUrl($compileNode, tAttrs) - : origAsyncDirective.templateUrl, - templateNamespace = origAsyncDirective.templateNamespace; - - $compileNode.empty(); - - $templateRequest(templateUrl) - .then(function(content) { - var compileNode, tempTemplateAttrs, $template, childBoundTranscludeFn; - - content = denormalizeTemplate(content); - - if (origAsyncDirective.replace) { - if (jqLiteIsTextNode(content)) { - $template = []; - } else { - $template = removeComments(wrapTemplate(templateNamespace, trim(content))); - } - compileNode = $template[0]; - - if ($template.length !== 1 || compileNode.nodeType !== NODE_TYPE_ELEMENT) { - throw $compileMinErr('tplrt', - 'Template for directive \'{0}\' must have exactly one root element. {1}', - origAsyncDirective.name, templateUrl); - } - - tempTemplateAttrs = {$attr: {}}; - replaceWith($rootElement, $compileNode, compileNode); - var templateDirectives = collectDirectives(compileNode, [], tempTemplateAttrs); - - if (isObject(origAsyncDirective.scope)) { - // the original directive that caused the template to be loaded async required - // an isolate scope - markDirectiveScope(templateDirectives, true); - } - directives = templateDirectives.concat(directives); - mergeTemplateAttributes(tAttrs, tempTemplateAttrs); - } else { - compileNode = beforeTemplateCompileNode; - $compileNode.html(content); - } - - directives.unshift(derivedSyncDirective); - - afterTemplateNodeLinkFn = applyDirectivesToNode(directives, compileNode, tAttrs, - childTranscludeFn, $compileNode, origAsyncDirective, preLinkFns, postLinkFns, - previousCompileContext); - forEach($rootElement, function(node, i) { - if (node === compileNode) { - $rootElement[i] = $compileNode[0]; - } - }); - afterTemplateChildLinkFn = compileNodes($compileNode[0].childNodes, childTranscludeFn); - - while (linkQueue.length) { - var scope = linkQueue.shift(), - beforeTemplateLinkNode = linkQueue.shift(), - linkRootElement = linkQueue.shift(), - boundTranscludeFn = linkQueue.shift(), - linkNode = $compileNode[0]; - - if (scope.$$destroyed) continue; - - if (beforeTemplateLinkNode !== beforeTemplateCompileNode) { - var oldClasses = beforeTemplateLinkNode.className; - - if (!(previousCompileContext.hasElementTranscludeDirective && - origAsyncDirective.replace)) { - // it was cloned therefore we have to clone as well. - linkNode = jqLiteClone(compileNode); - } - replaceWith(linkRootElement, jqLite(beforeTemplateLinkNode), linkNode); - - // Copy in CSS classes from original node - safeAddClass(jqLite(linkNode), oldClasses); - } - if (afterTemplateNodeLinkFn.transcludeOnThisElement) { - childBoundTranscludeFn = createBoundTranscludeFn(scope, afterTemplateNodeLinkFn.transclude, boundTranscludeFn); - } else { - childBoundTranscludeFn = boundTranscludeFn; - } - afterTemplateNodeLinkFn(afterTemplateChildLinkFn, scope, linkNode, $rootElement, - childBoundTranscludeFn); - } - linkQueue = null; - }).catch(function(error) { - if (isError(error)) { - $exceptionHandler(error); - } - }); - - return function delayedNodeLinkFn(ignoreChildLinkFn, scope, node, rootElement, boundTranscludeFn) { - var childBoundTranscludeFn = boundTranscludeFn; - if (scope.$$destroyed) return; - if (linkQueue) { - linkQueue.push(scope, - node, - rootElement, - childBoundTranscludeFn); - } else { - if (afterTemplateNodeLinkFn.transcludeOnThisElement) { - childBoundTranscludeFn = createBoundTranscludeFn(scope, afterTemplateNodeLinkFn.transclude, boundTranscludeFn); - } - afterTemplateNodeLinkFn(afterTemplateChildLinkFn, scope, node, rootElement, childBoundTranscludeFn); - } - }; - } - - - /** - * Sorting function for bound directives. - */ - function byPriority(a, b) { - var diff = b.priority - a.priority; - if (diff !== 0) return diff; - if (a.name !== b.name) return (a.name < b.name) ? -1 : 1; - return a.index - b.index; - } - - function assertNoDuplicate(what, previousDirective, directive, element) { - - function wrapModuleNameIfDefined(moduleName) { - return moduleName ? - (' (module: ' + moduleName + ')') : - ''; - } - - if (previousDirective) { - throw $compileMinErr('multidir', 'Multiple directives [{0}{1}, {2}{3}] asking for {4} on: {5}', - previousDirective.name, wrapModuleNameIfDefined(previousDirective.$$moduleName), - directive.name, wrapModuleNameIfDefined(directive.$$moduleName), what, startingTag(element)); - } - } - - - function addTextInterpolateDirective(directives, text) { - var interpolateFn = $interpolate(text, true); - if (interpolateFn) { - directives.push({ - priority: 0, - compile: function textInterpolateCompileFn(templateNode) { - var templateNodeParent = templateNode.parent(), - hasCompileParent = !!templateNodeParent.length; - - // When transcluding a template that has bindings in the root - // we don't have a parent and thus need to add the class during linking fn. - if (hasCompileParent) compile.$$addBindingClass(templateNodeParent); - - return function textInterpolateLinkFn(scope, node) { - var parent = node.parent(); - if (!hasCompileParent) compile.$$addBindingClass(parent); - compile.$$addBindingInfo(parent, interpolateFn.expressions); - scope.$watch(interpolateFn, function interpolateFnWatchAction(value) { - node[0].nodeValue = value; - }); - }; - } - }); - } - } - - - function wrapTemplate(type, template) { - type = lowercase(type || 'html'); - switch (type) { - case 'svg': - case 'math': - var wrapper = window.document.createElement('div'); - wrapper.innerHTML = '<' + type + '>' + template + ''; - return wrapper.childNodes[0].childNodes; - default: - return template; - } - } - - - function getTrustedAttrContext(nodeName, attrNormalizedName) { - if (attrNormalizedName === 'srcdoc') { - return $sce.HTML; - } - // All nodes with src attributes require a RESOURCE_URL value, except for - // img and various html5 media nodes, which require the MEDIA_URL context. - if (attrNormalizedName === 'src' || attrNormalizedName === 'ngSrc') { - if (['img', 'video', 'audio', 'source', 'track'].indexOf(nodeName) === -1) { - return $sce.RESOURCE_URL; - } - return $sce.MEDIA_URL; - } else if (attrNormalizedName === 'xlinkHref') { - // Some xlink:href are okay, most aren't - if (nodeName === 'image') return $sce.MEDIA_URL; - if (nodeName === 'a') return $sce.URL; - return $sce.RESOURCE_URL; - } else if ( - // Formaction - (nodeName === 'form' && attrNormalizedName === 'action') || - // If relative URLs can go where they are not expected to, then - // all sorts of trust issues can arise. - (nodeName === 'base' && attrNormalizedName === 'href') || - // links can be stylesheets or imports, which can run script in the current origin - (nodeName === 'link' && attrNormalizedName === 'href') - ) { - return $sce.RESOURCE_URL; - } else if (nodeName === 'a' && (attrNormalizedName === 'href' || - attrNormalizedName === 'ngHref')) { - return $sce.URL; - } - } - - function getTrustedPropContext(nodeName, propNormalizedName) { - var prop = propNormalizedName.toLowerCase(); - return PROP_CONTEXTS[nodeName + '|' + prop] || PROP_CONTEXTS['*|' + prop]; - } - - function sanitizeSrcsetPropertyValue(value) { - return sanitizeSrcset($sce.valueOf(value), 'ng-prop-srcset'); - } - function addPropertyDirective(node, directives, attrName, propName) { - if (EVENT_HANDLER_ATTR_REGEXP.test(propName)) { - throw $compileMinErr('nodomevents', 'Property bindings for HTML DOM event properties are disallowed'); - } - - var nodeName = nodeName_(node); - var trustedContext = getTrustedPropContext(nodeName, propName); - - var sanitizer = identity; - // Sanitize img[srcset] + source[srcset] values. - if (propName === 'srcset' && (nodeName === 'img' || nodeName === 'source')) { - sanitizer = sanitizeSrcsetPropertyValue; - } else if (trustedContext) { - sanitizer = $sce.getTrusted.bind($sce, trustedContext); - } - - directives.push({ - priority: 100, - compile: function ngPropCompileFn(_, attr) { - var ngPropGetter = $parse(attr[attrName]); - var ngPropWatch = $parse(attr[attrName], function sceValueOf(val) { - // Unwrap the value to compare the actual inner safe value, not the wrapper object. - return $sce.valueOf(val); - }); - - return { - pre: function ngPropPreLinkFn(scope, $element) { - function applyPropValue() { - var propValue = ngPropGetter(scope); - $element[0][propName] = sanitizer(propValue); - } - - applyPropValue(); - scope.$watch(ngPropWatch, applyPropValue); - } - }; - } - }); - } - - function addEventDirective(directives, attrName, eventName) { - directives.push( - createEventDirective($parse, $rootScope, $exceptionHandler, attrName, eventName, /*forceAsync=*/false) - ); - } - - function addAttrInterpolateDirective(node, directives, value, name, isNgAttr) { - var nodeName = nodeName_(node); - var trustedContext = getTrustedAttrContext(nodeName, name); - var mustHaveExpression = !isNgAttr; - var allOrNothing = ALL_OR_NOTHING_ATTRS[name] || isNgAttr; - - var interpolateFn = $interpolate(value, mustHaveExpression, trustedContext, allOrNothing); - - // no interpolation found -> ignore - if (!interpolateFn) return; - - if (name === 'multiple' && nodeName === 'select') { - throw $compileMinErr('selmulti', - 'Binding to the \'multiple\' attribute is not supported. Element: {0}', - startingTag(node)); - } - - if (EVENT_HANDLER_ATTR_REGEXP.test(name)) { - throw $compileMinErr('nodomevents', 'Interpolations for HTML DOM event attributes are disallowed'); - } - - directives.push({ - priority: 100, - compile: function() { - return { - pre: function attrInterpolatePreLinkFn(scope, element, attr) { - var $$observers = (attr.$$observers || (attr.$$observers = createMap())); - - // If the attribute has changed since last $interpolate()ed - var newValue = attr[name]; - if (newValue !== value) { - // we need to interpolate again since the attribute value has been updated - // (e.g. by another directive's compile function) - // ensure unset/empty values make interpolateFn falsy - interpolateFn = newValue && $interpolate(newValue, true, trustedContext, allOrNothing); - value = newValue; - } - - // if attribute was updated so that there is no interpolation going on we don't want to - // register any observers - if (!interpolateFn) return; - - // initialize attr object so that it's ready in case we need the value for isolate - // scope initialization, otherwise the value would not be available from isolate - // directive's linking fn during linking phase - attr[name] = interpolateFn(scope); - - ($$observers[name] || ($$observers[name] = [])).$$inter = true; - (attr.$$observers && attr.$$observers[name].$$scope || scope). - $watch(interpolateFn, function interpolateFnWatchAction(newValue, oldValue) { - //special case for class attribute addition + removal - //so that class changes can tap into the animation - //hooks provided by the $animate service. Be sure to - //skip animations when the first digest occurs (when - //both the new and the old values are the same) since - //the CSS classes are the non-interpolated values - if (name === 'class' && newValue !== oldValue) { - attr.$updateClass(newValue, oldValue); - } else { - attr.$set(name, newValue); - } - }); - } - }; - } - }); - } - - - /** - * This is a special jqLite.replaceWith, which can replace items which - * have no parents, provided that the containing jqLite collection is provided. - * - * @param {JqLite=} $rootElement The root of the compile tree. Used so that we can replace nodes - * in the root of the tree. - * @param {JqLite} elementsToRemove The jqLite element which we are going to replace. We keep - * the shell, but replace its DOM node reference. - * @param {Node} newNode The new DOM node. - */ - function replaceWith($rootElement, elementsToRemove, newNode) { - var firstElementToRemove = elementsToRemove[0], - removeCount = elementsToRemove.length, - parent = firstElementToRemove.parentNode, - i, ii; - - if ($rootElement) { - for (i = 0, ii = $rootElement.length; i < ii; i++) { - if ($rootElement[i] === firstElementToRemove) { - $rootElement[i++] = newNode; - for (var j = i, j2 = j + removeCount - 1, - jj = $rootElement.length; - j < jj; j++, j2++) { - if (j2 < jj) { - $rootElement[j] = $rootElement[j2]; - } else { - delete $rootElement[j]; - } - } - $rootElement.length -= removeCount - 1; - - // If the replaced element is also the jQuery .context then replace it - // .context is a deprecated jQuery api, so we should set it only when jQuery set it - // http://api.jquery.com/context/ - if ($rootElement.context === firstElementToRemove) { - $rootElement.context = newNode; - } - break; - } - } - } - - if (parent) { - parent.replaceChild(newNode, firstElementToRemove); - } - - // Append all the `elementsToRemove` to a fragment. This will... - // - remove them from the DOM - // - allow them to still be traversed with .nextSibling - // - allow a single fragment.qSA to fetch all elements being removed - var fragment = window.document.createDocumentFragment(); - for (i = 0; i < removeCount; i++) { - fragment.appendChild(elementsToRemove[i]); - } - - if (jqLite.hasData(firstElementToRemove)) { - // Copy over user data (that includes AngularJS's $scope etc.). Don't copy private - // data here because there's no public interface in jQuery to do that and copying over - // event listeners (which is the main use of private data) wouldn't work anyway. - jqLite.data(newNode, jqLite.data(firstElementToRemove)); - - // Remove $destroy event listeners from `firstElementToRemove` - jqLite(firstElementToRemove).off('$destroy'); - } - - // Cleanup any data/listeners on the elements and children. - // This includes invoking the $destroy event on any elements with listeners. - jqLite.cleanData(fragment.querySelectorAll('*')); - - // Update the jqLite collection to only contain the `newNode` - for (i = 1; i < removeCount; i++) { - delete elementsToRemove[i]; - } - elementsToRemove[0] = newNode; - elementsToRemove.length = 1; - } - - - function cloneAndAnnotateFn(fn, annotation) { - return extend(function() { return fn.apply(null, arguments); }, fn, annotation); - } - - - function invokeLinkFn(linkFn, scope, $element, attrs, controllers, transcludeFn) { - try { - linkFn(scope, $element, attrs, controllers, transcludeFn); - } catch (e) { - $exceptionHandler(e, startingTag($element)); - } - } - - function strictBindingsCheck(attrName, directiveName) { - if (strictComponentBindingsEnabled) { - throw $compileMinErr('missingattr', - 'Attribute \'{0}\' of \'{1}\' is non-optional and must be set!', - attrName, directiveName); - } - } - - // Set up $watches for isolate scope and controller bindings. - function initializeDirectiveBindings(scope, attrs, destination, bindings, directive) { - var removeWatchCollection = []; - var initialChanges = {}; - var changes; - - forEach(bindings, function initializeBinding(definition, scopeName) { - var attrName = definition.attrName, - optional = definition.optional, - mode = definition.mode, // @, =, <, or & - lastValue, - parentGet, parentSet, compare, removeWatch; - - switch (mode) { - - case '@': - if (!optional && !hasOwnProperty.call(attrs, attrName)) { - strictBindingsCheck(attrName, directive.name); - destination[scopeName] = attrs[attrName] = undefined; - - } - removeWatch = attrs.$observe(attrName, function(value) { - if (isString(value) || isBoolean(value)) { - var oldValue = destination[scopeName]; - recordChanges(scopeName, value, oldValue); - destination[scopeName] = value; - } - }); - attrs.$$observers[attrName].$$scope = scope; - lastValue = attrs[attrName]; - if (isString(lastValue)) { - // If the attribute has been provided then we trigger an interpolation to ensure - // the value is there for use in the link fn - destination[scopeName] = $interpolate(lastValue)(scope); - } else if (isBoolean(lastValue)) { - // If the attributes is one of the BOOLEAN_ATTR then AngularJS will have converted - // the value to boolean rather than a string, so we special case this situation - destination[scopeName] = lastValue; - } - initialChanges[scopeName] = new SimpleChange(_UNINITIALIZED_VALUE, destination[scopeName]); - removeWatchCollection.push(removeWatch); - break; - - case '=': - if (!hasOwnProperty.call(attrs, attrName)) { - if (optional) break; - strictBindingsCheck(attrName, directive.name); - attrs[attrName] = undefined; - } - if (optional && !attrs[attrName]) break; - - parentGet = $parse(attrs[attrName]); - if (parentGet.literal) { - compare = equals; - } else { - compare = simpleCompare; - } - parentSet = parentGet.assign || function() { - // reset the change, or we will throw this exception on every $digest - lastValue = destination[scopeName] = parentGet(scope); - throw $compileMinErr('nonassign', - 'Expression \'{0}\' in attribute \'{1}\' used with directive \'{2}\' is non-assignable!', - attrs[attrName], attrName, directive.name); - }; - lastValue = destination[scopeName] = parentGet(scope); - var parentValueWatch = function parentValueWatch(parentValue) { - if (!compare(parentValue, destination[scopeName])) { - // we are out of sync and need to copy - if (!compare(parentValue, lastValue)) { - // parent changed and it has precedence - destination[scopeName] = parentValue; - } else { - // if the parent can be assigned then do so - parentSet(scope, parentValue = destination[scopeName]); - } - } - lastValue = parentValue; - return lastValue; - }; - parentValueWatch.$stateful = true; - if (definition.collection) { - removeWatch = scope.$watchCollection(attrs[attrName], parentValueWatch); - } else { - removeWatch = scope.$watch($parse(attrs[attrName], parentValueWatch), null, parentGet.literal); - } - removeWatchCollection.push(removeWatch); - break; - - case '<': - if (!hasOwnProperty.call(attrs, attrName)) { - if (optional) break; - strictBindingsCheck(attrName, directive.name); - attrs[attrName] = undefined; - } - if (optional && !attrs[attrName]) break; - - parentGet = $parse(attrs[attrName]); - var isLiteral = parentGet.literal; - - var initialValue = destination[scopeName] = parentGet(scope); - initialChanges[scopeName] = new SimpleChange(_UNINITIALIZED_VALUE, destination[scopeName]); - - removeWatch = scope[definition.collection ? '$watchCollection' : '$watch'](parentGet, function parentValueWatchAction(newValue, oldValue) { - if (oldValue === newValue) { - if (oldValue === initialValue || (isLiteral && equals(oldValue, initialValue))) { - return; - } - oldValue = initialValue; - } - recordChanges(scopeName, newValue, oldValue); - destination[scopeName] = newValue; - }); - - removeWatchCollection.push(removeWatch); - break; - - case '&': - if (!optional && !hasOwnProperty.call(attrs, attrName)) { - strictBindingsCheck(attrName, directive.name); - } - // Don't assign Object.prototype method to scope - parentGet = attrs.hasOwnProperty(attrName) ? $parse(attrs[attrName]) : noop; - - // Don't assign noop to destination if expression is not valid - if (parentGet === noop && optional) break; - - destination[scopeName] = function(locals) { - return parentGet(scope, locals); - }; - break; - } - }); - - function recordChanges(key, currentValue, previousValue) { - if (isFunction(destination.$onChanges) && !simpleCompare(currentValue, previousValue)) { - // If we have not already scheduled the top level onChangesQueue handler then do so now - if (!onChangesQueue) { - scope.$$postDigest(flushOnChangesQueue); - onChangesQueue = []; - } - // If we have not already queued a trigger of onChanges for this controller then do so now - if (!changes) { - changes = {}; - onChangesQueue.push(triggerOnChangesHook); - } - // If the has been a change on this property already then we need to reuse the previous value - if (changes[key]) { - previousValue = changes[key].previousValue; - } - // Store this change - changes[key] = new SimpleChange(previousValue, currentValue); - } - } - - function triggerOnChangesHook() { - destination.$onChanges(changes); - // Now clear the changes so that we schedule onChanges when more changes arrive - changes = undefined; - } - - return { - initialChanges: initialChanges, - removeWatches: removeWatchCollection.length && function removeWatches() { - for (var i = 0, ii = removeWatchCollection.length; i < ii; ++i) { - removeWatchCollection[i](); - } - } - }; - } - }]; -} - -function SimpleChange(previous, current) { - this.previousValue = previous; - this.currentValue = current; -} -SimpleChange.prototype.isFirstChange = function() { return this.previousValue === _UNINITIALIZED_VALUE; }; - - -var PREFIX_REGEXP = /^((?:x|data)[:\-_])/i; -var SPECIAL_CHARS_REGEXP = /[:\-_]+(.)/g; - -/** - * Converts all accepted directives format into proper directive name. - * @param name Name to normalize - */ -function directiveNormalize(name) { - return name - .replace(PREFIX_REGEXP, '') - .replace(SPECIAL_CHARS_REGEXP, function(_, letter, offset) { - return offset ? letter.toUpperCase() : letter; - }); -} - -/** - * @ngdoc type - * @name $compile.directive.Attributes - * - * @description - * A shared object between directive compile / linking functions which contains normalized DOM - * element attributes. The values reflect current binding state `{{ }}`. The normalization is - * needed since all of these are treated as equivalent in AngularJS: - * - * ``` - * - * ``` - */ - -/** - * @ngdoc property - * @name $compile.directive.Attributes#$attr - * - * @description - * A map of DOM element attribute names to the normalized name. This is - * needed to do reverse lookup from normalized name back to actual name. - */ - - -/** - * @ngdoc method - * @name $compile.directive.Attributes#$set - * @kind function - * - * @description - * Set DOM element attribute value. - * - * - * @param {string} name Normalized element attribute name of the property to modify. The name is - * reverse-translated using the {@link ng.$compile.directive.Attributes#$attr $attr} - * property to the original name. - * @param {string} value Value to set the attribute to. The value can be an interpolated string. - */ - - - -/** - * Closure compiler type information - */ - -function nodesetLinkingFn( - /* angular.Scope */ scope, - /* NodeList */ nodeList, - /* Element */ rootElement, - /* function(Function) */ boundTranscludeFn -) {} - -function directiveLinkingFn( - /* nodesetLinkingFn */ nodesetLinkingFn, - /* angular.Scope */ scope, - /* Node */ node, - /* Element */ rootElement, - /* function(Function) */ boundTranscludeFn -) {} - -function tokenDifference(str1, str2) { - var values = '', - tokens1 = str1.split(/\s+/), - tokens2 = str2.split(/\s+/); - - outer: - for (var i = 0; i < tokens1.length; i++) { - var token = tokens1[i]; - for (var j = 0; j < tokens2.length; j++) { - if (token === tokens2[j]) continue outer; - } - values += (values.length > 0 ? ' ' : '') + token; - } - return values; -} - -function removeComments(jqNodes) { - jqNodes = jqLite(jqNodes); - var i = jqNodes.length; - - if (i <= 1) { - return jqNodes; - } - - while (i--) { - var node = jqNodes[i]; - if (node.nodeType === NODE_TYPE_COMMENT || - (node.nodeType === NODE_TYPE_TEXT && node.nodeValue.trim() === '')) { - splice.call(jqNodes, i, 1); - } - } - return jqNodes; -} - -var $controllerMinErr = minErr('$controller'); - - -var CNTRL_REG = /^(\S+)(\s+as\s+([\w$]+))?$/; -function identifierForController(controller, ident) { - if (ident && isString(ident)) return ident; - if (isString(controller)) { - var match = CNTRL_REG.exec(controller); - if (match) return match[3]; - } -} - - -/** - * @ngdoc provider - * @name $controllerProvider - * @this - * - * @description - * The {@link ng.$controller $controller service} is used by AngularJS to create new - * controllers. - * - * This provider allows controller registration via the - * {@link ng.$controllerProvider#register register} method. - */ -function $ControllerProvider() { - var controllers = {}; - - /** - * @ngdoc method - * @name $controllerProvider#has - * @param {string} name Controller name to check. - */ - this.has = function(name) { - return controllers.hasOwnProperty(name); - }; - - /** - * @ngdoc method - * @name $controllerProvider#register - * @param {string|Object} name Controller name, or an object map of controllers where the keys are - * the names and the values are the constructors. - * @param {Function|Array} constructor Controller constructor fn (optionally decorated with DI - * annotations in the array notation). - */ - this.register = function(name, constructor) { - assertNotHasOwnProperty(name, 'controller'); - if (isObject(name)) { - extend(controllers, name); - } else { - controllers[name] = constructor; - } - }; - - this.$get = ['$injector', function($injector) { - - /** - * @ngdoc service - * @name $controller - * @requires $injector - * - * @param {Function|string} constructor If called with a function then it's considered to be the - * controller constructor function. Otherwise it's considered to be a string which is used - * to retrieve the controller constructor using the following steps: - * - * * check if a controller with given name is registered via `$controllerProvider` - * * check if evaluating the string on the current scope returns a constructor - * - * The string can use the `controller as property` syntax, where the controller instance is published - * as the specified property on the `scope`; the `scope` must be injected into `locals` param for this - * to work correctly. - * - * @param {Object} locals Injection locals for Controller. - * @return {Object} Instance of given controller. - * - * @description - * `$controller` service is responsible for instantiating controllers. - * - * It's just a simple call to {@link auto.$injector $injector}, but extracted into - * a service, so that one can override this service with [BC version](https://gist.github.com/1649788). - */ - return function $controller(expression, locals, later, ident) { - // PRIVATE API: - // param `later` --- indicates that the controller's constructor is invoked at a later time. - // If true, $controller will allocate the object with the correct - // prototype chain, but will not invoke the controller until a returned - // callback is invoked. - // param `ident` --- An optional label which overrides the label parsed from the controller - // expression, if any. - var instance, match, constructor, identifier; - later = later === true; - if (ident && isString(ident)) { - identifier = ident; - } - - if (isString(expression)) { - match = expression.match(CNTRL_REG); - if (!match) { - throw $controllerMinErr('ctrlfmt', - 'Badly formed controller string \'{0}\'. ' + - 'Must match `__name__ as __id__` or `__name__`.', expression); - } - constructor = match[1]; - identifier = identifier || match[3]; - expression = controllers.hasOwnProperty(constructor) - ? controllers[constructor] - : getter(locals.$scope, constructor, true); - - if (!expression) { - throw $controllerMinErr('ctrlreg', - 'The controller with the name \'{0}\' is not registered.', constructor); - } - - assertArgFn(expression, constructor, true); - } - - if (later) { - // Instantiate controller later: - // This machinery is used to create an instance of the object before calling the - // controller's constructor itself. - // - // This allows properties to be added to the controller before the constructor is - // invoked. Primarily, this is used for isolate scope bindings in $compile. - // - // This feature is not intended for use by applications, and is thus not documented - // publicly. - // Object creation: http://jsperf.com/create-constructor/2 - var controllerPrototype = (isArray(expression) ? - expression[expression.length - 1] : expression).prototype; - instance = Object.create(controllerPrototype || null); - - if (identifier) { - addIdentifier(locals, identifier, instance, constructor || expression.name); - } - - return extend(function $controllerInit() { - var result = $injector.invoke(expression, instance, locals, constructor); - if (result !== instance && (isObject(result) || isFunction(result))) { - instance = result; - if (identifier) { - // If result changed, re-assign controllerAs value to scope. - addIdentifier(locals, identifier, instance, constructor || expression.name); - } - } - return instance; - }, { - instance: instance, - identifier: identifier - }); - } - - instance = $injector.instantiate(expression, locals, constructor); - - if (identifier) { - addIdentifier(locals, identifier, instance, constructor || expression.name); - } - - return instance; - }; - - function addIdentifier(locals, identifier, instance, name) { - if (!(locals && isObject(locals.$scope))) { - throw minErr('$controller')('noscp', - 'Cannot export controller \'{0}\' as \'{1}\'! No $scope object provided via `locals`.', - name, identifier); - } - - locals.$scope[identifier] = instance; - } - }]; -} - -/** - * @ngdoc service - * @name $document - * @requires $window - * @this - * - * @description - * A {@link angular.element jQuery or jqLite} wrapper for the browser's `window.document` object. - * - * @example - - -
-

$document title:

-

window.document title:

-
-
- - angular.module('documentExample', []) - .controller('ExampleController', ['$scope', '$document', function($scope, $document) { - $scope.title = $document[0].title; - $scope.windowTitle = angular.element(window.document)[0].title; - }]); - -
- */ -function $DocumentProvider() { - this.$get = ['$window', function(window) { - return jqLite(window.document); - }]; -} - - -/** - * @private - * @this - * Listens for document visibility change and makes the current status accessible. - */ -function $$IsDocumentHiddenProvider() { - this.$get = ['$document', '$rootScope', function($document, $rootScope) { - var doc = $document[0]; - var hidden = doc && doc.hidden; - - $document.on('visibilitychange', changeListener); - - $rootScope.$on('$destroy', function() { - $document.off('visibilitychange', changeListener); - }); - - function changeListener() { - hidden = doc.hidden; - } - - return function() { - return hidden; - }; - }]; -} - -/** - * @ngdoc service - * @name $exceptionHandler - * @requires ng.$log - * @this - * - * @description - * Any uncaught exception in AngularJS expressions is delegated to this service. - * The default implementation simply delegates to `$log.error` which logs it into - * the browser console. - * - * In unit tests, if `angular-mocks.js` is loaded, this service is overridden by - * {@link ngMock.$exceptionHandler mock $exceptionHandler} which aids in testing. - * - * ## Example: - * - * The example below will overwrite the default `$exceptionHandler` in order to (a) log uncaught - * errors to the backend for later inspection by the developers and (b) to use `$log.warn()` instead - * of `$log.error()`. - * - * ```js - * angular. - * module('exceptionOverwrite', []). - * factory('$exceptionHandler', ['$log', 'logErrorsToBackend', function($log, logErrorsToBackend) { - * return function myExceptionHandler(exception, cause) { - * logErrorsToBackend(exception, cause); - * $log.warn(exception, cause); - * }; - * }]); - * ``` - * - *
- * Note, that code executed in event-listeners (even those registered using jqLite's `on`/`bind` - * methods) does not delegate exceptions to the {@link ng.$exceptionHandler $exceptionHandler} - * (unless executed during a digest). - * - * If you wish, you can manually delegate exceptions, e.g. - * `try { ... } catch(e) { $exceptionHandler(e); }` - * - * @param {Error} exception Exception associated with the error. - * @param {string=} cause Optional information about the context in which - * the error was thrown. - * - */ -function $ExceptionHandlerProvider() { - this.$get = ['$log', function($log) { - return function(exception, cause) { - $log.error.apply($log, arguments); - }; - }]; -} - -var $$ForceReflowProvider = /** @this */ function() { - this.$get = ['$document', function($document) { - return function(domNode) { - //the line below will force the browser to perform a repaint so - //that all the animated elements within the animation frame will - //be properly updated and drawn on screen. This is required to - //ensure that the preparation animation is properly flushed so that - //the active state picks up from there. DO NOT REMOVE THIS LINE. - //DO NOT OPTIMIZE THIS LINE. THE MINIFIER WILL REMOVE IT OTHERWISE WHICH - //WILL RESULT IN AN UNPREDICTABLE BUG THAT IS VERY HARD TO TRACK DOWN AND - //WILL TAKE YEARS AWAY FROM YOUR LIFE. - if (domNode) { - if (!domNode.nodeType && domNode instanceof jqLite) { - domNode = domNode[0]; - } - } else { - domNode = $document[0].body; - } - return domNode.offsetWidth + 1; - }; - }]; -}; - -var APPLICATION_JSON = 'application/json'; -var CONTENT_TYPE_APPLICATION_JSON = {'Content-Type': APPLICATION_JSON + ';charset=utf-8'}; -var JSON_START = /^\[|^\{(?!\{)/; -var JSON_ENDS = { - '[': /]$/, - '{': /}$/ -}; -var JSON_PROTECTION_PREFIX = /^\)]\}',?\n/; -var $httpMinErr = minErr('$http'); - -function serializeValue(v) { - if (isObject(v)) { - return isDate(v) ? v.toISOString() : toJson(v); - } - return v; -} - - -/** @this */ -function $HttpParamSerializerProvider() { - /** - * @ngdoc service - * @name $httpParamSerializer - * @description - * - * Default {@link $http `$http`} params serializer that converts objects to strings - * according to the following rules: - * - * * `{'foo': 'bar'}` results in `foo=bar` - * * `{'foo': Date.now()}` results in `foo=2015-04-01T09%3A50%3A49.262Z` (`toISOString()` and encoded representation of a Date object) - * * `{'foo': ['bar', 'baz']}` results in `foo=bar&foo=baz` (repeated key for each array element) - * * `{'foo': {'bar':'baz'}}` results in `foo=%7B%22bar%22%3A%22baz%22%7D` (stringified and encoded representation of an object) - * - * Note that serializer will sort the request parameters alphabetically. - */ - - this.$get = function() { - return function ngParamSerializer(params) { - if (!params) return ''; - var parts = []; - forEachSorted(params, function(value, key) { - if (value === null || isUndefined(value) || isFunction(value)) return; - if (isArray(value)) { - forEach(value, function(v) { - parts.push(encodeUriQuery(key) + '=' + encodeUriQuery(serializeValue(v))); - }); - } else { - parts.push(encodeUriQuery(key) + '=' + encodeUriQuery(serializeValue(value))); - } - }); - - return parts.join('&'); - }; - }; -} - -/** @this */ -function $HttpParamSerializerJQLikeProvider() { - /** - * @ngdoc service - * @name $httpParamSerializerJQLike - * - * @description - * - * Alternative {@link $http `$http`} params serializer that follows - * jQuery's [`param()`](http://api.jquery.com/jquery.param/) method logic. - * The serializer will also sort the params alphabetically. - * - * To use it for serializing `$http` request parameters, set it as the `paramSerializer` property: - * - * ```js - * $http({ - * url: myUrl, - * method: 'GET', - * params: myParams, - * paramSerializer: '$httpParamSerializerJQLike' - * }); - * ``` - * - * It is also possible to set it as the default `paramSerializer` in the - * {@link $httpProvider#defaults `$httpProvider`}. - * - * Additionally, you can inject the serializer and use it explicitly, for example to serialize - * form data for submission: - * - * ```js - * .controller(function($http, $httpParamSerializerJQLike) { - * //... - * - * $http({ - * url: myUrl, - * method: 'POST', - * data: $httpParamSerializerJQLike(myData), - * headers: { - * 'Content-Type': 'application/x-www-form-urlencoded' - * } - * }); - * - * }); - * ``` - * - */ - this.$get = function() { - return function jQueryLikeParamSerializer(params) { - if (!params) return ''; - var parts = []; - serialize(params, '', true); - return parts.join('&'); - - function serialize(toSerialize, prefix, topLevel) { - if (isArray(toSerialize)) { - forEach(toSerialize, function(value, index) { - serialize(value, prefix + '[' + (isObject(value) ? index : '') + ']'); - }); - } else if (isObject(toSerialize) && !isDate(toSerialize)) { - forEachSorted(toSerialize, function(value, key) { - serialize(value, prefix + - (topLevel ? '' : '[') + - key + - (topLevel ? '' : ']')); - }); - } else { - if (isFunction(toSerialize)) { - toSerialize = toSerialize(); - } - parts.push(encodeUriQuery(prefix) + '=' + - (toSerialize == null ? '' : encodeUriQuery(serializeValue(toSerialize)))); - } - } - }; - }; -} - -function defaultHttpResponseTransform(data, headers) { - if (isString(data)) { - // Strip json vulnerability protection prefix and trim whitespace - var tempData = data.replace(JSON_PROTECTION_PREFIX, '').trim(); - - if (tempData) { - var contentType = headers('Content-Type'); - var hasJsonContentType = contentType && (contentType.indexOf(APPLICATION_JSON) === 0); - - if (hasJsonContentType || isJsonLike(tempData)) { - try { - data = fromJson(tempData); - } catch (e) { - if (!hasJsonContentType) { - return data; - } - throw $httpMinErr('baddata', 'Data must be a valid JSON object. Received: "{0}". ' + - 'Parse error: "{1}"', data, e); - } - } - } - } - - return data; -} - -function isJsonLike(str) { - var jsonStart = str.match(JSON_START); - return jsonStart && JSON_ENDS[jsonStart[0]].test(str); -} - -/** - * Parse headers into key value object - * - * @param {string} headers Raw headers as a string - * @returns {Object} Parsed headers as key value object - */ -function parseHeaders(headers) { - var parsed = createMap(), i; - - function fillInParsed(key, val) { - if (key) { - parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val; - } - } - - if (isString(headers)) { - forEach(headers.split('\n'), function(line) { - i = line.indexOf(':'); - fillInParsed(lowercase(trim(line.substr(0, i))), trim(line.substr(i + 1))); - }); - } else if (isObject(headers)) { - forEach(headers, function(headerVal, headerKey) { - fillInParsed(lowercase(headerKey), trim(headerVal)); - }); - } - - return parsed; -} - - -/** - * Returns a function that provides access to parsed headers. - * - * Headers are lazy parsed when first requested. - * @see parseHeaders - * - * @param {(string|Object)} headers Headers to provide access to. - * @returns {function(string=)} Returns a getter function which if called with: - * - * - if called with an argument returns a single header value or null - * - if called with no arguments returns an object containing all headers. - */ -function headersGetter(headers) { - var headersObj; - - return function(name) { - if (!headersObj) headersObj = parseHeaders(headers); - - if (name) { - var value = headersObj[lowercase(name)]; - if (value === undefined) { - value = null; - } - return value; - } - - return headersObj; - }; -} - - -/** - * Chain all given functions - * - * This function is used for both request and response transforming - * - * @param {*} data Data to transform. - * @param {function(string=)} headers HTTP headers getter fn. - * @param {number} status HTTP status code of the response. - * @param {(Function|Array.)} fns Function or an array of functions. - * @returns {*} Transformed data. - */ -function transformData(data, headers, status, fns) { - if (isFunction(fns)) { - return fns(data, headers, status); - } - - forEach(fns, function(fn) { - data = fn(data, headers, status); - }); - - return data; -} - - -function isSuccess(status) { - return 200 <= status && status < 300; -} - - -/** - * @ngdoc provider - * @name $httpProvider - * @this - * - * @description - * Use `$httpProvider` to change the default behavior of the {@link ng.$http $http} service. - */ -function $HttpProvider() { - /** - * @ngdoc property - * @name $httpProvider#defaults - * @description - * - * Object containing default values for all {@link ng.$http $http} requests. - * - * - **`defaults.cache`** - {boolean|Object} - A boolean value or object created with - * {@link ng.$cacheFactory `$cacheFactory`} to enable or disable caching of HTTP responses - * by default. See {@link $http#caching $http Caching} for more information. - * - * - **`defaults.headers`** - {Object} - Default headers for all $http requests. - * Refer to {@link ng.$http#setting-http-headers $http} for documentation on - * setting default headers. - * - **`defaults.headers.common`** - * - **`defaults.headers.post`** - * - **`defaults.headers.put`** - * - **`defaults.headers.patch`** - * - * - **`defaults.jsonpCallbackParam`** - `{string}` - the name of the query parameter that passes the name of the - * callback in a JSONP request. The value of this parameter will be replaced with the expression generated by the - * {@link $jsonpCallbacks} service. Defaults to `'callback'`. - * - * - **`defaults.paramSerializer`** - `{string|function(Object):string}` - A function - * used to the prepare string representation of request parameters (specified as an object). - * If specified as string, it is interpreted as a function registered with the {@link auto.$injector $injector}. - * Defaults to {@link ng.$httpParamSerializer $httpParamSerializer}. - * - * - **`defaults.transformRequest`** - - * `{Array|function(data, headersGetter)}` - - * An array of functions (or a single function) which are applied to the request data. - * By default, this is an array with one request transformation function: - * - * - If the `data` property of the request configuration object contains an object, serialize it - * into JSON format. - * - * - **`defaults.transformResponse`** - - * `{Array|function(data, headersGetter, status)}` - - * An array of functions (or a single function) which are applied to the response data. By default, - * this is an array which applies one response transformation function that does two things: - * - * - If XSRF prefix is detected, strip it - * (see {@link ng.$http#security-considerations Security Considerations in the $http docs}). - * - If the `Content-Type` is `application/json` or the response looks like JSON, - * deserialize it using a JSON parser. - * - * - **`defaults.xsrfCookieName`** - {string} - Name of cookie containing the XSRF token. - * Defaults value is `'XSRF-TOKEN'`. - * - * - **`defaults.xsrfHeaderName`** - {string} - Name of HTTP header to populate with the - * XSRF token. Defaults value is `'X-XSRF-TOKEN'`. - * - */ - var defaults = this.defaults = { - // transform incoming response data - transformResponse: [defaultHttpResponseTransform], - - // transform outgoing request data - transformRequest: [function(d) { - return isObject(d) && !isFile(d) && !isBlob(d) && !isFormData(d) ? toJson(d) : d; - }], - - // default headers - headers: { - common: { - 'Accept': 'application/json, text/plain, */*' - }, - post: shallowCopy(CONTENT_TYPE_APPLICATION_JSON), - put: shallowCopy(CONTENT_TYPE_APPLICATION_JSON), - patch: shallowCopy(CONTENT_TYPE_APPLICATION_JSON) - }, - - xsrfCookieName: 'XSRF-TOKEN', - xsrfHeaderName: 'X-XSRF-TOKEN', - - paramSerializer: '$httpParamSerializer', - - jsonpCallbackParam: 'callback' - }; - - var useApplyAsync = false; - /** - * @ngdoc method - * @name $httpProvider#useApplyAsync - * @description - * - * Configure $http service to combine processing of multiple http responses received at around - * the same time via {@link ng.$rootScope.Scope#$applyAsync $rootScope.$applyAsync}. This can result in - * significant performance improvement for bigger applications that make many HTTP requests - * concurrently (common during application bootstrap). - * - * Defaults to false. If no value is specified, returns the current configured value. - * - * @param {boolean=} value If true, when requests are loaded, they will schedule a deferred - * "apply" on the next tick, giving time for subsequent requests in a roughly ~10ms window - * to load and share the same digest cycle. - * - * @returns {boolean|Object} If a value is specified, returns the $httpProvider for chaining. - * otherwise, returns the current configured value. - */ - this.useApplyAsync = function(value) { - if (isDefined(value)) { - useApplyAsync = !!value; - return this; - } - return useApplyAsync; - }; - - /** - * @ngdoc property - * @name $httpProvider#interceptors - * @description - * - * Array containing service factories for all synchronous or asynchronous {@link ng.$http $http} - * pre-processing of request or postprocessing of responses. - * - * These service factories are ordered by request, i.e. they are applied in the same order as the - * array, on request, but reverse order, on response. - * - * {@link ng.$http#interceptors Interceptors detailed info} - */ - var interceptorFactories = this.interceptors = []; - - /** - * @ngdoc property - * @name $httpProvider#xsrfWhitelistedOrigins - * @description - * - * Array containing URLs whose origins are trusted to receive the XSRF token. See the - * {@link ng.$http#security-considerations Security Considerations} sections for more details on - * XSRF. - * - * **Note:** An "origin" consists of the [URI scheme](https://en.wikipedia.org/wiki/URI_scheme), - * the [hostname](https://en.wikipedia.org/wiki/Hostname) and the - * [port number](https://en.wikipedia.org/wiki/Port_(computer_networking). For `http:` and - * `https:`, the port number can be omitted if using th default ports (80 and 443 respectively). - * Examples: `http://example.com`, `https://api.example.com:9876` - * - *
- * It is not possible to whitelist specific URLs/paths. The `path`, `query` and `fragment` parts - * of a URL will be ignored. For example, `https://foo.com/path/bar?query=baz#fragment` will be - * treated as `https://foo.com`, meaning that **all** requests to URLs starting with - * `https://foo.com/` will include the XSRF token. - *
- * - * @example - * - * ```js - * // App served from `https://example.com/`. - * angular. - * module('xsrfWhitelistedOriginsExample', []). - * config(['$httpProvider', function($httpProvider) { - * $httpProvider.xsrfWhitelistedOrigins.push('https://api.example.com'); - * }]). - * run(['$http', function($http) { - * // The XSRF token will be sent. - * $http.get('https://api.example.com/preferences').then(...); - * - * // The XSRF token will NOT be sent. - * $http.get('https://stats.example.com/activity').then(...); - * }]); - * ``` - */ - var xsrfWhitelistedOrigins = this.xsrfWhitelistedOrigins = []; - - this.$get = ['$browser', '$httpBackend', '$$cookieReader', '$cacheFactory', '$rootScope', '$q', '$injector', '$sce', - function($browser, $httpBackend, $$cookieReader, $cacheFactory, $rootScope, $q, $injector, $sce) { - - var defaultCache = $cacheFactory('$http'); - - /** - * Make sure that default param serializer is exposed as a function - */ - defaults.paramSerializer = isString(defaults.paramSerializer) ? - $injector.get(defaults.paramSerializer) : defaults.paramSerializer; - - /** - * Interceptors stored in reverse order. Inner interceptors before outer interceptors. - * The reversal is needed so that we can build up the interception chain around the - * server request. - */ - var reversedInterceptors = []; - - forEach(interceptorFactories, function(interceptorFactory) { - reversedInterceptors.unshift(isString(interceptorFactory) - ? $injector.get(interceptorFactory) : $injector.invoke(interceptorFactory)); - }); - - /** - * A function to check request URLs against a list of allowed origins. - */ - var urlIsAllowedOrigin = urlIsAllowedOriginFactory(xsrfWhitelistedOrigins); - - /** - * @ngdoc service - * @kind function - * @name $http - * @requires ng.$httpBackend - * @requires $cacheFactory - * @requires $rootScope - * @requires $q - * @requires $injector - * - * @description - * The `$http` service is a core AngularJS service that facilitates communication with the remote - * HTTP servers via the browser's [XMLHttpRequest](https://developer.mozilla.org/en/xmlhttprequest) - * object or via [JSONP](http://en.wikipedia.org/wiki/JSONP). - * - * For unit testing applications that use `$http` service, see - * {@link ngMock.$httpBackend $httpBackend mock}. - * - * For a higher level of abstraction, please check out the {@link ngResource.$resource - * $resource} service. - * - * The $http API is based on the {@link ng.$q deferred/promise APIs} exposed by - * the $q service. While for simple usage patterns this doesn't matter much, for advanced usage - * it is important to familiarize yourself with these APIs and the guarantees they provide. - * - * - * ## General usage - * The `$http` service is a function which takes a single argument — a {@link $http#usage configuration object} — - * that is used to generate an HTTP request and returns a {@link ng.$q promise} that is - * resolved (request success) or rejected (request failure) with a - * {@link ng.$http#$http-returns response} object. - * - * ```js - * // Simple GET request example: - * $http({ - * method: 'GET', - * url: '/someUrl' - * }).then(function successCallback(response) { - * // this callback will be called asynchronously - * // when the response is available - * }, function errorCallback(response) { - * // called asynchronously if an error occurs - * // or server returns response with an error status. - * }); - * ``` - * - * - * ## Shortcut methods - * - * Shortcut methods are also available. All shortcut methods require passing in the URL, and - * request data must be passed in for POST/PUT requests. An optional config can be passed as the - * last argument. - * - * ```js - * $http.get('/someUrl', config).then(successCallback, errorCallback); - * $http.post('/someUrl', data, config).then(successCallback, errorCallback); - * ``` - * - * Complete list of shortcut methods: - * - * - {@link ng.$http#get $http.get} - * - {@link ng.$http#head $http.head} - * - {@link ng.$http#post $http.post} - * - {@link ng.$http#put $http.put} - * - {@link ng.$http#delete $http.delete} - * - {@link ng.$http#jsonp $http.jsonp} - * - {@link ng.$http#patch $http.patch} - * - * - * ## Writing Unit Tests that use $http - * When unit testing (using {@link ngMock ngMock}), it is necessary to call - * {@link ngMock.$httpBackend#flush $httpBackend.flush()} to flush each pending - * request using trained responses. - * - * ``` - * $httpBackend.expectGET(...); - * $http.get(...); - * $httpBackend.flush(); - * ``` - * - * ## Setting HTTP Headers - * - * The $http service will automatically add certain HTTP headers to all requests. These defaults - * can be fully configured by accessing the `$httpProvider.defaults.headers` configuration - * object, which currently contains this default configuration: - * - * - `$httpProvider.defaults.headers.common` (headers that are common for all requests): - * - Accept: application/json, text/plain, \*/\* - * - `$httpProvider.defaults.headers.post`: (header defaults for POST requests) - * - `Content-Type: application/json` - * - `$httpProvider.defaults.headers.put` (header defaults for PUT requests) - * - `Content-Type: application/json` - * - * To add or overwrite these defaults, simply add or remove a property from these configuration - * objects. To add headers for an HTTP method other than POST or PUT, simply add a new object - * with the lowercased HTTP method name as the key, e.g. - * `$httpProvider.defaults.headers.get = { 'My-Header' : 'value' }`. - * - * The defaults can also be set at runtime via the `$http.defaults` object in the same - * fashion. For example: - * - * ``` - * module.run(function($http) { - * $http.defaults.headers.common.Authorization = 'Basic YmVlcDpib29w'; - * }); - * ``` - * - * In addition, you can supply a `headers` property in the config object passed when - * calling `$http(config)`, which overrides the defaults without changing them globally. - * - * To explicitly remove a header automatically added via $httpProvider.defaults.headers on a per request basis, - * Use the `headers` property, setting the desired header to `undefined`. For example: - * - * ```js - * var req = { - * method: 'POST', - * url: 'http://example.com', - * headers: { - * 'Content-Type': undefined - * }, - * data: { test: 'test' } - * } - * - * $http(req).then(function(){...}, function(){...}); - * ``` - * - * ## Transforming Requests and Responses - * - * Both requests and responses can be transformed using transformation functions: `transformRequest` - * and `transformResponse`. These properties can be a single function that returns - * the transformed value (`function(data, headersGetter, status)`) or an array of such transformation functions, - * which allows you to `push` or `unshift` a new transformation function into the transformation chain. - * - *
- * **Note:** AngularJS does not make a copy of the `data` parameter before it is passed into the `transformRequest` pipeline. - * That means changes to the properties of `data` are not local to the transform function (since Javascript passes objects by reference). - * For example, when calling `$http.get(url, $scope.myObject)`, modifications to the object's properties in a transformRequest - * function will be reflected on the scope and in any templates where the object is data-bound. - * To prevent this, transform functions should have no side-effects. - * If you need to modify properties, it is recommended to make a copy of the data, or create new object to return. - *
- * - * ### Default Transformations - * - * The `$httpProvider` provider and `$http` service expose `defaults.transformRequest` and - * `defaults.transformResponse` properties. If a request does not provide its own transformations - * then these will be applied. - * - * You can augment or replace the default transformations by modifying these properties by adding to or - * replacing the array. - * - * AngularJS provides the following default transformations: - * - * Request transformations (`$httpProvider.defaults.transformRequest` and `$http.defaults.transformRequest`) is - * an array with one function that does the following: - * - * - If the `data` property of the request configuration object contains an object, serialize it - * into JSON format. - * - * Response transformations (`$httpProvider.defaults.transformResponse` and `$http.defaults.transformResponse`) is - * an array with one function that does the following: - * - * - If XSRF prefix is detected, strip it (see Security Considerations section below). - * - If the `Content-Type` is `application/json` or the response looks like JSON, - * deserialize it using a JSON parser. - * - * - * ### Overriding the Default Transformations Per Request - * - * If you wish to override the request/response transformations only for a single request then provide - * `transformRequest` and/or `transformResponse` properties on the configuration object passed - * into `$http`. - * - * Note that if you provide these properties on the config object the default transformations will be - * overwritten. If you wish to augment the default transformations then you must include them in your - * local transformation array. - * - * The following code demonstrates adding a new response transformation to be run after the default response - * transformations have been run. - * - * ```js - * function appendTransform(defaults, transform) { - * - * // We can't guarantee that the default transformation is an array - * defaults = angular.isArray(defaults) ? defaults : [defaults]; - * - * // Append the new transformation to the defaults - * return defaults.concat(transform); - * } - * - * $http({ - * url: '...', - * method: 'GET', - * transformResponse: appendTransform($http.defaults.transformResponse, function(value) { - * return doTransform(value); - * }) - * }); - * ``` - * - * - * ## Caching - * - * {@link ng.$http `$http`} responses are not cached by default. To enable caching, you must - * set the config.cache value or the default cache value to TRUE or to a cache object (created - * with {@link ng.$cacheFactory `$cacheFactory`}). If defined, the value of config.cache takes - * precedence over the default cache value. - * - * In order to: - * * cache all responses - set the default cache value to TRUE or to a cache object - * * cache a specific response - set config.cache value to TRUE or to a cache object - * - * If caching is enabled, but neither the default cache nor config.cache are set to a cache object, - * then the default `$cacheFactory("$http")` object is used. - * - * The default cache value can be set by updating the - * {@link ng.$http#defaults `$http.defaults.cache`} property or the - * {@link $httpProvider#defaults `$httpProvider.defaults.cache`} property. - * - * When caching is enabled, {@link ng.$http `$http`} stores the response from the server using - * the relevant cache object. The next time the same request is made, the response is returned - * from the cache without sending a request to the server. - * - * Take note that: - * - * * Only GET and JSONP requests are cached. - * * The cache key is the request URL including search parameters; headers are not considered. - * * Cached responses are returned asynchronously, in the same way as responses from the server. - * * If multiple identical requests are made using the same cache, which is not yet populated, - * one request will be made to the server and remaining requests will return the same response. - * * A cache-control header on the response does not affect if or how responses are cached. - * - * - * ## Interceptors - * - * Before you start creating interceptors, be sure to understand the - * {@link ng.$q $q and deferred/promise APIs}. - * - * For purposes of global error handling, authentication, or any kind of synchronous or - * asynchronous pre-processing of request or postprocessing of responses, it is desirable to be - * able to intercept requests before they are handed to the server and - * responses before they are handed over to the application code that - * initiated these requests. The interceptors leverage the {@link ng.$q - * promise APIs} to fulfill this need for both synchronous and asynchronous pre-processing. - * - * The interceptors are service factories that are registered with the `$httpProvider` by - * adding them to the `$httpProvider.interceptors` array. The factory is called and - * injected with dependencies (if specified) and returns the interceptor. - * - * There are two kinds of interceptors (and two kinds of rejection interceptors): - * - * * `request`: interceptors get called with a http {@link $http#usage config} object. The function is free to - * modify the `config` object or create a new one. The function needs to return the `config` - * object directly, or a promise containing the `config` or a new `config` object. - * * `requestError`: interceptor gets called when a previous interceptor threw an error or - * resolved with a rejection. - * * `response`: interceptors get called with http `response` object. The function is free to - * modify the `response` object or create a new one. The function needs to return the `response` - * object directly, or as a promise containing the `response` or a new `response` object. - * * `responseError`: interceptor gets called when a previous interceptor threw an error or - * resolved with a rejection. - * - * - * ```js - * // register the interceptor as a service - * $provide.factory('myHttpInterceptor', function($q, dependency1, dependency2) { - * return { - * // optional method - * 'request': function(config) { - * // do something on success - * return config; - * }, - * - * // optional method - * 'requestError': function(rejection) { - * // do something on error - * if (canRecover(rejection)) { - * return responseOrNewPromise - * } - * return $q.reject(rejection); - * }, - * - * - * - * // optional method - * 'response': function(response) { - * // do something on success - * return response; - * }, - * - * // optional method - * 'responseError': function(rejection) { - * // do something on error - * if (canRecover(rejection)) { - * return responseOrNewPromise - * } - * return $q.reject(rejection); - * } - * }; - * }); - * - * $httpProvider.interceptors.push('myHttpInterceptor'); - * - * - * // alternatively, register the interceptor via an anonymous factory - * $httpProvider.interceptors.push(function($q, dependency1, dependency2) { - * return { - * 'request': function(config) { - * // same as above - * }, - * - * 'response': function(response) { - * // same as above - * } - * }; - * }); - * ``` - * - * ## Security Considerations - * - * When designing web applications, consider security threats from: - * - * - [JSON vulnerability](http://haacked.com/archive/2008/11/20/anatomy-of-a-subtle-json-vulnerability.aspx) - * - [XSRF](http://en.wikipedia.org/wiki/Cross-site_request_forgery) - * - * Both server and the client must cooperate in order to eliminate these threats. AngularJS comes - * pre-configured with strategies that address these issues, but for this to work backend server - * cooperation is required. - * - * ### JSON Vulnerability Protection - * - * A [JSON vulnerability](http://haacked.com/archive/2008/11/20/anatomy-of-a-subtle-json-vulnerability.aspx) - * allows third party website to turn your JSON resource URL into - * [JSONP](http://en.wikipedia.org/wiki/JSONP) request under some conditions. To - * counter this your server can prefix all JSON requests with following string `")]}',\n"`. - * AngularJS will automatically strip the prefix before processing it as JSON. - * - * For example if your server needs to return: - * ```js - * ['one','two'] - * ``` - * - * which is vulnerable to attack, your server can return: - * ```js - * )]}', - * ['one','two'] - * ``` - * - * AngularJS will strip the prefix, before processing the JSON. - * - * - * ### Cross Site Request Forgery (XSRF) Protection - * - * [XSRF](http://en.wikipedia.org/wiki/Cross-site_request_forgery) is an attack technique by - * which the attacker can trick an authenticated user into unknowingly executing actions on your - * website. AngularJS provides a mechanism to counter XSRF. When performing XHR requests, the - * $http service reads a token from a cookie (by default, `XSRF-TOKEN`) and sets it as an HTTP - * header (by default `X-XSRF-TOKEN`). Since only JavaScript that runs on your domain could read - * the cookie, your server can be assured that the XHR came from JavaScript running on your - * domain. - * - * To take advantage of this, your server needs to set a token in a JavaScript readable session - * cookie called `XSRF-TOKEN` on the first HTTP GET request. On subsequent XHR requests the - * server can verify that the cookie matches the `X-XSRF-TOKEN` HTTP header, and therefore be - * sure that only JavaScript running on your domain could have sent the request. The token must - * be unique for each user and must be verifiable by the server (to prevent the JavaScript from - * making up its own tokens). We recommend that the token is a digest of your site's - * authentication cookie with a [salt](https://en.wikipedia.org/wiki/Salt_(cryptography)) - * for added security. - * - * The header will — by default — **not** be set for cross-domain requests. This - * prevents unauthorized servers (e.g. malicious or compromised 3rd-party APIs) from gaining - * access to your users' XSRF tokens and exposing them to Cross Site Request Forgery. If you - * want to, you can whitelist additional origins to also receive the XSRF token, by adding them - * to {@link ng.$httpProvider#xsrfWhitelistedOrigins xsrfWhitelistedOrigins}. This might be - * useful, for example, if your application, served from `example.com`, needs to access your API - * at `api.example.com`. - * See {@link ng.$httpProvider#xsrfWhitelistedOrigins $httpProvider.xsrfWhitelistedOrigins} for - * more details. - * - *
- * **Warning**
- * Only whitelist origins that you have control over and make sure you understand the - * implications of doing so. - *
- * - * The name of the cookie and the header can be specified using the `xsrfCookieName` and - * `xsrfHeaderName` properties of either `$httpProvider.defaults` at config-time, - * `$http.defaults` at run-time, or the per-request config object. - * - * In order to prevent collisions in environments where multiple AngularJS apps share the - * same domain or subdomain, we recommend that each application uses a unique cookie name. - * - * - * @param {object} config Object describing the request to be made and how it should be - * processed. The object has following properties: - * - * - **method** – `{string}` – HTTP method (e.g. 'GET', 'POST', etc) - * - **url** – `{string|TrustedObject}` – Absolute or relative URL of the resource that is being requested; - * or an object created by a call to `$sce.trustAsResourceUrl(url)`. - * - **params** – `{Object.}` – Map of strings or objects which will be serialized - * with the `paramSerializer` and appended as GET parameters. - * - **data** – `{string|Object}` – Data to be sent as the request message data. - * - **headers** – `{Object}` – Map of strings or functions which return strings representing - * HTTP headers to send to the server. If the return value of a function is null, the - * header will not be sent. Functions accept a config object as an argument. - * - **eventHandlers** - `{Object}` - Event listeners to be bound to the XMLHttpRequest object. - * To bind events to the XMLHttpRequest upload object, use `uploadEventHandlers`. - * The handler will be called in the context of a `$apply` block. - * - **uploadEventHandlers** - `{Object}` - Event listeners to be bound to the XMLHttpRequest upload - * object. To bind events to the XMLHttpRequest object, use `eventHandlers`. - * The handler will be called in the context of a `$apply` block. - * - **xsrfHeaderName** – `{string}` – Name of HTTP header to populate with the XSRF token. - * - **xsrfCookieName** – `{string}` – Name of cookie containing the XSRF token. - * - **transformRequest** – - * `{function(data, headersGetter)|Array.}` – - * transform function or an array of such functions. The transform function takes the http - * request body and headers and returns its transformed (typically serialized) version. - * See {@link ng.$http#overriding-the-default-transformations-per-request - * Overriding the Default Transformations} - * - **transformResponse** – - * `{function(data, headersGetter, status)|Array.}` – - * transform function or an array of such functions. The transform function takes the http - * response body, headers and status and returns its transformed (typically deserialized) version. - * See {@link ng.$http#overriding-the-default-transformations-per-request - * Overriding the Default Transformations} - * - **paramSerializer** - `{string|function(Object):string}` - A function used to - * prepare the string representation of request parameters (specified as an object). - * If specified as string, it is interpreted as function registered with the - * {@link $injector $injector}, which means you can create your own serializer - * by registering it as a {@link auto.$provide#service service}. - * The default serializer is the {@link $httpParamSerializer $httpParamSerializer}; - * alternatively, you can use the {@link $httpParamSerializerJQLike $httpParamSerializerJQLike} - * - **cache** – `{boolean|Object}` – A boolean value or object created with - * {@link ng.$cacheFactory `$cacheFactory`} to enable or disable caching of the HTTP response. - * See {@link $http#caching $http Caching} for more information. - * - **timeout** – `{number|Promise}` – timeout in milliseconds, or {@link ng.$q promise} - * that should abort the request when resolved. - * - * A numerical timeout or a promise returned from {@link ng.$timeout $timeout}, will set - * the `xhrStatus` in the {@link $http#$http-returns response} to "timeout", and any other - * resolved promise will set it to "abort", following standard XMLHttpRequest behavior. - * - * - **withCredentials** - `{boolean}` - whether to set the `withCredentials` flag on the - * XHR object. See [requests with credentials](https://developer.mozilla.org/docs/Web/HTTP/Access_control_CORS#Requests_with_credentials) - * for more information. - * - **responseType** - `{string}` - see - * [XMLHttpRequest.responseType](https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest#xmlhttprequest-responsetype). - * - * @returns {HttpPromise} A {@link ng.$q `Promise}` that will be resolved (request success) - * or rejected (request failure) with a response object. - * - * The response object has these properties: - * - * - **data** – `{string|Object}` – The response body transformed with - * the transform functions. - * - **status** – `{number}` – HTTP status code of the response. - * - **headers** – `{function([headerName])}` – Header getter function. - * - **config** – `{Object}` – The configuration object that was used - * to generate the request. - * - **statusText** – `{string}` – HTTP status text of the response. - * - **xhrStatus** – `{string}` – Status of the XMLHttpRequest - * (`complete`, `error`, `timeout` or `abort`). - * - * - * A response status code between 200 and 299 is considered a success status - * and will result in the success callback being called. Any response status - * code outside of that range is considered an error status and will result - * in the error callback being called. - * Also, status codes less than -1 are normalized to zero. -1 usually means - * the request was aborted, e.g. using a `config.timeout`. More information - * about the status might be available in the `xhrStatus` property. - * - * Note that if the response is a redirect, XMLHttpRequest will transparently - * follow it, meaning that the outcome (success or error) will be determined - * by the final response status code. - * - * - * @property {Array.} pendingRequests Array of config objects for currently pending - * requests. This is primarily meant to be used for debugging purposes. - * - * - * @example - - -
- - -
- - - -
http status code: {{status}}
-
http response data: {{data}}
-
-
- - angular.module('httpExample', []) - .config(['$sceDelegateProvider', function($sceDelegateProvider) { - // We must whitelist the JSONP endpoint that we are using to show that we trust it - $sceDelegateProvider.resourceUrlWhitelist([ - 'self', - 'https://angularjs.org/**' - ]); - }]) - .controller('FetchController', ['$scope', '$http', '$templateCache', - function($scope, $http, $templateCache) { - $scope.method = 'GET'; - $scope.url = 'http-hello.html'; - - $scope.fetch = function() { - $scope.code = null; - $scope.response = null; - - $http({method: $scope.method, url: $scope.url, cache: $templateCache}). - then(function(response) { - $scope.status = response.status; - $scope.data = response.data; - }, function(response) { - $scope.data = response.data || 'Request failed'; - $scope.status = response.status; - }); - }; - - $scope.updateModel = function(method, url) { - $scope.method = method; - $scope.url = url; - }; - }]); - - - Hello, $http! - - - var status = element(by.binding('status')); - var data = element(by.binding('data')); - var fetchBtn = element(by.id('fetchbtn')); - var sampleGetBtn = element(by.id('samplegetbtn')); - var invalidJsonpBtn = element(by.id('invalidjsonpbtn')); - - it('should make an xhr GET request', function() { - sampleGetBtn.click(); - fetchBtn.click(); - expect(status.getText()).toMatch('200'); - expect(data.getText()).toMatch(/Hello, \$http!/); - }); - -// Commented out due to flakes. See https://github.com/angular/angular.js/issues/9185 -// it('should make a JSONP request to angularjs.org', function() { -// var sampleJsonpBtn = element(by.id('samplejsonpbtn')); -// sampleJsonpBtn.click(); -// fetchBtn.click(); -// expect(status.getText()).toMatch('200'); -// expect(data.getText()).toMatch(/Super Hero!/); -// }); - - it('should make JSONP request to invalid URL and invoke the error handler', - function() { - invalidJsonpBtn.click(); - fetchBtn.click(); - expect(status.getText()).toMatch('0'); - expect(data.getText()).toMatch('Request failed'); - }); - -
- */ - function $http(requestConfig) { - - if (!isObject(requestConfig)) { - throw minErr('$http')('badreq', 'Http request configuration must be an object. Received: {0}', requestConfig); - } - - if (!isString($sce.valueOf(requestConfig.url))) { - throw minErr('$http')('badreq', 'Http request configuration url must be a string or a $sce trusted object. Received: {0}', requestConfig.url); - } - - var config = extend({ - method: 'get', - transformRequest: defaults.transformRequest, - transformResponse: defaults.transformResponse, - paramSerializer: defaults.paramSerializer, - jsonpCallbackParam: defaults.jsonpCallbackParam - }, requestConfig); - - config.headers = mergeHeaders(requestConfig); - config.method = uppercase(config.method); - config.paramSerializer = isString(config.paramSerializer) ? - $injector.get(config.paramSerializer) : config.paramSerializer; - - $browser.$$incOutstandingRequestCount('$http'); - - var requestInterceptors = []; - var responseInterceptors = []; - var promise = $q.resolve(config); - - // apply interceptors - forEach(reversedInterceptors, function(interceptor) { - if (interceptor.request || interceptor.requestError) { - requestInterceptors.unshift(interceptor.request, interceptor.requestError); - } - if (interceptor.response || interceptor.responseError) { - responseInterceptors.push(interceptor.response, interceptor.responseError); - } - }); - - promise = chainInterceptors(promise, requestInterceptors); - promise = promise.then(serverRequest); - promise = chainInterceptors(promise, responseInterceptors); - promise = promise.finally(completeOutstandingRequest); - - return promise; - - - function chainInterceptors(promise, interceptors) { - for (var i = 0, ii = interceptors.length; i < ii;) { - var thenFn = interceptors[i++]; - var rejectFn = interceptors[i++]; - - promise = promise.then(thenFn, rejectFn); - } - - interceptors.length = 0; - - return promise; - } - - function completeOutstandingRequest() { - $browser.$$completeOutstandingRequest(noop, '$http'); - } - - function executeHeaderFns(headers, config) { - var headerContent, processedHeaders = {}; - - forEach(headers, function(headerFn, header) { - if (isFunction(headerFn)) { - headerContent = headerFn(config); - if (headerContent != null) { - processedHeaders[header] = headerContent; - } - } else { - processedHeaders[header] = headerFn; - } - }); - - return processedHeaders; - } - - function mergeHeaders(config) { - var defHeaders = defaults.headers, - reqHeaders = extend({}, config.headers), - defHeaderName, lowercaseDefHeaderName, reqHeaderName; - - defHeaders = extend({}, defHeaders.common, defHeaders[lowercase(config.method)]); - - // using for-in instead of forEach to avoid unnecessary iteration after header has been found - defaultHeadersIteration: - for (defHeaderName in defHeaders) { - lowercaseDefHeaderName = lowercase(defHeaderName); - - for (reqHeaderName in reqHeaders) { - if (lowercase(reqHeaderName) === lowercaseDefHeaderName) { - continue defaultHeadersIteration; - } - } - - reqHeaders[defHeaderName] = defHeaders[defHeaderName]; - } - - // execute if header value is a function for merged headers - return executeHeaderFns(reqHeaders, shallowCopy(config)); - } - - function serverRequest(config) { - var headers = config.headers; - var reqData = transformData(config.data, headersGetter(headers), undefined, config.transformRequest); - - // strip content-type if data is undefined - if (isUndefined(reqData)) { - forEach(headers, function(value, header) { - if (lowercase(header) === 'content-type') { - delete headers[header]; - } - }); - } - - if (isUndefined(config.withCredentials) && !isUndefined(defaults.withCredentials)) { - config.withCredentials = defaults.withCredentials; - } - - // send request - return sendReq(config, reqData).then(transformResponse, transformResponse); - } - - function transformResponse(response) { - // make a copy since the response must be cacheable - var resp = extend({}, response); - resp.data = transformData(response.data, response.headers, response.status, - config.transformResponse); - return (isSuccess(response.status)) - ? resp - : $q.reject(resp); - } - } - - $http.pendingRequests = []; - - /** - * @ngdoc method - * @name $http#get - * - * @description - * Shortcut method to perform `GET` request. - * - * @param {string|TrustedObject} url Absolute or relative URL of the resource that is being requested; - * or an object created by a call to `$sce.trustAsResourceUrl(url)`. - * @param {Object=} config Optional configuration object. See {@link ng.$http#$http-arguments `$http()` arguments}. - * @returns {HttpPromise} A Promise that will be resolved or rejected with a response object. - * See {@link ng.$http#$http-returns `$http()` return value}. - */ - - /** - * @ngdoc method - * @name $http#delete - * - * @description - * Shortcut method to perform `DELETE` request. - * - * @param {string|TrustedObject} url Absolute or relative URL of the resource that is being requested; - * or an object created by a call to `$sce.trustAsResourceUrl(url)`. - * @param {Object=} config Optional configuration object. See {@link ng.$http#$http-arguments `$http()` arguments}. - * @returns {HttpPromise} A Promise that will be resolved or rejected with a response object. - * See {@link ng.$http#$http-returns `$http()` return value}. - */ - - /** - * @ngdoc method - * @name $http#head - * - * @description - * Shortcut method to perform `HEAD` request. - * - * @param {string|TrustedObject} url Absolute or relative URL of the resource that is being requested; - * or an object created by a call to `$sce.trustAsResourceUrl(url)`. - * @param {Object=} config Optional configuration object. See {@link ng.$http#$http-arguments `$http()` arguments}. - * @returns {HttpPromise} A Promise that will be resolved or rejected with a response object. - * See {@link ng.$http#$http-returns `$http()` return value}. - */ - - /** - * @ngdoc method - * @name $http#jsonp - * - * @description - * Shortcut method to perform `JSONP` request. - * - * Note that, since JSONP requests are sensitive because the response is given full access to the browser, - * the url must be declared, via {@link $sce} as a trusted resource URL. - * You can trust a URL by adding it to the whitelist via - * {@link $sceDelegateProvider#resourceUrlWhitelist `$sceDelegateProvider.resourceUrlWhitelist`} or - * by explicitly trusting the URL via {@link $sce#trustAsResourceUrl `$sce.trustAsResourceUrl(url)`}. - * - * You should avoid generating the URL for the JSONP request from user provided data. - * Provide additional query parameters via `params` property of the `config` parameter, rather than - * modifying the URL itself. - * - * JSONP requests must specify a callback to be used in the response from the server. This callback - * is passed as a query parameter in the request. You must specify the name of this parameter by - * setting the `jsonpCallbackParam` property on the request config object. - * - * ``` - * $http.jsonp('some/trusted/url', {jsonpCallbackParam: 'callback'}) - * ``` - * - * You can also specify a default callback parameter name in `$http.defaults.jsonpCallbackParam`. - * Initially this is set to `'callback'`. - * - *
- * You can no longer use the `JSON_CALLBACK` string as a placeholder for specifying where the callback - * parameter value should go. - *
- * - * If you would like to customise where and how the callbacks are stored then try overriding - * or decorating the {@link $jsonpCallbacks} service. - * - * @param {string|TrustedObject} url Absolute or relative URL of the resource that is being requested; - * or an object created by a call to `$sce.trustAsResourceUrl(url)`. - * @param {Object=} config Optional configuration object. See {@link ng.$http#$http-arguments `$http()` arguments}. - * @returns {HttpPromise} A Promise that will be resolved or rejected with a response object. - * See {@link ng.$http#$http-returns `$http()` return value}. - */ - createShortMethods('get', 'delete', 'head', 'jsonp'); - - /** - * @ngdoc method - * @name $http#post - * - * @description - * Shortcut method to perform `POST` request. - * - * @param {string} url Relative or absolute URL specifying the destination of the request - * @param {*} data Request content - * @param {Object=} config Optional configuration object. See {@link ng.$http#$http-arguments `$http()` arguments}. - * @returns {HttpPromise} A Promise that will be resolved or rejected with a response object. - * See {@link ng.$http#$http-returns `$http()` return value}. - */ - - /** - * @ngdoc method - * @name $http#put - * - * @description - * Shortcut method to perform `PUT` request. - * - * @param {string} url Relative or absolute URL specifying the destination of the request - * @param {*} data Request content - * @param {Object=} config Optional configuration object. See {@link ng.$http#$http-arguments `$http()` arguments}. - * @returns {HttpPromise} A Promise that will be resolved or rejected with a response object. - * See {@link ng.$http#$http-returns `$http()` return value}. - */ - - /** - * @ngdoc method - * @name $http#patch - * - * @description - * Shortcut method to perform `PATCH` request. - * - * @param {string} url Relative or absolute URL specifying the destination of the request - * @param {*} data Request content - * @param {Object=} config Optional configuration object. See {@link ng.$http#$http-arguments `$http()` arguments}. - * @returns {HttpPromise} A Promise that will be resolved or rejected with a response object. - * See {@link ng.$http#$http-returns `$http()` return value}. - */ - createShortMethodsWithData('post', 'put', 'patch'); - - /** - * @ngdoc property - * @name $http#defaults - * - * @description - * Runtime equivalent of the `$httpProvider.defaults` property. Allows configuration of - * default headers, withCredentials as well as request and response transformations. - * - * See "Setting HTTP Headers" and "Transforming Requests and Responses" sections above. - */ - $http.defaults = defaults; - - - return $http; - - - function createShortMethods(names) { - forEach(arguments, function(name) { - $http[name] = function(url, config) { - return $http(extend({}, config || {}, { - method: name, - url: url - })); - }; - }); - } - - - function createShortMethodsWithData(name) { - forEach(arguments, function(name) { - $http[name] = function(url, data, config) { - return $http(extend({}, config || {}, { - method: name, - url: url, - data: data - })); - }; - }); - } - - - /** - * Makes the request. - * - * !!! ACCESSES CLOSURE VARS: - * $httpBackend, defaults, $log, $rootScope, defaultCache, $http.pendingRequests - */ - function sendReq(config, reqData) { - var deferred = $q.defer(), - promise = deferred.promise, - cache, - cachedResp, - reqHeaders = config.headers, - isJsonp = lowercase(config.method) === 'jsonp', - url = config.url; - - if (isJsonp) { - // JSONP is a pretty sensitive operation where we're allowing a script to have full access to - // our DOM and JS space. So we require that the URL satisfies SCE.RESOURCE_URL. - url = $sce.getTrustedResourceUrl(url); - } else if (!isString(url)) { - // If it is not a string then the URL must be a $sce trusted object - url = $sce.valueOf(url); - } - - url = buildUrl(url, config.paramSerializer(config.params)); - - if (isJsonp) { - // Check the url and add the JSONP callback placeholder - url = sanitizeJsonpCallbackParam(url, config.jsonpCallbackParam); - } - - $http.pendingRequests.push(config); - promise.then(removePendingReq, removePendingReq); - - if ((config.cache || defaults.cache) && config.cache !== false && - (config.method === 'GET' || config.method === 'JSONP')) { - cache = isObject(config.cache) ? config.cache - : isObject(/** @type {?} */ (defaults).cache) - ? /** @type {?} */ (defaults).cache - : defaultCache; - } - - if (cache) { - cachedResp = cache.get(url); - if (isDefined(cachedResp)) { - if (isPromiseLike(cachedResp)) { - // cached request has already been sent, but there is no response yet - cachedResp.then(resolvePromiseWithResult, resolvePromiseWithResult); - } else { - // serving from cache - if (isArray(cachedResp)) { - resolvePromise(cachedResp[1], cachedResp[0], shallowCopy(cachedResp[2]), cachedResp[3], cachedResp[4]); - } else { - resolvePromise(cachedResp, 200, {}, 'OK', 'complete'); - } - } - } else { - // put the promise for the non-transformed response into cache as a placeholder - cache.put(url, promise); - } - } - - - // if we won't have the response in cache, set the xsrf headers and - // send the request to the backend - if (isUndefined(cachedResp)) { - var xsrfValue = urlIsAllowedOrigin(config.url) - ? $$cookieReader()[config.xsrfCookieName || defaults.xsrfCookieName] - : undefined; - if (xsrfValue) { - reqHeaders[(config.xsrfHeaderName || defaults.xsrfHeaderName)] = xsrfValue; - } - - $httpBackend(config.method, url, reqData, done, reqHeaders, config.timeout, - config.withCredentials, config.responseType, - createApplyHandlers(config.eventHandlers), - createApplyHandlers(config.uploadEventHandlers)); - } - - return promise; - - function createApplyHandlers(eventHandlers) { - if (eventHandlers) { - var applyHandlers = {}; - forEach(eventHandlers, function(eventHandler, key) { - applyHandlers[key] = function(event) { - if (useApplyAsync) { - $rootScope.$applyAsync(callEventHandler); - } else if ($rootScope.$$phase) { - callEventHandler(); - } else { - $rootScope.$apply(callEventHandler); - } - - function callEventHandler() { - eventHandler(event); - } - }; - }); - return applyHandlers; - } - } - - - /** - * Callback registered to $httpBackend(): - * - caches the response if desired - * - resolves the raw $http promise - * - calls $apply - */ - function done(status, response, headersString, statusText, xhrStatus) { - if (cache) { - if (isSuccess(status)) { - cache.put(url, [status, response, parseHeaders(headersString), statusText, xhrStatus]); - } else { - // remove promise from the cache - cache.remove(url); - } - } - - function resolveHttpPromise() { - resolvePromise(response, status, headersString, statusText, xhrStatus); - } - - if (useApplyAsync) { - $rootScope.$applyAsync(resolveHttpPromise); - } else { - resolveHttpPromise(); - if (!$rootScope.$$phase) $rootScope.$apply(); - } - } - - - /** - * Resolves the raw $http promise. - */ - function resolvePromise(response, status, headers, statusText, xhrStatus) { - //status: HTTP response status code, 0, -1 (aborted by timeout / promise) - status = status >= -1 ? status : 0; - - (isSuccess(status) ? deferred.resolve : deferred.reject)({ - data: response, - status: status, - headers: headersGetter(headers), - config: config, - statusText: statusText, - xhrStatus: xhrStatus - }); - } - - function resolvePromiseWithResult(result) { - resolvePromise(result.data, result.status, shallowCopy(result.headers()), result.statusText, result.xhrStatus); - } - - function removePendingReq() { - var idx = $http.pendingRequests.indexOf(config); - if (idx !== -1) $http.pendingRequests.splice(idx, 1); - } - } - - - function buildUrl(url, serializedParams) { - if (serializedParams.length > 0) { - url += ((url.indexOf('?') === -1) ? '?' : '&') + serializedParams; - } - return url; - } - - function sanitizeJsonpCallbackParam(url, cbKey) { - var parts = url.split('?'); - if (parts.length > 2) { - // Throw if the url contains more than one `?` query indicator - throw $httpMinErr('badjsonp', 'Illegal use more than one "?", in url, "{1}"', url); - } - var params = parseKeyValue(parts[1]); - forEach(params, function(value, key) { - if (value === 'JSON_CALLBACK') { - // Throw if the url already contains a reference to JSON_CALLBACK - throw $httpMinErr('badjsonp', 'Illegal use of JSON_CALLBACK in url, "{0}"', url); - } - if (key === cbKey) { - // Throw if the callback param was already provided - throw $httpMinErr('badjsonp', 'Illegal use of callback param, "{0}", in url, "{1}"', cbKey, url); - } - }); - - // Add in the JSON_CALLBACK callback param value - url += ((url.indexOf('?') === -1) ? '?' : '&') + cbKey + '=JSON_CALLBACK'; - - return url; - } - }]; -} - -/** - * @ngdoc service - * @name $xhrFactory - * @this - * - * @description - * Factory function used to create XMLHttpRequest objects. - * - * Replace or decorate this service to create your own custom XMLHttpRequest objects. - * - * ``` - * angular.module('myApp', []) - * .factory('$xhrFactory', function() { - * return function createXhr(method, url) { - * return new window.XMLHttpRequest({mozSystem: true}); - * }; - * }); - * ``` - * - * @param {string} method HTTP method of the request (GET, POST, PUT, ..) - * @param {string} url URL of the request. - */ -function $xhrFactoryProvider() { - this.$get = function() { - return function createXhr() { - return new window.XMLHttpRequest(); - }; - }; -} - -/** - * @ngdoc service - * @name $httpBackend - * @requires $jsonpCallbacks - * @requires $document - * @requires $xhrFactory - * @this - * - * @description - * HTTP backend used by the {@link ng.$http service} that delegates to - * XMLHttpRequest object or JSONP and deals with browser incompatibilities. - * - * You should never need to use this service directly, instead use the higher-level abstractions: - * {@link ng.$http $http} or {@link ngResource.$resource $resource}. - * - * During testing this implementation is swapped with {@link ngMock.$httpBackend mock - * $httpBackend} which can be trained with responses. - */ -function $HttpBackendProvider() { - this.$get = ['$browser', '$jsonpCallbacks', '$document', '$xhrFactory', function($browser, $jsonpCallbacks, $document, $xhrFactory) { - return createHttpBackend($browser, $xhrFactory, $browser.defer, $jsonpCallbacks, $document[0]); - }]; -} - -function createHttpBackend($browser, createXhr, $browserDefer, callbacks, rawDocument) { - // TODO(vojta): fix the signature - return function(method, url, post, callback, headers, timeout, withCredentials, responseType, eventHandlers, uploadEventHandlers) { - url = url || $browser.url(); - - if (lowercase(method) === 'jsonp') { - var callbackPath = callbacks.createCallback(url); - var jsonpDone = jsonpReq(url, callbackPath, function(status, text) { - // jsonpReq only ever sets status to 200 (OK), 404 (ERROR) or -1 (WAITING) - var response = (status === 200) && callbacks.getResponse(callbackPath); - completeRequest(callback, status, response, '', text, 'complete'); - callbacks.removeCallback(callbackPath); - }); - } else { - - var xhr = createXhr(method, url); - var abortedByTimeout = false; - - xhr.open(method, url, true); - forEach(headers, function(value, key) { - if (isDefined(value)) { - xhr.setRequestHeader(key, value); - } - }); - - xhr.onload = function requestLoaded() { - var statusText = xhr.statusText || ''; - - // responseText is the old-school way of retrieving response (supported by IE9) - // response/responseType properties were introduced in XHR Level2 spec (supported by IE10) - var response = ('response' in xhr) ? xhr.response : xhr.responseText; - - // normalize IE9 bug (http://bugs.jquery.com/ticket/1450) - var status = xhr.status === 1223 ? 204 : xhr.status; - - // fix status code when it is 0 (0 status is undocumented). - // Occurs when accessing file resources or on Android 4.1 stock browser - // while retrieving files from application cache. - if (status === 0) { - status = response ? 200 : urlResolve(url).protocol === 'file' ? 404 : 0; - } - - completeRequest(callback, - status, - response, - xhr.getAllResponseHeaders(), - statusText, - 'complete'); - }; - - var requestError = function() { - // The response is always empty - // See https://xhr.spec.whatwg.org/#request-error-steps and https://fetch.spec.whatwg.org/#concept-network-error - completeRequest(callback, -1, null, null, '', 'error'); - }; - - var requestAborted = function() { - completeRequest(callback, -1, null, null, '', abortedByTimeout ? 'timeout' : 'abort'); - }; - - var requestTimeout = function() { - // The response is always empty - // See https://xhr.spec.whatwg.org/#request-error-steps and https://fetch.spec.whatwg.org/#concept-network-error - completeRequest(callback, -1, null, null, '', 'timeout'); - }; - - xhr.onerror = requestError; - xhr.ontimeout = requestTimeout; - xhr.onabort = requestAborted; - - forEach(eventHandlers, function(value, key) { - xhr.addEventListener(key, value); - }); - - forEach(uploadEventHandlers, function(value, key) { - xhr.upload.addEventListener(key, value); - }); - - if (withCredentials) { - xhr.withCredentials = true; - } - - if (responseType) { - try { - xhr.responseType = responseType; - } catch (e) { - // WebKit added support for the json responseType value on 09/03/2013 - // https://bugs.webkit.org/show_bug.cgi?id=73648. Versions of Safari prior to 7 are - // known to throw when setting the value "json" as the response type. Other older - // browsers implementing the responseType - // - // The json response type can be ignored if not supported, because JSON payloads are - // parsed on the client-side regardless. - if (responseType !== 'json') { - throw e; - } - } - } - - xhr.send(isUndefined(post) ? null : post); - } - - // Since we are using xhr.abort() when a request times out, we have to set a flag that - // indicates to requestAborted if the request timed out or was aborted. - // - // http.timeout = numerical timeout timeout - // http.timeout = $timeout timeout - // http.timeout = promise abort - // xhr.abort() abort (The xhr object is normally inaccessible, but - // can be exposed with the xhrFactory) - if (timeout > 0) { - var timeoutId = $browserDefer(function() { - timeoutRequest('timeout'); - }, timeout); - } else if (isPromiseLike(timeout)) { - timeout.then(function() { - timeoutRequest(isDefined(timeout.$$timeoutId) ? 'timeout' : 'abort'); - }); - } - - function timeoutRequest(reason) { - abortedByTimeout = reason === 'timeout'; - if (jsonpDone) { - jsonpDone(); - } - if (xhr) { - xhr.abort(); - } - } - - function completeRequest(callback, status, response, headersString, statusText, xhrStatus) { - // cancel timeout and subsequent timeout promise resolution - if (isDefined(timeoutId)) { - $browserDefer.cancel(timeoutId); - } - jsonpDone = xhr = null; - - callback(status, response, headersString, statusText, xhrStatus); - } - }; - - function jsonpReq(url, callbackPath, done) { - url = url.replace('JSON_CALLBACK', callbackPath); - // we can't use jQuery/jqLite here because jQuery does crazy stuff with script elements, e.g.: - // - fetches local scripts via XHR and evals them - // - adds and immediately removes script elements from the document - var script = rawDocument.createElement('script'), callback = null; - script.type = 'text/javascript'; - script.src = url; - script.async = true; - - callback = function(event) { - script.removeEventListener('load', callback); - script.removeEventListener('error', callback); - rawDocument.body.removeChild(script); - script = null; - var status = -1; - var text = 'unknown'; - - if (event) { - if (event.type === 'load' && !callbacks.wasCalled(callbackPath)) { - event = { type: 'error' }; - } - text = event.type; - status = event.type === 'error' ? 404 : 200; - } - - if (done) { - done(status, text); - } - }; - - script.addEventListener('load', callback); - script.addEventListener('error', callback); - rawDocument.body.appendChild(script); - return callback; - } -} - -var $interpolateMinErr = angular.$interpolateMinErr = minErr('$interpolate'); -$interpolateMinErr.throwNoconcat = function(text) { - throw $interpolateMinErr('noconcat', - 'Error while interpolating: {0}\nStrict Contextual Escaping disallows ' + - 'interpolations that concatenate multiple expressions when a trusted value is ' + - 'required. See http://docs.angularjs.org/api/ng.$sce', text); -}; - -$interpolateMinErr.interr = function(text, err) { - return $interpolateMinErr('interr', 'Can\'t interpolate: {0}\n{1}', text, err.toString()); -}; - -/** - * @ngdoc provider - * @name $interpolateProvider - * @this - * - * @description - * - * Used for configuring the interpolation markup. Defaults to `{{` and `}}`. - * - *
- * This feature is sometimes used to mix different markup languages, e.g. to wrap an AngularJS - * template within a Python Jinja template (or any other template language). Mixing templating - * languages is **very dangerous**. The embedding template language will not safely escape AngularJS - * expressions, so any user-controlled values in the template will cause Cross Site Scripting (XSS) - * security bugs! - *
- * - * @example - - - -
- //demo.label// -
-
- - it('should interpolate binding with custom symbols', function() { - expect(element(by.binding('demo.label')).getText()).toBe('This binding is brought you by // interpolation symbols.'); - }); - -
- */ -function $InterpolateProvider() { - var startSymbol = '{{'; - var endSymbol = '}}'; - - /** - * @ngdoc method - * @name $interpolateProvider#startSymbol - * @description - * Symbol to denote start of expression in the interpolated string. Defaults to `{{`. - * - * @param {string=} value new value to set the starting symbol to. - * @returns {string|self} Returns the symbol when used as getter and self if used as setter. - */ - this.startSymbol = function(value) { - if (value) { - startSymbol = value; - return this; - } - return startSymbol; - }; - - /** - * @ngdoc method - * @name $interpolateProvider#endSymbol - * @description - * Symbol to denote the end of expression in the interpolated string. Defaults to `}}`. - * - * @param {string=} value new value to set the ending symbol to. - * @returns {string|self} Returns the symbol when used as getter and self if used as setter. - */ - this.endSymbol = function(value) { - if (value) { - endSymbol = value; - return this; - } - return endSymbol; - }; - - - this.$get = ['$parse', '$exceptionHandler', '$sce', function($parse, $exceptionHandler, $sce) { - var startSymbolLength = startSymbol.length, - endSymbolLength = endSymbol.length, - escapedStartRegexp = new RegExp(startSymbol.replace(/./g, escape), 'g'), - escapedEndRegexp = new RegExp(endSymbol.replace(/./g, escape), 'g'); - - function escape(ch) { - return '\\\\\\' + ch; - } - - function unescapeText(text) { - return text.replace(escapedStartRegexp, startSymbol). - replace(escapedEndRegexp, endSymbol); - } - - // TODO: this is the same as the constantWatchDelegate in parse.js - function constantWatchDelegate(scope, listener, objectEquality, constantInterp) { - var unwatch = scope.$watch(function constantInterpolateWatch(scope) { - unwatch(); - return constantInterp(scope); - }, listener, objectEquality); - return unwatch; - } - - /** - * @ngdoc service - * @name $interpolate - * @kind function - * - * @requires $parse - * @requires $sce - * - * @description - * - * Compiles a string with markup into an interpolation function. This service is used by the - * HTML {@link ng.$compile $compile} service for data binding. See - * {@link ng.$interpolateProvider $interpolateProvider} for configuring the - * interpolation markup. - * - * - * ```js - * var $interpolate = ...; // injected - * var exp = $interpolate('Hello {{name | uppercase}}!'); - * expect(exp({name:'AngularJS'})).toEqual('Hello ANGULARJS!'); - * ``` - * - * `$interpolate` takes an optional fourth argument, `allOrNothing`. If `allOrNothing` is - * `true`, the interpolation function will return `undefined` unless all embedded expressions - * evaluate to a value other than `undefined`. - * - * ```js - * var $interpolate = ...; // injected - * var context = {greeting: 'Hello', name: undefined }; - * - * // default "forgiving" mode - * var exp = $interpolate('{{greeting}} {{name}}!'); - * expect(exp(context)).toEqual('Hello !'); - * - * // "allOrNothing" mode - * exp = $interpolate('{{greeting}} {{name}}!', false, null, true); - * expect(exp(context)).toBeUndefined(); - * context.name = 'AngularJS'; - * expect(exp(context)).toEqual('Hello AngularJS!'); - * ``` - * - * `allOrNothing` is useful for interpolating URLs. `ngSrc` and `ngSrcset` use this behavior. - * - * #### Escaped Interpolation - * $interpolate provides a mechanism for escaping interpolation markers. Start and end markers - * can be escaped by preceding each of their characters with a REVERSE SOLIDUS U+005C (backslash). - * It will be rendered as a regular start/end marker, and will not be interpreted as an expression - * or binding. - * - * This enables web-servers to prevent script injection attacks and defacing attacks, to some - * degree, while also enabling code examples to work without relying on the - * {@link ng.directive:ngNonBindable ngNonBindable} directive. - * - * **For security purposes, it is strongly encouraged that web servers escape user-supplied data, - * replacing angle brackets (<, >) with &lt; and &gt; respectively, and replacing all - * interpolation start/end markers with their escaped counterparts.** - * - * Escaped interpolation markers are only replaced with the actual interpolation markers in rendered - * output when the $interpolate service processes the text. So, for HTML elements interpolated - * by {@link ng.$compile $compile}, or otherwise interpolated with the `mustHaveExpression` parameter - * set to `true`, the interpolated text must contain an unescaped interpolation expression. As such, - * this is typically useful only when user-data is used in rendering a template from the server, or - * when otherwise untrusted data is used by a directive. - * - * - * - *
- *

{{apptitle}}: \{\{ username = "defaced value"; \}\} - *

- *

{{username}} attempts to inject code which will deface the - * application, but fails to accomplish their task, because the server has correctly - * escaped the interpolation start/end markers with REVERSE SOLIDUS U+005C (backslash) - * characters.

- *

Instead, the result of the attempted script injection is visible, and can be removed - * from the database by an administrator.

- *
- *
- *
- * - * @knownIssue - * It is currently not possible for an interpolated expression to contain the interpolation end - * symbol. For example, `{{ '}}' }}` will be incorrectly interpreted as `{{ ' }}` + `' }}`, i.e. - * an interpolated expression consisting of a single-quote (`'`) and the `' }}` string. - * - * @knownIssue - * All directives and components must use the standard `{{` `}}` interpolation symbols - * in their templates. If you change the application interpolation symbols the {@link $compile} - * service will attempt to denormalize the standard symbols to the custom symbols. - * The denormalization process is not clever enough to know not to replace instances of the standard - * symbols where they would not normally be treated as interpolation symbols. For example in the following - * code snippet the closing braces of the literal object will get incorrectly denormalized: - * - * ``` - *
- * ``` - * - * See https://github.com/angular/angular.js/pull/14610#issuecomment-219401099 for more information. - * - * @param {string} text The text with markup to interpolate. - * @param {boolean=} mustHaveExpression if set to true then the interpolation string must have - * embedded expression in order to return an interpolation function. Strings with no - * embedded expression will return null for the interpolation function. - * @param {string=} trustedContext when provided, the returned function passes the interpolated - * result through {@link ng.$sce#getTrusted $sce.getTrusted(interpolatedResult, - * trustedContext)} before returning it. Refer to the {@link ng.$sce $sce} service that - * provides Strict Contextual Escaping for details. - * @param {boolean=} allOrNothing if `true`, then the returned function returns undefined - * unless all embedded expressions evaluate to a value other than `undefined`. - * @returns {function(context)} an interpolation function which is used to compute the - * interpolated string. The function has these parameters: - * - * - `context`: evaluation context for all expressions embedded in the interpolated text - */ - function $interpolate(text, mustHaveExpression, trustedContext, allOrNothing) { - var contextAllowsConcatenation = trustedContext === $sce.URL || trustedContext === $sce.MEDIA_URL; - - // Provide a quick exit and simplified result function for text with no interpolation - if (!text.length || text.indexOf(startSymbol) === -1) { - if (mustHaveExpression) return; - - var unescapedText = unescapeText(text); - if (contextAllowsConcatenation) { - unescapedText = $sce.getTrusted(trustedContext, unescapedText); - } - var constantInterp = valueFn(unescapedText); - constantInterp.exp = text; - constantInterp.expressions = []; - constantInterp.$$watchDelegate = constantWatchDelegate; - - return constantInterp; - } - - allOrNothing = !!allOrNothing; - var startIndex, - endIndex, - index = 0, - expressions = [], - parseFns, - textLength = text.length, - exp, - concat = [], - expressionPositions = [], - singleExpression; - - - while (index < textLength) { - if (((startIndex = text.indexOf(startSymbol, index)) !== -1) && - ((endIndex = text.indexOf(endSymbol, startIndex + startSymbolLength)) !== -1)) { - if (index !== startIndex) { - concat.push(unescapeText(text.substring(index, startIndex))); - } - exp = text.substring(startIndex + startSymbolLength, endIndex); - expressions.push(exp); - index = endIndex + endSymbolLength; - expressionPositions.push(concat.length); - concat.push(''); // Placeholder that will get replaced with the evaluated expression. - } else { - // we did not find an interpolation, so we have to add the remainder to the separators array - if (index !== textLength) { - concat.push(unescapeText(text.substring(index))); - } - break; - } - } - - singleExpression = concat.length === 1 && expressionPositions.length === 1; - // Intercept expression if we need to stringify concatenated inputs, which may be SCE trusted - // objects rather than simple strings - // (we don't modify the expression if the input consists of only a single trusted input) - var interceptor = contextAllowsConcatenation && singleExpression ? undefined : parseStringifyInterceptor; - parseFns = expressions.map(function(exp) { return $parse(exp, interceptor); }); - - // Concatenating expressions makes it hard to reason about whether some combination of - // concatenated values are unsafe to use and could easily lead to XSS. By requiring that a - // single expression be used for some $sce-managed secure contexts (RESOURCE_URLs mostly), - // we ensure that the value that's used is assigned or constructed by some JS code somewhere - // that is more testable or make it obvious that you bound the value to some user controlled - // value. This helps reduce the load when auditing for XSS issues. - - // Note that URL and MEDIA_URL $sce contexts do not need this, since `$sce` can sanitize the values - // passed to it. In that case, `$sce.getTrusted` will be called on either the single expression - // or on the overall concatenated string (losing trusted types used in the mix, by design). - // Both these methods will sanitize plain strings. Also, HTML could be included, but since it's - // only used in srcdoc attributes, this would not be very useful. - - if (!mustHaveExpression || expressions.length) { - var compute = function(values) { - for (var i = 0, ii = expressions.length; i < ii; i++) { - if (allOrNothing && isUndefined(values[i])) return; - concat[expressionPositions[i]] = values[i]; - } - - if (contextAllowsConcatenation) { - // If `singleExpression` then `concat[0]` might be a "trusted" value or `null`, rather than a string - return $sce.getTrusted(trustedContext, singleExpression ? concat[0] : concat.join('')); - } else if (trustedContext && concat.length > 1) { - // This context does not allow more than one part, e.g. expr + string or exp + exp. - $interpolateMinErr.throwNoconcat(text); - } - // In an unprivileged context or only one part: just concatenate and return. - return concat.join(''); - }; - - return extend(function interpolationFn(context) { - var i = 0; - var ii = expressions.length; - var values = new Array(ii); - - try { - for (; i < ii; i++) { - values[i] = parseFns[i](context); - } - - return compute(values); - } catch (err) { - $exceptionHandler($interpolateMinErr.interr(text, err)); - } - - }, { - // all of these properties are undocumented for now - exp: text, //just for compatibility with regular watchers created via $watch - expressions: expressions, - $$watchDelegate: function(scope, listener) { - var lastValue; - return scope.$watchGroup(parseFns, /** @this */ function interpolateFnWatcher(values, oldValues) { - var currValue = compute(values); - listener.call(this, currValue, values !== oldValues ? lastValue : currValue, scope); - lastValue = currValue; - }); - } - }); - } - - function parseStringifyInterceptor(value) { - try { - // In concatenable contexts, getTrusted comes at the end, to avoid sanitizing individual - // parts of a full URL. We don't care about losing the trustedness here. - // In non-concatenable contexts, where there is only one expression, this interceptor is - // not applied to the expression. - value = (trustedContext && !contextAllowsConcatenation) ? - $sce.getTrusted(trustedContext, value) : - $sce.valueOf(value); - return allOrNothing && !isDefined(value) ? value : stringify(value); - } catch (err) { - $exceptionHandler($interpolateMinErr.interr(text, err)); - } - } - } - - - /** - * @ngdoc method - * @name $interpolate#startSymbol - * @description - * Symbol to denote the start of expression in the interpolated string. Defaults to `{{`. - * - * Use {@link ng.$interpolateProvider#startSymbol `$interpolateProvider.startSymbol`} to change - * the symbol. - * - * @returns {string} start symbol. - */ - $interpolate.startSymbol = function() { - return startSymbol; - }; - - - /** - * @ngdoc method - * @name $interpolate#endSymbol - * @description - * Symbol to denote the end of expression in the interpolated string. Defaults to `}}`. - * - * Use {@link ng.$interpolateProvider#endSymbol `$interpolateProvider.endSymbol`} to change - * the symbol. - * - * @returns {string} end symbol. - */ - $interpolate.endSymbol = function() { - return endSymbol; - }; - - return $interpolate; - }]; -} - -var $intervalMinErr = minErr('$interval'); - -/** @this */ -function $IntervalProvider() { - this.$get = ['$$intervalFactory', '$window', - function($$intervalFactory, $window) { - var intervals = {}; - var setIntervalFn = function(tick, delay, deferred) { - var id = $window.setInterval(tick, delay); - intervals[id] = deferred; - return id; - }; - var clearIntervalFn = function(id) { - $window.clearInterval(id); - delete intervals[id]; - }; - - /** - * @ngdoc service - * @name $interval - * - * @description - * AngularJS's wrapper for `window.setInterval`. The `fn` function is executed every `delay` - * milliseconds. - * - * The return value of registering an interval function is a promise. This promise will be - * notified upon each tick of the interval, and will be resolved after `count` iterations, or - * run indefinitely if `count` is not defined. The value of the notification will be the - * number of iterations that have run. - * To cancel an interval, call `$interval.cancel(promise)`. - * - * In tests you can use {@link ngMock.$interval#flush `$interval.flush(millis)`} to - * move forward by `millis` milliseconds and trigger any functions scheduled to run in that - * time. - * - *
- * **Note**: Intervals created by this service must be explicitly destroyed when you are finished - * with them. In particular they are not automatically destroyed when a controller's scope or a - * directive's element are destroyed. - * You should take this into consideration and make sure to always cancel the interval at the - * appropriate moment. See the example below for more details on how and when to do this. - *
- * - * @param {function()} fn A function that should be called repeatedly. If no additional arguments - * are passed (see below), the function is called with the current iteration count. - * @param {number} delay Number of milliseconds between each function call. - * @param {number=} [count=0] Number of times to repeat. If not set, or 0, will repeat - * indefinitely. - * @param {boolean=} [invokeApply=true] If set to `false` skips model dirty checking, otherwise - * will invoke `fn` within the {@link ng.$rootScope.Scope#$apply $apply} block. - * @param {...*=} Pass additional parameters to the executed function. - * @returns {promise} A promise which will be notified on each iteration. It will resolve once all iterations of the interval complete. - * - * @example - * - * - * - * - *
- *
- *
- * Current time is: - *
- * Blood 1 : {{blood_1}} - * Blood 2 : {{blood_2}} - * - * - * - *
- *
- * - *
- *
- */ - var interval = $$intervalFactory(setIntervalFn, clearIntervalFn); - - /** - * @ngdoc method - * @name $interval#cancel - * - * @description - * Cancels a task associated with the `promise`. - * - * @param {Promise=} promise returned by the `$interval` function. - * @returns {boolean} Returns `true` if the task was successfully canceled. - */ - interval.cancel = function(promise) { - if (!promise) return false; - - if (!promise.hasOwnProperty('$$intervalId')) { - throw $intervalMinErr('badprom', - '`$interval.cancel()` called with a promise that was not generated by `$interval()`.'); - } - - if (!intervals.hasOwnProperty(promise.$$intervalId)) return false; - - var id = promise.$$intervalId; - var deferred = intervals[id]; - - // Interval cancels should not report an unhandled promise. - markQExceptionHandled(deferred.promise); - deferred.reject('canceled'); - clearIntervalFn(id); - - return true; - }; - - return interval; - }]; -} - -/** @this */ -function $$IntervalFactoryProvider() { - this.$get = ['$browser', '$q', '$$q', '$rootScope', - function($browser, $q, $$q, $rootScope) { - return function intervalFactory(setIntervalFn, clearIntervalFn) { - return function intervalFn(fn, delay, count, invokeApply) { - var hasParams = arguments.length > 4, - args = hasParams ? sliceArgs(arguments, 4) : [], - iteration = 0, - skipApply = isDefined(invokeApply) && !invokeApply, - deferred = (skipApply ? $$q : $q).defer(), - promise = deferred.promise; - - count = isDefined(count) ? count : 0; - - function callback() { - if (!hasParams) { - fn(iteration); - } else { - fn.apply(null, args); - } - } - - function tick() { - if (skipApply) { - $browser.defer(callback); - } else { - $rootScope.$evalAsync(callback); - } - deferred.notify(iteration++); - - if (count > 0 && iteration >= count) { - deferred.resolve(iteration); - clearIntervalFn(promise.$$intervalId); - } - - if (!skipApply) $rootScope.$apply(); - } - - promise.$$intervalId = setIntervalFn(tick, delay, deferred, skipApply); - - return promise; - }; - }; - }]; -} - -/** - * @ngdoc service - * @name $jsonpCallbacks - * @requires $window - * @description - * This service handles the lifecycle of callbacks to handle JSONP requests. - * Override this service if you wish to customise where the callbacks are stored and - * how they vary compared to the requested url. - */ -var $jsonpCallbacksProvider = /** @this */ function() { - this.$get = function() { - var callbacks = angular.callbacks; - var callbackMap = {}; - - function createCallback(callbackId) { - var callback = function(data) { - callback.data = data; - callback.called = true; - }; - callback.id = callbackId; - return callback; - } - - return { - /** - * @ngdoc method - * @name $jsonpCallbacks#createCallback - * @param {string} url the url of the JSONP request - * @returns {string} the callback path to send to the server as part of the JSONP request - * @description - * {@link $httpBackend} calls this method to create a callback and get hold of the path to the callback - * to pass to the server, which will be used to call the callback with its payload in the JSONP response. - */ - createCallback: function(url) { - var callbackId = '_' + (callbacks.$$counter++).toString(36); - var callbackPath = 'angular.callbacks.' + callbackId; - var callback = createCallback(callbackId); - callbackMap[callbackPath] = callbacks[callbackId] = callback; - return callbackPath; - }, - /** - * @ngdoc method - * @name $jsonpCallbacks#wasCalled - * @param {string} callbackPath the path to the callback that was sent in the JSONP request - * @returns {boolean} whether the callback has been called, as a result of the JSONP response - * @description - * {@link $httpBackend} calls this method to find out whether the JSONP response actually called the - * callback that was passed in the request. - */ - wasCalled: function(callbackPath) { - return callbackMap[callbackPath].called; - }, - /** - * @ngdoc method - * @name $jsonpCallbacks#getResponse - * @param {string} callbackPath the path to the callback that was sent in the JSONP request - * @returns {*} the data received from the response via the registered callback - * @description - * {@link $httpBackend} calls this method to get hold of the data that was provided to the callback - * in the JSONP response. - */ - getResponse: function(callbackPath) { - return callbackMap[callbackPath].data; - }, - /** - * @ngdoc method - * @name $jsonpCallbacks#removeCallback - * @param {string} callbackPath the path to the callback that was sent in the JSONP request - * @description - * {@link $httpBackend} calls this method to remove the callback after the JSONP request has - * completed or timed-out. - */ - removeCallback: function(callbackPath) { - var callback = callbackMap[callbackPath]; - delete callbacks[callback.id]; - delete callbackMap[callbackPath]; - } - }; - }; -}; - -/** - * @ngdoc service - * @name $locale - * - * @description - * $locale service provides localization rules for various AngularJS components. As of right now the - * only public api is: - * - * * `id` – `{string}` – locale id formatted as `languageId-countryId` (e.g. `en-us`) - */ - -/* global stripHash: true */ - -var PATH_MATCH = /^([^?#]*)(\?([^#]*))?(#(.*))?$/, - DEFAULT_PORTS = {'http': 80, 'https': 443, 'ftp': 21}; -var $locationMinErr = minErr('$location'); - - -/** - * Encode path using encodeUriSegment, ignoring forward slashes - * - * @param {string} path Path to encode - * @returns {string} - */ -function encodePath(path) { - var segments = path.split('/'), - i = segments.length; - - while (i--) { - // decode forward slashes to prevent them from being double encoded - segments[i] = encodeUriSegment(segments[i].replace(/%2F/g, '/')); - } - - return segments.join('/'); -} - -function decodePath(path, html5Mode) { - var segments = path.split('/'), - i = segments.length; - - while (i--) { - segments[i] = decodeURIComponent(segments[i]); - if (html5Mode) { - // encode forward slashes to prevent them from being mistaken for path separators - segments[i] = segments[i].replace(/\//g, '%2F'); - } - } - - return segments.join('/'); -} - -function normalizePath(pathValue, searchValue, hashValue) { - var search = toKeyValue(searchValue), - hash = hashValue ? '#' + encodeUriSegment(hashValue) : '', - path = encodePath(pathValue); - - return path + (search ? '?' + search : '') + hash; -} - -function parseAbsoluteUrl(absoluteUrl, locationObj) { - var parsedUrl = urlResolve(absoluteUrl); - - locationObj.$$protocol = parsedUrl.protocol; - locationObj.$$host = parsedUrl.hostname; - locationObj.$$port = toInt(parsedUrl.port) || DEFAULT_PORTS[parsedUrl.protocol] || null; -} - -var DOUBLE_SLASH_REGEX = /^\s*[\\/]{2,}/; -function parseAppUrl(url, locationObj, html5Mode) { - - if (DOUBLE_SLASH_REGEX.test(url)) { - throw $locationMinErr('badpath', 'Invalid url "{0}".', url); - } - - var prefixed = (url.charAt(0) !== '/'); - if (prefixed) { - url = '/' + url; - } - var match = urlResolve(url); - var path = prefixed && match.pathname.charAt(0) === '/' ? match.pathname.substring(1) : match.pathname; - locationObj.$$path = decodePath(path, html5Mode); - locationObj.$$search = parseKeyValue(match.search); - locationObj.$$hash = decodeURIComponent(match.hash); - - // make sure path starts with '/'; - if (locationObj.$$path && locationObj.$$path.charAt(0) !== '/') { - locationObj.$$path = '/' + locationObj.$$path; - } -} - -function startsWith(str, search) { - return str.slice(0, search.length) === search; -} - -/** - * - * @param {string} base - * @param {string} url - * @returns {string} returns text from `url` after `base` or `undefined` if it does not begin with - * the expected string. - */ -function stripBaseUrl(base, url) { - if (startsWith(url, base)) { - return url.substr(base.length); - } -} - -function stripHash(url) { - var index = url.indexOf('#'); - return index === -1 ? url : url.substr(0, index); -} - -function stripFile(url) { - return url.substr(0, stripHash(url).lastIndexOf('/') + 1); -} - -/* return the server only (scheme://host:port) */ -function serverBase(url) { - return url.substring(0, url.indexOf('/', url.indexOf('//') + 2)); -} - - -/** - * LocationHtml5Url represents a URL - * This object is exposed as $location service when HTML5 mode is enabled and supported - * - * @constructor - * @param {string} appBase application base URL - * @param {string} appBaseNoFile application base URL stripped of any filename - * @param {string} basePrefix URL path prefix - */ -function LocationHtml5Url(appBase, appBaseNoFile, basePrefix) { - this.$$html5 = true; - basePrefix = basePrefix || ''; - parseAbsoluteUrl(appBase, this); - - - /** - * Parse given HTML5 (regular) URL string into properties - * @param {string} url HTML5 URL - * @private - */ - this.$$parse = function(url) { - var pathUrl = stripBaseUrl(appBaseNoFile, url); - if (!isString(pathUrl)) { - throw $locationMinErr('ipthprfx', 'Invalid url "{0}", missing path prefix "{1}".', url, - appBaseNoFile); - } - - parseAppUrl(pathUrl, this, true); - - if (!this.$$path) { - this.$$path = '/'; - } - - this.$$compose(); - }; - - this.$$normalizeUrl = function(url) { - return appBaseNoFile + url.substr(1); // first char is always '/' - }; - - this.$$parseLinkUrl = function(url, relHref) { - if (relHref && relHref[0] === '#') { - // special case for links to hash fragments: - // keep the old url and only replace the hash fragment - this.hash(relHref.slice(1)); - return true; - } - var appUrl, prevAppUrl; - var rewrittenUrl; - - - if (isDefined(appUrl = stripBaseUrl(appBase, url))) { - prevAppUrl = appUrl; - if (basePrefix && isDefined(appUrl = stripBaseUrl(basePrefix, appUrl))) { - rewrittenUrl = appBaseNoFile + (stripBaseUrl('/', appUrl) || appUrl); - } else { - rewrittenUrl = appBase + prevAppUrl; - } - } else if (isDefined(appUrl = stripBaseUrl(appBaseNoFile, url))) { - rewrittenUrl = appBaseNoFile + appUrl; - } else if (appBaseNoFile === url + '/') { - rewrittenUrl = appBaseNoFile; - } - if (rewrittenUrl) { - this.$$parse(rewrittenUrl); - } - return !!rewrittenUrl; - }; -} - - -/** - * LocationHashbangUrl represents URL - * This object is exposed as $location service when developer doesn't opt into html5 mode. - * It also serves as the base class for html5 mode fallback on legacy browsers. - * - * @constructor - * @param {string} appBase application base URL - * @param {string} appBaseNoFile application base URL stripped of any filename - * @param {string} hashPrefix hashbang prefix - */ -function LocationHashbangUrl(appBase, appBaseNoFile, hashPrefix) { - - parseAbsoluteUrl(appBase, this); - - - /** - * Parse given hashbang URL into properties - * @param {string} url Hashbang URL - * @private - */ - this.$$parse = function(url) { - var withoutBaseUrl = stripBaseUrl(appBase, url) || stripBaseUrl(appBaseNoFile, url); - var withoutHashUrl; - - if (!isUndefined(withoutBaseUrl) && withoutBaseUrl.charAt(0) === '#') { - - // The rest of the URL starts with a hash so we have - // got either a hashbang path or a plain hash fragment - withoutHashUrl = stripBaseUrl(hashPrefix, withoutBaseUrl); - if (isUndefined(withoutHashUrl)) { - // There was no hashbang prefix so we just have a hash fragment - withoutHashUrl = withoutBaseUrl; - } - - } else { - // There was no hashbang path nor hash fragment: - // If we are in HTML5 mode we use what is left as the path; - // Otherwise we ignore what is left - if (this.$$html5) { - withoutHashUrl = withoutBaseUrl; - } else { - withoutHashUrl = ''; - if (isUndefined(withoutBaseUrl)) { - appBase = url; - /** @type {?} */ (this).replace(); - } - } - } - - parseAppUrl(withoutHashUrl, this, false); - - this.$$path = removeWindowsDriveName(this.$$path, withoutHashUrl, appBase); - - this.$$compose(); - - /* - * In Windows, on an anchor node on documents loaded from - * the filesystem, the browser will return a pathname - * prefixed with the drive name ('/C:/path') when a - * pathname without a drive is set: - * * a.setAttribute('href', '/foo') - * * a.pathname === '/C:/foo' //true - * - * Inside of AngularJS, we're always using pathnames that - * do not include drive names for routing. - */ - function removeWindowsDriveName(path, url, base) { - /* - Matches paths for file protocol on windows, - such as /C:/foo/bar, and captures only /foo/bar. - */ - var windowsFilePathExp = /^\/[A-Z]:(\/.*)/; - - var firstPathSegmentMatch; - - //Get the relative path from the input URL. - if (startsWith(url, base)) { - url = url.replace(base, ''); - } - - // The input URL intentionally contains a first path segment that ends with a colon. - if (windowsFilePathExp.exec(url)) { - return path; - } - - firstPathSegmentMatch = windowsFilePathExp.exec(path); - return firstPathSegmentMatch ? firstPathSegmentMatch[1] : path; - } - }; - - this.$$normalizeUrl = function(url) { - return appBase + (url ? hashPrefix + url : ''); - }; - - this.$$parseLinkUrl = function(url, relHref) { - if (stripHash(appBase) === stripHash(url)) { - this.$$parse(url); - return true; - } - return false; - }; -} - - -/** - * LocationHashbangUrl represents URL - * This object is exposed as $location service when html5 history api is enabled but the browser - * does not support it. - * - * @constructor - * @param {string} appBase application base URL - * @param {string} appBaseNoFile application base URL stripped of any filename - * @param {string} hashPrefix hashbang prefix - */ -function LocationHashbangInHtml5Url(appBase, appBaseNoFile, hashPrefix) { - this.$$html5 = true; - LocationHashbangUrl.apply(this, arguments); - - this.$$parseLinkUrl = function(url, relHref) { - if (relHref && relHref[0] === '#') { - // special case for links to hash fragments: - // keep the old url and only replace the hash fragment - this.hash(relHref.slice(1)); - return true; - } - - var rewrittenUrl; - var appUrl; - - if (appBase === stripHash(url)) { - rewrittenUrl = url; - } else if ((appUrl = stripBaseUrl(appBaseNoFile, url))) { - rewrittenUrl = appBase + hashPrefix + appUrl; - } else if (appBaseNoFile === url + '/') { - rewrittenUrl = appBaseNoFile; - } - if (rewrittenUrl) { - this.$$parse(rewrittenUrl); - } - return !!rewrittenUrl; - }; - - this.$$normalizeUrl = function(url) { - // include hashPrefix in $$absUrl when $$url is empty so IE9 does not reload page because of removal of '#' - return appBase + hashPrefix + url; - }; -} - - -var locationPrototype = { - - /** - * Ensure absolute URL is initialized. - * @private - */ - $$absUrl:'', - - /** - * Are we in html5 mode? - * @private - */ - $$html5: false, - - /** - * Has any change been replacing? - * @private - */ - $$replace: false, - - /** - * Compose url and update `url` and `absUrl` property - * @private - */ - $$compose: function() { - this.$$url = normalizePath(this.$$path, this.$$search, this.$$hash); - this.$$absUrl = this.$$normalizeUrl(this.$$url); - this.$$urlUpdatedByLocation = true; - }, - - /** - * @ngdoc method - * @name $location#absUrl - * - * @description - * This method is getter only. - * - * Return full URL representation with all segments encoded according to rules specified in - * [RFC 3986](http://www.ietf.org/rfc/rfc3986.txt). - * - * - * ```js - * // given URL http://example.com/#/some/path?foo=bar&baz=xoxo - * var absUrl = $location.absUrl(); - * // => "http://example.com/#/some/path?foo=bar&baz=xoxo" - * ``` - * - * @return {string} full URL - */ - absUrl: locationGetter('$$absUrl'), - - /** - * @ngdoc method - * @name $location#url - * - * @description - * This method is getter / setter. - * - * Return URL (e.g. `/path?a=b#hash`) when called without any parameter. - * - * Change path, search and hash, when called with parameter and return `$location`. - * - * - * ```js - * // given URL http://example.com/#/some/path?foo=bar&baz=xoxo - * var url = $location.url(); - * // => "/some/path?foo=bar&baz=xoxo" - * ``` - * - * @param {string=} url New URL without base prefix (e.g. `/path?a=b#hash`) - * @return {string} url - */ - url: function(url) { - if (isUndefined(url)) { - return this.$$url; - } - - var match = PATH_MATCH.exec(url); - if (match[1] || url === '') this.path(decodeURIComponent(match[1])); - if (match[2] || match[1] || url === '') this.search(match[3] || ''); - this.hash(match[5] || ''); - - return this; - }, - - /** - * @ngdoc method - * @name $location#protocol - * - * @description - * This method is getter only. - * - * Return protocol of current URL. - * - * - * ```js - * // given URL http://example.com/#/some/path?foo=bar&baz=xoxo - * var protocol = $location.protocol(); - * // => "http" - * ``` - * - * @return {string} protocol of current URL - */ - protocol: locationGetter('$$protocol'), - - /** - * @ngdoc method - * @name $location#host - * - * @description - * This method is getter only. - * - * Return host of current URL. - * - * Note: compared to the non-AngularJS version `location.host` which returns `hostname:port`, this returns the `hostname` portion only. - * - * - * ```js - * // given URL http://example.com/#/some/path?foo=bar&baz=xoxo - * var host = $location.host(); - * // => "example.com" - * - * // given URL http://user:password@example.com:8080/#/some/path?foo=bar&baz=xoxo - * host = $location.host(); - * // => "example.com" - * host = location.host; - * // => "example.com:8080" - * ``` - * - * @return {string} host of current URL. - */ - host: locationGetter('$$host'), - - /** - * @ngdoc method - * @name $location#port - * - * @description - * This method is getter only. - * - * Return port of current URL. - * - * - * ```js - * // given URL http://example.com/#/some/path?foo=bar&baz=xoxo - * var port = $location.port(); - * // => 80 - * ``` - * - * @return {Number} port - */ - port: locationGetter('$$port'), - - /** - * @ngdoc method - * @name $location#path - * - * @description - * This method is getter / setter. - * - * Return path of current URL when called without any parameter. - * - * Change path when called with parameter and return `$location`. - * - * Note: Path should always begin with forward slash (/), this method will add the forward slash - * if it is missing. - * - * - * ```js - * // given URL http://example.com/#/some/path?foo=bar&baz=xoxo - * var path = $location.path(); - * // => "/some/path" - * ``` - * - * @param {(string|number)=} path New path - * @return {(string|object)} path if called with no parameters, or `$location` if called with a parameter - */ - path: locationGetterSetter('$$path', function(path) { - path = path !== null ? path.toString() : ''; - return path.charAt(0) === '/' ? path : '/' + path; - }), - - /** - * @ngdoc method - * @name $location#search - * - * @description - * This method is getter / setter. - * - * Return search part (as object) of current URL when called without any parameter. - * - * Change search part when called with parameter and return `$location`. - * - * - * ```js - * // given URL http://example.com/#/some/path?foo=bar&baz=xoxo - * var searchObject = $location.search(); - * // => {foo: 'bar', baz: 'xoxo'} - * - * // set foo to 'yipee' - * $location.search('foo', 'yipee'); - * // $location.search() => {foo: 'yipee', baz: 'xoxo'} - * ``` - * - * @param {string|Object.|Object.>} search New search params - string or - * hash object. - * - * When called with a single argument the method acts as a setter, setting the `search` component - * of `$location` to the specified value. - * - * If the argument is a hash object containing an array of values, these values will be encoded - * as duplicate search parameters in the URL. - * - * @param {(string|Number|Array|boolean)=} paramValue If `search` is a string or number, then `paramValue` - * will override only a single search property. - * - * If `paramValue` is an array, it will override the property of the `search` component of - * `$location` specified via the first argument. - * - * If `paramValue` is `null`, the property specified via the first argument will be deleted. - * - * If `paramValue` is `true`, the property specified via the first argument will be added with no - * value nor trailing equal sign. - * - * @return {Object} If called with no arguments returns the parsed `search` object. If called with - * one or more arguments returns `$location` object itself. - */ - search: function(search, paramValue) { - switch (arguments.length) { - case 0: - return this.$$search; - case 1: - if (isString(search) || isNumber(search)) { - search = search.toString(); - this.$$search = parseKeyValue(search); - } else if (isObject(search)) { - search = copy(search, {}); - // remove object undefined or null properties - forEach(search, function(value, key) { - if (value == null) delete search[key]; - }); - - this.$$search = search; - } else { - throw $locationMinErr('isrcharg', - 'The first argument of the `$location#search()` call must be a string or an object.'); - } - break; - default: - if (isUndefined(paramValue) || paramValue === null) { - delete this.$$search[search]; - } else { - this.$$search[search] = paramValue; - } - } - - this.$$compose(); - return this; - }, - - /** - * @ngdoc method - * @name $location#hash - * - * @description - * This method is getter / setter. - * - * Returns the hash fragment when called without any parameters. - * - * Changes the hash fragment when called with a parameter and returns `$location`. - * - * - * ```js - * // given URL http://example.com/#/some/path?foo=bar&baz=xoxo#hashValue - * var hash = $location.hash(); - * // => "hashValue" - * ``` - * - * @param {(string|number)=} hash New hash fragment - * @return {string} hash - */ - hash: locationGetterSetter('$$hash', function(hash) { - return hash !== null ? hash.toString() : ''; - }), - - /** - * @ngdoc method - * @name $location#replace - * - * @description - * If called, all changes to $location during the current `$digest` will replace the current history - * record, instead of adding a new one. - */ - replace: function() { - this.$$replace = true; - return this; - } -}; - -forEach([LocationHashbangInHtml5Url, LocationHashbangUrl, LocationHtml5Url], function(Location) { - Location.prototype = Object.create(locationPrototype); - - /** - * @ngdoc method - * @name $location#state - * - * @description - * This method is getter / setter. - * - * Return the history state object when called without any parameter. - * - * Change the history state object when called with one parameter and return `$location`. - * The state object is later passed to `pushState` or `replaceState`. - * - * NOTE: This method is supported only in HTML5 mode and only in browsers supporting - * the HTML5 History API (i.e. methods `pushState` and `replaceState`). If you need to support - * older browsers (like IE9 or Android < 4.0), don't use this method. - * - * @param {object=} state State object for pushState or replaceState - * @return {object} state - */ - Location.prototype.state = function(state) { - if (!arguments.length) { - return this.$$state; - } - - if (Location !== LocationHtml5Url || !this.$$html5) { - throw $locationMinErr('nostate', 'History API state support is available only ' + - 'in HTML5 mode and only in browsers supporting HTML5 History API'); - } - // The user might modify `stateObject` after invoking `$location.state(stateObject)` - // but we're changing the $$state reference to $browser.state() during the $digest - // so the modification window is narrow. - this.$$state = isUndefined(state) ? null : state; - this.$$urlUpdatedByLocation = true; - - return this; - }; -}); - - -function locationGetter(property) { - return /** @this */ function() { - return this[property]; - }; -} - - -function locationGetterSetter(property, preprocess) { - return /** @this */ function(value) { - if (isUndefined(value)) { - return this[property]; - } - - this[property] = preprocess(value); - this.$$compose(); - - return this; - }; -} - - -/** - * @ngdoc service - * @name $location - * - * @requires $rootElement - * - * @description - * The $location service parses the URL in the browser address bar (based on the - * [window.location](https://developer.mozilla.org/en/window.location)) and makes the URL - * available to your application. Changes to the URL in the address bar are reflected into - * $location service and changes to $location are reflected into the browser address bar. - * - * **The $location service:** - * - * - Exposes the current URL in the browser address bar, so you can - * - Watch and observe the URL. - * - Change the URL. - * - Synchronizes the URL with the browser when the user - * - Changes the address bar. - * - Clicks the back or forward button (or clicks a History link). - * - Clicks on a link. - * - Represents the URL object as a set of methods (protocol, host, port, path, search, hash). - * - * For more information see {@link guide/$location Developer Guide: Using $location} - */ - -/** - * @ngdoc provider - * @name $locationProvider - * @this - * - * @description - * Use the `$locationProvider` to configure how the application deep linking paths are stored. - */ -function $LocationProvider() { - var hashPrefix = '!', - html5Mode = { - enabled: false, - requireBase: true, - rewriteLinks: true - }; - - /** - * @ngdoc method - * @name $locationProvider#hashPrefix - * @description - * The default value for the prefix is `'!'`. - * @param {string=} prefix Prefix for hash part (containing path and search) - * @returns {*} current value if used as getter or itself (chaining) if used as setter - */ - this.hashPrefix = function(prefix) { - if (isDefined(prefix)) { - hashPrefix = prefix; - return this; - } else { - return hashPrefix; - } - }; - - /** - * @ngdoc method - * @name $locationProvider#html5Mode - * @description - * @param {(boolean|Object)=} mode If boolean, sets `html5Mode.enabled` to value. - * If object, sets `enabled`, `requireBase` and `rewriteLinks` to respective values. Supported - * properties: - * - **enabled** – `{boolean}` – (default: false) If true, will rely on `history.pushState` to - * change urls where supported. Will fall back to hash-prefixed paths in browsers that do not - * support `pushState`. - * - **requireBase** - `{boolean}` - (default: `true`) When html5Mode is enabled, specifies - * whether or not a tag is required to be present. If `enabled` and `requireBase` are - * true, and a base tag is not present, an error will be thrown when `$location` is injected. - * See the {@link guide/$location $location guide for more information} - * - **rewriteLinks** - `{boolean|string}` - (default: `true`) When html5Mode is enabled, - * enables/disables URL rewriting for relative links. If set to a string, URL rewriting will - * only happen on links with an attribute that matches the given string. For example, if set - * to `'internal-link'`, then the URL will only be rewritten for `` links. - * Note that [attribute name normalization](guide/directive#normalization) does not apply - * here, so `'internalLink'` will **not** match `'internal-link'`. - * - * @returns {Object} html5Mode object if used as getter or itself (chaining) if used as setter - */ - this.html5Mode = function(mode) { - if (isBoolean(mode)) { - html5Mode.enabled = mode; - return this; - } else if (isObject(mode)) { - - if (isBoolean(mode.enabled)) { - html5Mode.enabled = mode.enabled; - } - - if (isBoolean(mode.requireBase)) { - html5Mode.requireBase = mode.requireBase; - } - - if (isBoolean(mode.rewriteLinks) || isString(mode.rewriteLinks)) { - html5Mode.rewriteLinks = mode.rewriteLinks; - } - - return this; - } else { - return html5Mode; - } - }; - - /** - * @ngdoc event - * @name $location#$locationChangeStart - * @eventType broadcast on root scope - * @description - * Broadcasted before a URL will change. - * - * This change can be prevented by calling - * `preventDefault` method of the event. See {@link ng.$rootScope.Scope#$on} for more - * details about event object. Upon successful change - * {@link ng.$location#$locationChangeSuccess $locationChangeSuccess} is fired. - * - * The `newState` and `oldState` parameters may be defined only in HTML5 mode and when - * the browser supports the HTML5 History API. - * - * @param {Object} angularEvent Synthetic event object. - * @param {string} newUrl New URL - * @param {string=} oldUrl URL that was before it was changed. - * @param {string=} newState New history state object - * @param {string=} oldState History state object that was before it was changed. - */ - - /** - * @ngdoc event - * @name $location#$locationChangeSuccess - * @eventType broadcast on root scope - * @description - * Broadcasted after a URL was changed. - * - * The `newState` and `oldState` parameters may be defined only in HTML5 mode and when - * the browser supports the HTML5 History API. - * - * @param {Object} angularEvent Synthetic event object. - * @param {string} newUrl New URL - * @param {string=} oldUrl URL that was before it was changed. - * @param {string=} newState New history state object - * @param {string=} oldState History state object that was before it was changed. - */ - - this.$get = ['$rootScope', '$browser', '$sniffer', '$rootElement', '$window', - function($rootScope, $browser, $sniffer, $rootElement, $window) { - var $location, - LocationMode, - baseHref = $browser.baseHref(), // if base[href] is undefined, it defaults to '' - initialUrl = $browser.url(), - appBase; - - if (html5Mode.enabled) { - if (!baseHref && html5Mode.requireBase) { - throw $locationMinErr('nobase', - '$location in HTML5 mode requires a tag to be present!'); - } - appBase = serverBase(initialUrl) + (baseHref || '/'); - LocationMode = $sniffer.history ? LocationHtml5Url : LocationHashbangInHtml5Url; - } else { - appBase = stripHash(initialUrl); - LocationMode = LocationHashbangUrl; - } - var appBaseNoFile = stripFile(appBase); - - $location = new LocationMode(appBase, appBaseNoFile, '#' + hashPrefix); - $location.$$parseLinkUrl(initialUrl, initialUrl); - - $location.$$state = $browser.state(); - - var IGNORE_URI_REGEXP = /^\s*(javascript|mailto):/i; - - // Determine if two URLs are equal despite potentially having different encoding/normalizing - // such as $location.absUrl() vs $browser.url() - // See https://github.com/angular/angular.js/issues/16592 - function urlsEqual(a, b) { - return a === b || urlResolve(a).href === urlResolve(b).href; - } - - function setBrowserUrlWithFallback(url, replace, state) { - var oldUrl = $location.url(); - var oldState = $location.$$state; - try { - $browser.url(url, replace, state); - - // Make sure $location.state() returns referentially identical (not just deeply equal) - // state object; this makes possible quick checking if the state changed in the digest - // loop. Checking deep equality would be too expensive. - $location.$$state = $browser.state(); - } catch (e) { - // Restore old values if pushState fails - $location.url(oldUrl); - $location.$$state = oldState; - - throw e; - } - } - - $rootElement.on('click', function(event) { - var rewriteLinks = html5Mode.rewriteLinks; - // TODO(vojta): rewrite link when opening in new tab/window (in legacy browser) - // currently we open nice url link and redirect then - - if (!rewriteLinks || event.ctrlKey || event.metaKey || event.shiftKey || event.which === 2 || event.button === 2) return; - - var elm = jqLite(event.target); - - // traverse the DOM up to find first A tag - while (nodeName_(elm[0]) !== 'a') { - // ignore rewriting if no A tag (reached root element, or no parent - removed from document) - if (elm[0] === $rootElement[0] || !(elm = elm.parent())[0]) return; - } - - if (isString(rewriteLinks) && isUndefined(elm.attr(rewriteLinks))) return; - - var absHref = elm.prop('href'); - // get the actual href attribute - see - // http://msdn.microsoft.com/en-us/library/ie/dd347148(v=vs.85).aspx - var relHref = elm.attr('href') || elm.attr('xlink:href'); - - if (isObject(absHref) && absHref.toString() === '[object SVGAnimatedString]') { - // SVGAnimatedString.animVal should be identical to SVGAnimatedString.baseVal, unless during - // an animation. - absHref = urlResolve(absHref.animVal).href; - } - - // Ignore when url is started with javascript: or mailto: - if (IGNORE_URI_REGEXP.test(absHref)) return; - - if (absHref && !elm.attr('target') && !event.isDefaultPrevented()) { - if ($location.$$parseLinkUrl(absHref, relHref)) { - // We do a preventDefault for all urls that are part of the AngularJS application, - // in html5mode and also without, so that we are able to abort navigation without - // getting double entries in the location history. - event.preventDefault(); - // update location manually - if ($location.absUrl() !== $browser.url()) { - $rootScope.$apply(); - } - } - } - }); - - - // rewrite hashbang url <> html5 url - if ($location.absUrl() !== initialUrl) { - $browser.url($location.absUrl(), true); - } - - var initializing = true; - - // update $location when $browser url changes - $browser.onUrlChange(function(newUrl, newState) { - - if (!startsWith(newUrl, appBaseNoFile)) { - // If we are navigating outside of the app then force a reload - $window.location.href = newUrl; - return; - } - - $rootScope.$evalAsync(function() { - var oldUrl = $location.absUrl(); - var oldState = $location.$$state; - var defaultPrevented; - $location.$$parse(newUrl); - $location.$$state = newState; - - defaultPrevented = $rootScope.$broadcast('$locationChangeStart', newUrl, oldUrl, - newState, oldState).defaultPrevented; - - // if the location was changed by a `$locationChangeStart` handler then stop - // processing this location change - if ($location.absUrl() !== newUrl) return; - - if (defaultPrevented) { - $location.$$parse(oldUrl); - $location.$$state = oldState; - setBrowserUrlWithFallback(oldUrl, false, oldState); - } else { - initializing = false; - afterLocationChange(oldUrl, oldState); - } - }); - if (!$rootScope.$$phase) $rootScope.$digest(); - }); - - // update browser - $rootScope.$watch(function $locationWatch() { - if (initializing || $location.$$urlUpdatedByLocation) { - $location.$$urlUpdatedByLocation = false; - - var oldUrl = $browser.url(); - var newUrl = $location.absUrl(); - var oldState = $browser.state(); - var currentReplace = $location.$$replace; - var urlOrStateChanged = !urlsEqual(oldUrl, newUrl) || - ($location.$$html5 && $sniffer.history && oldState !== $location.$$state); - - if (initializing || urlOrStateChanged) { - initializing = false; - - $rootScope.$evalAsync(function() { - var newUrl = $location.absUrl(); - var defaultPrevented = $rootScope.$broadcast('$locationChangeStart', newUrl, oldUrl, - $location.$$state, oldState).defaultPrevented; - - // if the location was changed by a `$locationChangeStart` handler then stop - // processing this location change - if ($location.absUrl() !== newUrl) return; - - if (defaultPrevented) { - $location.$$parse(oldUrl); - $location.$$state = oldState; - } else { - if (urlOrStateChanged) { - setBrowserUrlWithFallback(newUrl, currentReplace, - oldState === $location.$$state ? null : $location.$$state); - } - afterLocationChange(oldUrl, oldState); - } - }); - } - } - - $location.$$replace = false; - - // we don't need to return anything because $evalAsync will make the digest loop dirty when - // there is a change - }); - - return $location; - - function afterLocationChange(oldUrl, oldState) { - $rootScope.$broadcast('$locationChangeSuccess', $location.absUrl(), oldUrl, - $location.$$state, oldState); - } -}]; -} - -/** - * @ngdoc service - * @name $log - * @requires $window - * - * @description - * Simple service for logging. Default implementation safely writes the message - * into the browser's console (if present). - * - * The main purpose of this service is to simplify debugging and troubleshooting. - * - * To reveal the location of the calls to `$log` in the JavaScript console, - * you can "blackbox" the AngularJS source in your browser: - * - * [Mozilla description of blackboxing](https://developer.mozilla.org/en-US/docs/Tools/Debugger/How_to/Black_box_a_source). - * [Chrome description of blackboxing](https://developer.chrome.com/devtools/docs/blackboxing). - * - * Note: Not all browsers support blackboxing. - * - * The default is to log `debug` messages. You can use - * {@link ng.$logProvider ng.$logProvider#debugEnabled} to change this. - * - * @example - - - angular.module('logExample', []) - .controller('LogController', ['$scope', '$log', function($scope, $log) { - $scope.$log = $log; - $scope.message = 'Hello World!'; - }]); - - -
-

Reload this page with open console, enter text and hit the log button...

- - - - - - -
-
-
- */ - -/** - * @ngdoc provider - * @name $logProvider - * @this - * - * @description - * Use the `$logProvider` to configure how the application logs messages - */ -function $LogProvider() { - var debug = true, - self = this; - - /** - * @ngdoc method - * @name $logProvider#debugEnabled - * @description - * @param {boolean=} flag enable or disable debug level messages - * @returns {*} current value if used as getter or itself (chaining) if used as setter - */ - this.debugEnabled = function(flag) { - if (isDefined(flag)) { - debug = flag; - return this; - } else { - return debug; - } - }; - - this.$get = ['$window', function($window) { - // Support: IE 9-11, Edge 12-14+ - // IE/Edge display errors in such a way that it requires the user to click in 4 places - // to see the stack trace. There is no way to feature-detect it so there's a chance - // of the user agent sniffing to go wrong but since it's only about logging, this shouldn't - // break apps. Other browsers display errors in a sensible way and some of them map stack - // traces along source maps if available so it makes sense to let browsers display it - // as they want. - var formatStackTrace = msie || /\bEdge\//.test($window.navigator && $window.navigator.userAgent); - - return { - /** - * @ngdoc method - * @name $log#log - * - * @description - * Write a log message - */ - log: consoleLog('log'), - - /** - * @ngdoc method - * @name $log#info - * - * @description - * Write an information message - */ - info: consoleLog('info'), - - /** - * @ngdoc method - * @name $log#warn - * - * @description - * Write a warning message - */ - warn: consoleLog('warn'), - - /** - * @ngdoc method - * @name $log#error - * - * @description - * Write an error message - */ - error: consoleLog('error'), - - /** - * @ngdoc method - * @name $log#debug - * - * @description - * Write a debug message - */ - debug: (function() { - var fn = consoleLog('debug'); - - return function() { - if (debug) { - fn.apply(self, arguments); - } - }; - })() - }; - - function formatError(arg) { - if (isError(arg)) { - if (arg.stack && formatStackTrace) { - arg = (arg.message && arg.stack.indexOf(arg.message) === -1) - ? 'Error: ' + arg.message + '\n' + arg.stack - : arg.stack; - } else if (arg.sourceURL) { - arg = arg.message + '\n' + arg.sourceURL + ':' + arg.line; - } - } - return arg; - } - - function consoleLog(type) { - var console = $window.console || {}, - logFn = console[type] || console.log || noop; - - return function() { - var args = []; - forEach(arguments, function(arg) { - args.push(formatError(arg)); - }); - // Support: IE 9 only - // console methods don't inherit from Function.prototype in IE 9 so we can't - // call `logFn.apply(console, args)` directly. - return Function.prototype.apply.call(logFn, console, args); - }; - } - }]; -} - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * Any commits to this file should be reviewed with security in mind. * - * Changes to this file can potentially create security vulnerabilities. * - * An approval from 2 Core members with history of modifying * - * this file is required. * - * * - * Does the change somehow allow for arbitrary javascript to be executed? * - * Or allows for someone to change the prototype of built-in objects? * - * Or gives undesired access to variables likes document or window? * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -var $parseMinErr = minErr('$parse'); - -var objectValueOf = {}.constructor.prototype.valueOf; - -// Sandboxing AngularJS Expressions -// ------------------------------ -// AngularJS expressions are no longer sandboxed. So it is now even easier to access arbitrary JS code by -// various means such as obtaining a reference to native JS functions like the Function constructor. -// -// As an example, consider the following AngularJS expression: -// -// {}.toString.constructor('alert("evil JS code")') -// -// It is important to realize that if you create an expression from a string that contains user provided -// content then it is possible that your application contains a security vulnerability to an XSS style attack. -// -// See https://docs.angularjs.org/guide/security - - -function getStringValue(name) { - // Property names must be strings. This means that non-string objects cannot be used - // as keys in an object. Any non-string object, including a number, is typecasted - // into a string via the toString method. - // -- MDN, https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/Property_accessors#Property_names - // - // So, to ensure that we are checking the same `name` that JavaScript would use, we cast it - // to a string. It's not always possible. If `name` is an object and its `toString` method is - // 'broken' (doesn't return a string, isn't a function, etc.), an error will be thrown: - // - // TypeError: Cannot convert object to primitive value - // - // For performance reasons, we don't catch this error here and allow it to propagate up the call - // stack. Note that you'll get the same error in JavaScript if you try to access a property using - // such a 'broken' object as a key. - return name + ''; -} - - -var OPERATORS = createMap(); -forEach('+ - * / % === !== == != < > <= >= && || ! = |'.split(' '), function(operator) { OPERATORS[operator] = true; }); -var ESCAPE = {'n':'\n', 'f':'\f', 'r':'\r', 't':'\t', 'v':'\v', '\'':'\'', '"':'"'}; - - -///////////////////////////////////////// - - -/** - * @constructor - */ -var Lexer = function Lexer(options) { - this.options = options; -}; - -Lexer.prototype = { - constructor: Lexer, - - lex: function(text) { - this.text = text; - this.index = 0; - this.tokens = []; - - while (this.index < this.text.length) { - var ch = this.text.charAt(this.index); - if (ch === '"' || ch === '\'') { - this.readString(ch); - } else if (this.isNumber(ch) || ch === '.' && this.isNumber(this.peek())) { - this.readNumber(); - } else if (this.isIdentifierStart(this.peekMultichar())) { - this.readIdent(); - } else if (this.is(ch, '(){}[].,;:?')) { - this.tokens.push({index: this.index, text: ch}); - this.index++; - } else if (this.isWhitespace(ch)) { - this.index++; - } else { - var ch2 = ch + this.peek(); - var ch3 = ch2 + this.peek(2); - var op1 = OPERATORS[ch]; - var op2 = OPERATORS[ch2]; - var op3 = OPERATORS[ch3]; - if (op1 || op2 || op3) { - var token = op3 ? ch3 : (op2 ? ch2 : ch); - this.tokens.push({index: this.index, text: token, operator: true}); - this.index += token.length; - } else { - this.throwError('Unexpected next character ', this.index, this.index + 1); - } - } - } - return this.tokens; - }, - - is: function(ch, chars) { - return chars.indexOf(ch) !== -1; - }, - - peek: function(i) { - var num = i || 1; - return (this.index + num < this.text.length) ? this.text.charAt(this.index + num) : false; - }, - - isNumber: function(ch) { - return ('0' <= ch && ch <= '9') && typeof ch === 'string'; - }, - - isWhitespace: function(ch) { - // IE treats non-breaking space as \u00A0 - return (ch === ' ' || ch === '\r' || ch === '\t' || - ch === '\n' || ch === '\v' || ch === '\u00A0'); - }, - - isIdentifierStart: function(ch) { - return this.options.isIdentifierStart ? - this.options.isIdentifierStart(ch, this.codePointAt(ch)) : - this.isValidIdentifierStart(ch); - }, - - isValidIdentifierStart: function(ch) { - return ('a' <= ch && ch <= 'z' || - 'A' <= ch && ch <= 'Z' || - '_' === ch || ch === '$'); - }, - - isIdentifierContinue: function(ch) { - return this.options.isIdentifierContinue ? - this.options.isIdentifierContinue(ch, this.codePointAt(ch)) : - this.isValidIdentifierContinue(ch); - }, - - isValidIdentifierContinue: function(ch, cp) { - return this.isValidIdentifierStart(ch, cp) || this.isNumber(ch); - }, - - codePointAt: function(ch) { - if (ch.length === 1) return ch.charCodeAt(0); - // eslint-disable-next-line no-bitwise - return (ch.charCodeAt(0) << 10) + ch.charCodeAt(1) - 0x35FDC00; - }, - - peekMultichar: function() { - var ch = this.text.charAt(this.index); - var peek = this.peek(); - if (!peek) { - return ch; - } - var cp1 = ch.charCodeAt(0); - var cp2 = peek.charCodeAt(0); - if (cp1 >= 0xD800 && cp1 <= 0xDBFF && cp2 >= 0xDC00 && cp2 <= 0xDFFF) { - return ch + peek; - } - return ch; - }, - - isExpOperator: function(ch) { - return (ch === '-' || ch === '+' || this.isNumber(ch)); - }, - - throwError: function(error, start, end) { - end = end || this.index; - var colStr = (isDefined(start) - ? 's ' + start + '-' + this.index + ' [' + this.text.substring(start, end) + ']' - : ' ' + end); - throw $parseMinErr('lexerr', 'Lexer Error: {0} at column{1} in expression [{2}].', - error, colStr, this.text); - }, - - readNumber: function() { - var number = ''; - var start = this.index; - while (this.index < this.text.length) { - var ch = lowercase(this.text.charAt(this.index)); - if (ch === '.' || this.isNumber(ch)) { - number += ch; - } else { - var peekCh = this.peek(); - if (ch === 'e' && this.isExpOperator(peekCh)) { - number += ch; - } else if (this.isExpOperator(ch) && - peekCh && this.isNumber(peekCh) && - number.charAt(number.length - 1) === 'e') { - number += ch; - } else if (this.isExpOperator(ch) && - (!peekCh || !this.isNumber(peekCh)) && - number.charAt(number.length - 1) === 'e') { - this.throwError('Invalid exponent'); - } else { - break; - } - } - this.index++; - } - this.tokens.push({ - index: start, - text: number, - constant: true, - value: Number(number) - }); - }, - - readIdent: function() { - var start = this.index; - this.index += this.peekMultichar().length; - while (this.index < this.text.length) { - var ch = this.peekMultichar(); - if (!this.isIdentifierContinue(ch)) { - break; - } - this.index += ch.length; - } - this.tokens.push({ - index: start, - text: this.text.slice(start, this.index), - identifier: true - }); - }, - - readString: function(quote) { - var start = this.index; - this.index++; - var string = ''; - var rawString = quote; - var escape = false; - while (this.index < this.text.length) { - var ch = this.text.charAt(this.index); - rawString += ch; - if (escape) { - if (ch === 'u') { - var hex = this.text.substring(this.index + 1, this.index + 5); - if (!hex.match(/[\da-f]{4}/i)) { - this.throwError('Invalid unicode escape [\\u' + hex + ']'); - } - this.index += 4; - string += String.fromCharCode(parseInt(hex, 16)); - } else { - var rep = ESCAPE[ch]; - string = string + (rep || ch); - } - escape = false; - } else if (ch === '\\') { - escape = true; - } else if (ch === quote) { - this.index++; - this.tokens.push({ - index: start, - text: rawString, - constant: true, - value: string - }); - return; - } else { - string += ch; - } - this.index++; - } - this.throwError('Unterminated quote', start); - } -}; - -var AST = function AST(lexer, options) { - this.lexer = lexer; - this.options = options; -}; - -AST.Program = 'Program'; -AST.ExpressionStatement = 'ExpressionStatement'; -AST.AssignmentExpression = 'AssignmentExpression'; -AST.ConditionalExpression = 'ConditionalExpression'; -AST.LogicalExpression = 'LogicalExpression'; -AST.BinaryExpression = 'BinaryExpression'; -AST.UnaryExpression = 'UnaryExpression'; -AST.CallExpression = 'CallExpression'; -AST.MemberExpression = 'MemberExpression'; -AST.Identifier = 'Identifier'; -AST.Literal = 'Literal'; -AST.ArrayExpression = 'ArrayExpression'; -AST.Property = 'Property'; -AST.ObjectExpression = 'ObjectExpression'; -AST.ThisExpression = 'ThisExpression'; -AST.LocalsExpression = 'LocalsExpression'; - -// Internal use only -AST.NGValueParameter = 'NGValueParameter'; - -AST.prototype = { - ast: function(text) { - this.text = text; - this.tokens = this.lexer.lex(text); - - var value = this.program(); - - if (this.tokens.length !== 0) { - this.throwError('is an unexpected token', this.tokens[0]); - } - - return value; - }, - - program: function() { - var body = []; - while (true) { - if (this.tokens.length > 0 && !this.peek('}', ')', ';', ']')) - body.push(this.expressionStatement()); - if (!this.expect(';')) { - return { type: AST.Program, body: body}; - } - } - }, - - expressionStatement: function() { - return { type: AST.ExpressionStatement, expression: this.filterChain() }; - }, - - filterChain: function() { - var left = this.expression(); - while (this.expect('|')) { - left = this.filter(left); - } - return left; - }, - - expression: function() { - return this.assignment(); - }, - - assignment: function() { - var result = this.ternary(); - if (this.expect('=')) { - if (!isAssignable(result)) { - throw $parseMinErr('lval', 'Trying to assign a value to a non l-value'); - } - - result = { type: AST.AssignmentExpression, left: result, right: this.assignment(), operator: '='}; - } - return result; - }, - - ternary: function() { - var test = this.logicalOR(); - var alternate; - var consequent; - if (this.expect('?')) { - alternate = this.expression(); - if (this.consume(':')) { - consequent = this.expression(); - return { type: AST.ConditionalExpression, test: test, alternate: alternate, consequent: consequent}; - } - } - return test; - }, - - logicalOR: function() { - var left = this.logicalAND(); - while (this.expect('||')) { - left = { type: AST.LogicalExpression, operator: '||', left: left, right: this.logicalAND() }; - } - return left; - }, - - logicalAND: function() { - var left = this.equality(); - while (this.expect('&&')) { - left = { type: AST.LogicalExpression, operator: '&&', left: left, right: this.equality()}; - } - return left; - }, - - equality: function() { - var left = this.relational(); - var token; - while ((token = this.expect('==','!=','===','!=='))) { - left = { type: AST.BinaryExpression, operator: token.text, left: left, right: this.relational() }; - } - return left; - }, - - relational: function() { - var left = this.additive(); - var token; - while ((token = this.expect('<', '>', '<=', '>='))) { - left = { type: AST.BinaryExpression, operator: token.text, left: left, right: this.additive() }; - } - return left; - }, - - additive: function() { - var left = this.multiplicative(); - var token; - while ((token = this.expect('+','-'))) { - left = { type: AST.BinaryExpression, operator: token.text, left: left, right: this.multiplicative() }; - } - return left; - }, - - multiplicative: function() { - var left = this.unary(); - var token; - while ((token = this.expect('*','/','%'))) { - left = { type: AST.BinaryExpression, operator: token.text, left: left, right: this.unary() }; - } - return left; - }, - - unary: function() { - var token; - if ((token = this.expect('+', '-', '!'))) { - return { type: AST.UnaryExpression, operator: token.text, prefix: true, argument: this.unary() }; - } else { - return this.primary(); - } - }, - - primary: function() { - var primary; - if (this.expect('(')) { - primary = this.filterChain(); - this.consume(')'); - } else if (this.expect('[')) { - primary = this.arrayDeclaration(); - } else if (this.expect('{')) { - primary = this.object(); - } else if (this.selfReferential.hasOwnProperty(this.peek().text)) { - primary = copy(this.selfReferential[this.consume().text]); - } else if (this.options.literals.hasOwnProperty(this.peek().text)) { - primary = { type: AST.Literal, value: this.options.literals[this.consume().text]}; - } else if (this.peek().identifier) { - primary = this.identifier(); - } else if (this.peek().constant) { - primary = this.constant(); - } else { - this.throwError('not a primary expression', this.peek()); - } - - var next; - while ((next = this.expect('(', '[', '.'))) { - if (next.text === '(') { - primary = {type: AST.CallExpression, callee: primary, arguments: this.parseArguments() }; - this.consume(')'); - } else if (next.text === '[') { - primary = { type: AST.MemberExpression, object: primary, property: this.expression(), computed: true }; - this.consume(']'); - } else if (next.text === '.') { - primary = { type: AST.MemberExpression, object: primary, property: this.identifier(), computed: false }; - } else { - this.throwError('IMPOSSIBLE'); - } - } - return primary; - }, - - filter: function(baseExpression) { - var args = [baseExpression]; - var result = {type: AST.CallExpression, callee: this.identifier(), arguments: args, filter: true}; - - while (this.expect(':')) { - args.push(this.expression()); - } - - return result; - }, - - parseArguments: function() { - var args = []; - if (this.peekToken().text !== ')') { - do { - args.push(this.filterChain()); - } while (this.expect(',')); - } - return args; - }, - - identifier: function() { - var token = this.consume(); - if (!token.identifier) { - this.throwError('is not a valid identifier', token); - } - return { type: AST.Identifier, name: token.text }; - }, - - constant: function() { - // TODO check that it is a constant - return { type: AST.Literal, value: this.consume().value }; - }, - - arrayDeclaration: function() { - var elements = []; - if (this.peekToken().text !== ']') { - do { - if (this.peek(']')) { - // Support trailing commas per ES5.1. - break; - } - elements.push(this.expression()); - } while (this.expect(',')); - } - this.consume(']'); - - return { type: AST.ArrayExpression, elements: elements }; - }, - - object: function() { - var properties = [], property; - if (this.peekToken().text !== '}') { - do { - if (this.peek('}')) { - // Support trailing commas per ES5.1. - break; - } - property = {type: AST.Property, kind: 'init'}; - if (this.peek().constant) { - property.key = this.constant(); - property.computed = false; - this.consume(':'); - property.value = this.expression(); - } else if (this.peek().identifier) { - property.key = this.identifier(); - property.computed = false; - if (this.peek(':')) { - this.consume(':'); - property.value = this.expression(); - } else { - property.value = property.key; - } - } else if (this.peek('[')) { - this.consume('['); - property.key = this.expression(); - this.consume(']'); - property.computed = true; - this.consume(':'); - property.value = this.expression(); - } else { - this.throwError('invalid key', this.peek()); - } - properties.push(property); - } while (this.expect(',')); - } - this.consume('}'); - - return {type: AST.ObjectExpression, properties: properties }; - }, - - throwError: function(msg, token) { - throw $parseMinErr('syntax', - 'Syntax Error: Token \'{0}\' {1} at column {2} of the expression [{3}] starting at [{4}].', - token.text, msg, (token.index + 1), this.text, this.text.substring(token.index)); - }, - - consume: function(e1) { - if (this.tokens.length === 0) { - throw $parseMinErr('ueoe', 'Unexpected end of expression: {0}', this.text); - } - - var token = this.expect(e1); - if (!token) { - this.throwError('is unexpected, expecting [' + e1 + ']', this.peek()); - } - return token; - }, - - peekToken: function() { - if (this.tokens.length === 0) { - throw $parseMinErr('ueoe', 'Unexpected end of expression: {0}', this.text); - } - return this.tokens[0]; - }, - - peek: function(e1, e2, e3, e4) { - return this.peekAhead(0, e1, e2, e3, e4); - }, - - peekAhead: function(i, e1, e2, e3, e4) { - if (this.tokens.length > i) { - var token = this.tokens[i]; - var t = token.text; - if (t === e1 || t === e2 || t === e3 || t === e4 || - (!e1 && !e2 && !e3 && !e4)) { - return token; - } - } - return false; - }, - - expect: function(e1, e2, e3, e4) { - var token = this.peek(e1, e2, e3, e4); - if (token) { - this.tokens.shift(); - return token; - } - return false; - }, - - selfReferential: { - 'this': {type: AST.ThisExpression }, - '$locals': {type: AST.LocalsExpression } - } -}; - -function ifDefined(v, d) { - return typeof v !== 'undefined' ? v : d; -} - -function plusFn(l, r) { - if (typeof l === 'undefined') return r; - if (typeof r === 'undefined') return l; - return l + r; -} - -function isStateless($filter, filterName) { - var fn = $filter(filterName); - return !fn.$stateful; -} - -var PURITY_ABSOLUTE = 1; -var PURITY_RELATIVE = 2; - -// Detect nodes which could depend on non-shallow state of objects -function isPure(node, parentIsPure) { - switch (node.type) { - // Computed members might invoke a stateful toString() - case AST.MemberExpression: - if (node.computed) { - return false; - } - break; - - // Unary always convert to primative - case AST.UnaryExpression: - return PURITY_ABSOLUTE; - - // The binary + operator can invoke a stateful toString(). - case AST.BinaryExpression: - return node.operator !== '+' ? PURITY_ABSOLUTE : false; - - // Functions / filters probably read state from within objects - case AST.CallExpression: - return false; - } - - return (undefined === parentIsPure) ? PURITY_RELATIVE : parentIsPure; -} - -function findConstantAndWatchExpressions(ast, $filter, parentIsPure) { - var allConstants; - var argsToWatch; - var isStatelessFilter; - - var astIsPure = ast.isPure = isPure(ast, parentIsPure); - - switch (ast.type) { - case AST.Program: - allConstants = true; - forEach(ast.body, function(expr) { - findConstantAndWatchExpressions(expr.expression, $filter, astIsPure); - allConstants = allConstants && expr.expression.constant; - }); - ast.constant = allConstants; - break; - case AST.Literal: - ast.constant = true; - ast.toWatch = []; - break; - case AST.UnaryExpression: - findConstantAndWatchExpressions(ast.argument, $filter, astIsPure); - ast.constant = ast.argument.constant; - ast.toWatch = ast.argument.toWatch; - break; - case AST.BinaryExpression: - findConstantAndWatchExpressions(ast.left, $filter, astIsPure); - findConstantAndWatchExpressions(ast.right, $filter, astIsPure); - ast.constant = ast.left.constant && ast.right.constant; - ast.toWatch = ast.left.toWatch.concat(ast.right.toWatch); - break; - case AST.LogicalExpression: - findConstantAndWatchExpressions(ast.left, $filter, astIsPure); - findConstantAndWatchExpressions(ast.right, $filter, astIsPure); - ast.constant = ast.left.constant && ast.right.constant; - ast.toWatch = ast.constant ? [] : [ast]; - break; - case AST.ConditionalExpression: - findConstantAndWatchExpressions(ast.test, $filter, astIsPure); - findConstantAndWatchExpressions(ast.alternate, $filter, astIsPure); - findConstantAndWatchExpressions(ast.consequent, $filter, astIsPure); - ast.constant = ast.test.constant && ast.alternate.constant && ast.consequent.constant; - ast.toWatch = ast.constant ? [] : [ast]; - break; - case AST.Identifier: - ast.constant = false; - ast.toWatch = [ast]; - break; - case AST.MemberExpression: - findConstantAndWatchExpressions(ast.object, $filter, astIsPure); - if (ast.computed) { - findConstantAndWatchExpressions(ast.property, $filter, astIsPure); - } - ast.constant = ast.object.constant && (!ast.computed || ast.property.constant); - ast.toWatch = ast.constant ? [] : [ast]; - break; - case AST.CallExpression: - isStatelessFilter = ast.filter ? isStateless($filter, ast.callee.name) : false; - allConstants = isStatelessFilter; - argsToWatch = []; - forEach(ast.arguments, function(expr) { - findConstantAndWatchExpressions(expr, $filter, astIsPure); - allConstants = allConstants && expr.constant; - argsToWatch.push.apply(argsToWatch, expr.toWatch); - }); - ast.constant = allConstants; - ast.toWatch = isStatelessFilter ? argsToWatch : [ast]; - break; - case AST.AssignmentExpression: - findConstantAndWatchExpressions(ast.left, $filter, astIsPure); - findConstantAndWatchExpressions(ast.right, $filter, astIsPure); - ast.constant = ast.left.constant && ast.right.constant; - ast.toWatch = [ast]; - break; - case AST.ArrayExpression: - allConstants = true; - argsToWatch = []; - forEach(ast.elements, function(expr) { - findConstantAndWatchExpressions(expr, $filter, astIsPure); - allConstants = allConstants && expr.constant; - argsToWatch.push.apply(argsToWatch, expr.toWatch); - }); - ast.constant = allConstants; - ast.toWatch = argsToWatch; - break; - case AST.ObjectExpression: - allConstants = true; - argsToWatch = []; - forEach(ast.properties, function(property) { - findConstantAndWatchExpressions(property.value, $filter, astIsPure); - allConstants = allConstants && property.value.constant; - argsToWatch.push.apply(argsToWatch, property.value.toWatch); - if (property.computed) { - //`{[key]: value}` implicitly does `key.toString()` which may be non-pure - findConstantAndWatchExpressions(property.key, $filter, /*parentIsPure=*/false); - allConstants = allConstants && property.key.constant; - argsToWatch.push.apply(argsToWatch, property.key.toWatch); - } - }); - ast.constant = allConstants; - ast.toWatch = argsToWatch; - break; - case AST.ThisExpression: - ast.constant = false; - ast.toWatch = []; - break; - case AST.LocalsExpression: - ast.constant = false; - ast.toWatch = []; - break; - } -} - -function getInputs(body) { - if (body.length !== 1) return; - var lastExpression = body[0].expression; - var candidate = lastExpression.toWatch; - if (candidate.length !== 1) return candidate; - return candidate[0] !== lastExpression ? candidate : undefined; -} - -function isAssignable(ast) { - return ast.type === AST.Identifier || ast.type === AST.MemberExpression; -} - -function assignableAST(ast) { - if (ast.body.length === 1 && isAssignable(ast.body[0].expression)) { - return {type: AST.AssignmentExpression, left: ast.body[0].expression, right: {type: AST.NGValueParameter}, operator: '='}; - } -} - -function isLiteral(ast) { - return ast.body.length === 0 || - ast.body.length === 1 && ( - ast.body[0].expression.type === AST.Literal || - ast.body[0].expression.type === AST.ArrayExpression || - ast.body[0].expression.type === AST.ObjectExpression); -} - -function isConstant(ast) { - return ast.constant; -} - -function ASTCompiler($filter) { - this.$filter = $filter; -} - -ASTCompiler.prototype = { - compile: function(ast) { - var self = this; - this.state = { - nextId: 0, - filters: {}, - fn: {vars: [], body: [], own: {}}, - assign: {vars: [], body: [], own: {}}, - inputs: [] - }; - findConstantAndWatchExpressions(ast, self.$filter); - var extra = ''; - var assignable; - this.stage = 'assign'; - if ((assignable = assignableAST(ast))) { - this.state.computing = 'assign'; - var result = this.nextId(); - this.recurse(assignable, result); - this.return_(result); - extra = 'fn.assign=' + this.generateFunction('assign', 's,v,l'); - } - var toWatch = getInputs(ast.body); - self.stage = 'inputs'; - forEach(toWatch, function(watch, key) { - var fnKey = 'fn' + key; - self.state[fnKey] = {vars: [], body: [], own: {}}; - self.state.computing = fnKey; - var intoId = self.nextId(); - self.recurse(watch, intoId); - self.return_(intoId); - self.state.inputs.push({name: fnKey, isPure: watch.isPure}); - watch.watchId = key; - }); - this.state.computing = 'fn'; - this.stage = 'main'; - this.recurse(ast); - var fnString = - // The build and minification steps remove the string "use strict" from the code, but this is done using a regex. - // This is a workaround for this until we do a better job at only removing the prefix only when we should. - '"' + this.USE + ' ' + this.STRICT + '";\n' + - this.filterPrefix() + - 'var fn=' + this.generateFunction('fn', 's,l,a,i') + - extra + - this.watchFns() + - 'return fn;'; - - // eslint-disable-next-line no-new-func - var fn = (new Function('$filter', - 'getStringValue', - 'ifDefined', - 'plus', - fnString))( - this.$filter, - getStringValue, - ifDefined, - plusFn); - this.state = this.stage = undefined; - return fn; - }, - - USE: 'use', - - STRICT: 'strict', - - watchFns: function() { - var result = []; - var inputs = this.state.inputs; - var self = this; - forEach(inputs, function(input) { - result.push('var ' + input.name + '=' + self.generateFunction(input.name, 's')); - if (input.isPure) { - result.push(input.name, '.isPure=' + JSON.stringify(input.isPure) + ';'); - } - }); - if (inputs.length) { - result.push('fn.inputs=[' + inputs.map(function(i) { return i.name; }).join(',') + '];'); - } - return result.join(''); - }, - - generateFunction: function(name, params) { - return 'function(' + params + '){' + - this.varsPrefix(name) + - this.body(name) + - '};'; - }, - - filterPrefix: function() { - var parts = []; - var self = this; - forEach(this.state.filters, function(id, filter) { - parts.push(id + '=$filter(' + self.escape(filter) + ')'); - }); - if (parts.length) return 'var ' + parts.join(',') + ';'; - return ''; - }, - - varsPrefix: function(section) { - return this.state[section].vars.length ? 'var ' + this.state[section].vars.join(',') + ';' : ''; - }, - - body: function(section) { - return this.state[section].body.join(''); - }, - - recurse: function(ast, intoId, nameId, recursionFn, create, skipWatchIdCheck) { - var left, right, self = this, args, expression, computed; - recursionFn = recursionFn || noop; - if (!skipWatchIdCheck && isDefined(ast.watchId)) { - intoId = intoId || this.nextId(); - this.if_('i', - this.lazyAssign(intoId, this.computedMember('i', ast.watchId)), - this.lazyRecurse(ast, intoId, nameId, recursionFn, create, true) - ); - return; - } - switch (ast.type) { - case AST.Program: - forEach(ast.body, function(expression, pos) { - self.recurse(expression.expression, undefined, undefined, function(expr) { right = expr; }); - if (pos !== ast.body.length - 1) { - self.current().body.push(right, ';'); - } else { - self.return_(right); - } - }); - break; - case AST.Literal: - expression = this.escape(ast.value); - this.assign(intoId, expression); - recursionFn(intoId || expression); - break; - case AST.UnaryExpression: - this.recurse(ast.argument, undefined, undefined, function(expr) { right = expr; }); - expression = ast.operator + '(' + this.ifDefined(right, 0) + ')'; - this.assign(intoId, expression); - recursionFn(expression); - break; - case AST.BinaryExpression: - this.recurse(ast.left, undefined, undefined, function(expr) { left = expr; }); - this.recurse(ast.right, undefined, undefined, function(expr) { right = expr; }); - if (ast.operator === '+') { - expression = this.plus(left, right); - } else if (ast.operator === '-') { - expression = this.ifDefined(left, 0) + ast.operator + this.ifDefined(right, 0); - } else { - expression = '(' + left + ')' + ast.operator + '(' + right + ')'; - } - this.assign(intoId, expression); - recursionFn(expression); - break; - case AST.LogicalExpression: - intoId = intoId || this.nextId(); - self.recurse(ast.left, intoId); - self.if_(ast.operator === '&&' ? intoId : self.not(intoId), self.lazyRecurse(ast.right, intoId)); - recursionFn(intoId); - break; - case AST.ConditionalExpression: - intoId = intoId || this.nextId(); - self.recurse(ast.test, intoId); - self.if_(intoId, self.lazyRecurse(ast.alternate, intoId), self.lazyRecurse(ast.consequent, intoId)); - recursionFn(intoId); - break; - case AST.Identifier: - intoId = intoId || this.nextId(); - if (nameId) { - nameId.context = self.stage === 'inputs' ? 's' : this.assign(this.nextId(), this.getHasOwnProperty('l', ast.name) + '?l:s'); - nameId.computed = false; - nameId.name = ast.name; - } - self.if_(self.stage === 'inputs' || self.not(self.getHasOwnProperty('l', ast.name)), - function() { - self.if_(self.stage === 'inputs' || 's', function() { - if (create && create !== 1) { - self.if_( - self.isNull(self.nonComputedMember('s', ast.name)), - self.lazyAssign(self.nonComputedMember('s', ast.name), '{}')); - } - self.assign(intoId, self.nonComputedMember('s', ast.name)); - }); - }, intoId && self.lazyAssign(intoId, self.nonComputedMember('l', ast.name)) - ); - recursionFn(intoId); - break; - case AST.MemberExpression: - left = nameId && (nameId.context = this.nextId()) || this.nextId(); - intoId = intoId || this.nextId(); - self.recurse(ast.object, left, undefined, function() { - self.if_(self.notNull(left), function() { - if (ast.computed) { - right = self.nextId(); - self.recurse(ast.property, right); - self.getStringValue(right); - if (create && create !== 1) { - self.if_(self.not(self.computedMember(left, right)), self.lazyAssign(self.computedMember(left, right), '{}')); - } - expression = self.computedMember(left, right); - self.assign(intoId, expression); - if (nameId) { - nameId.computed = true; - nameId.name = right; - } - } else { - if (create && create !== 1) { - self.if_(self.isNull(self.nonComputedMember(left, ast.property.name)), self.lazyAssign(self.nonComputedMember(left, ast.property.name), '{}')); - } - expression = self.nonComputedMember(left, ast.property.name); - self.assign(intoId, expression); - if (nameId) { - nameId.computed = false; - nameId.name = ast.property.name; - } - } - }, function() { - self.assign(intoId, 'undefined'); - }); - recursionFn(intoId); - }, !!create); - break; - case AST.CallExpression: - intoId = intoId || this.nextId(); - if (ast.filter) { - right = self.filter(ast.callee.name); - args = []; - forEach(ast.arguments, function(expr) { - var argument = self.nextId(); - self.recurse(expr, argument); - args.push(argument); - }); - expression = right + '(' + args.join(',') + ')'; - self.assign(intoId, expression); - recursionFn(intoId); - } else { - right = self.nextId(); - left = {}; - args = []; - self.recurse(ast.callee, right, left, function() { - self.if_(self.notNull(right), function() { - forEach(ast.arguments, function(expr) { - self.recurse(expr, ast.constant ? undefined : self.nextId(), undefined, function(argument) { - args.push(argument); - }); - }); - if (left.name) { - expression = self.member(left.context, left.name, left.computed) + '(' + args.join(',') + ')'; - } else { - expression = right + '(' + args.join(',') + ')'; - } - self.assign(intoId, expression); - }, function() { - self.assign(intoId, 'undefined'); - }); - recursionFn(intoId); - }); - } - break; - case AST.AssignmentExpression: - right = this.nextId(); - left = {}; - this.recurse(ast.left, undefined, left, function() { - self.if_(self.notNull(left.context), function() { - self.recurse(ast.right, right); - expression = self.member(left.context, left.name, left.computed) + ast.operator + right; - self.assign(intoId, expression); - recursionFn(intoId || expression); - }); - }, 1); - break; - case AST.ArrayExpression: - args = []; - forEach(ast.elements, function(expr) { - self.recurse(expr, ast.constant ? undefined : self.nextId(), undefined, function(argument) { - args.push(argument); - }); - }); - expression = '[' + args.join(',') + ']'; - this.assign(intoId, expression); - recursionFn(intoId || expression); - break; - case AST.ObjectExpression: - args = []; - computed = false; - forEach(ast.properties, function(property) { - if (property.computed) { - computed = true; - } - }); - if (computed) { - intoId = intoId || this.nextId(); - this.assign(intoId, '{}'); - forEach(ast.properties, function(property) { - if (property.computed) { - left = self.nextId(); - self.recurse(property.key, left); - } else { - left = property.key.type === AST.Identifier ? - property.key.name : - ('' + property.key.value); - } - right = self.nextId(); - self.recurse(property.value, right); - self.assign(self.member(intoId, left, property.computed), right); - }); - } else { - forEach(ast.properties, function(property) { - self.recurse(property.value, ast.constant ? undefined : self.nextId(), undefined, function(expr) { - args.push(self.escape( - property.key.type === AST.Identifier ? property.key.name : - ('' + property.key.value)) + - ':' + expr); - }); - }); - expression = '{' + args.join(',') + '}'; - this.assign(intoId, expression); - } - recursionFn(intoId || expression); - break; - case AST.ThisExpression: - this.assign(intoId, 's'); - recursionFn(intoId || 's'); - break; - case AST.LocalsExpression: - this.assign(intoId, 'l'); - recursionFn(intoId || 'l'); - break; - case AST.NGValueParameter: - this.assign(intoId, 'v'); - recursionFn(intoId || 'v'); - break; - } - }, - - getHasOwnProperty: function(element, property) { - var key = element + '.' + property; - var own = this.current().own; - if (!own.hasOwnProperty(key)) { - own[key] = this.nextId(false, element + '&&(' + this.escape(property) + ' in ' + element + ')'); - } - return own[key]; - }, - - assign: function(id, value) { - if (!id) return; - this.current().body.push(id, '=', value, ';'); - return id; - }, - - filter: function(filterName) { - if (!this.state.filters.hasOwnProperty(filterName)) { - this.state.filters[filterName] = this.nextId(true); - } - return this.state.filters[filterName]; - }, - - ifDefined: function(id, defaultValue) { - return 'ifDefined(' + id + ',' + this.escape(defaultValue) + ')'; - }, - - plus: function(left, right) { - return 'plus(' + left + ',' + right + ')'; - }, - - return_: function(id) { - this.current().body.push('return ', id, ';'); - }, - - if_: function(test, alternate, consequent) { - if (test === true) { - alternate(); - } else { - var body = this.current().body; - body.push('if(', test, '){'); - alternate(); - body.push('}'); - if (consequent) { - body.push('else{'); - consequent(); - body.push('}'); - } - } - }, - - not: function(expression) { - return '!(' + expression + ')'; - }, - - isNull: function(expression) { - return expression + '==null'; - }, - - notNull: function(expression) { - return expression + '!=null'; - }, - - nonComputedMember: function(left, right) { - var SAFE_IDENTIFIER = /^[$_a-zA-Z][$_a-zA-Z0-9]*$/; - var UNSAFE_CHARACTERS = /[^$_a-zA-Z0-9]/g; - if (SAFE_IDENTIFIER.test(right)) { - return left + '.' + right; - } else { - return left + '["' + right.replace(UNSAFE_CHARACTERS, this.stringEscapeFn) + '"]'; - } - }, - - computedMember: function(left, right) { - return left + '[' + right + ']'; - }, - - member: function(left, right, computed) { - if (computed) return this.computedMember(left, right); - return this.nonComputedMember(left, right); - }, - - getStringValue: function(item) { - this.assign(item, 'getStringValue(' + item + ')'); - }, - - lazyRecurse: function(ast, intoId, nameId, recursionFn, create, skipWatchIdCheck) { - var self = this; - return function() { - self.recurse(ast, intoId, nameId, recursionFn, create, skipWatchIdCheck); - }; - }, - - lazyAssign: function(id, value) { - var self = this; - return function() { - self.assign(id, value); - }; - }, - - stringEscapeRegex: /[^ a-zA-Z0-9]/g, - - stringEscapeFn: function(c) { - return '\\u' + ('0000' + c.charCodeAt(0).toString(16)).slice(-4); - }, - - escape: function(value) { - if (isString(value)) return '\'' + value.replace(this.stringEscapeRegex, this.stringEscapeFn) + '\''; - if (isNumber(value)) return value.toString(); - if (value === true) return 'true'; - if (value === false) return 'false'; - if (value === null) return 'null'; - if (typeof value === 'undefined') return 'undefined'; - - throw $parseMinErr('esc', 'IMPOSSIBLE'); - }, - - nextId: function(skip, init) { - var id = 'v' + (this.state.nextId++); - if (!skip) { - this.current().vars.push(id + (init ? '=' + init : '')); - } - return id; - }, - - current: function() { - return this.state[this.state.computing]; - } -}; - - -function ASTInterpreter($filter) { - this.$filter = $filter; -} - -ASTInterpreter.prototype = { - compile: function(ast) { - var self = this; - findConstantAndWatchExpressions(ast, self.$filter); - var assignable; - var assign; - if ((assignable = assignableAST(ast))) { - assign = this.recurse(assignable); - } - var toWatch = getInputs(ast.body); - var inputs; - if (toWatch) { - inputs = []; - forEach(toWatch, function(watch, key) { - var input = self.recurse(watch); - input.isPure = watch.isPure; - watch.input = input; - inputs.push(input); - watch.watchId = key; - }); - } - var expressions = []; - forEach(ast.body, function(expression) { - expressions.push(self.recurse(expression.expression)); - }); - var fn = ast.body.length === 0 ? noop : - ast.body.length === 1 ? expressions[0] : - function(scope, locals) { - var lastValue; - forEach(expressions, function(exp) { - lastValue = exp(scope, locals); - }); - return lastValue; - }; - if (assign) { - fn.assign = function(scope, value, locals) { - return assign(scope, locals, value); - }; - } - if (inputs) { - fn.inputs = inputs; - } - return fn; - }, - - recurse: function(ast, context, create) { - var left, right, self = this, args; - if (ast.input) { - return this.inputs(ast.input, ast.watchId); - } - switch (ast.type) { - case AST.Literal: - return this.value(ast.value, context); - case AST.UnaryExpression: - right = this.recurse(ast.argument); - return this['unary' + ast.operator](right, context); - case AST.BinaryExpression: - left = this.recurse(ast.left); - right = this.recurse(ast.right); - return this['binary' + ast.operator](left, right, context); - case AST.LogicalExpression: - left = this.recurse(ast.left); - right = this.recurse(ast.right); - return this['binary' + ast.operator](left, right, context); - case AST.ConditionalExpression: - return this['ternary?:']( - this.recurse(ast.test), - this.recurse(ast.alternate), - this.recurse(ast.consequent), - context - ); - case AST.Identifier: - return self.identifier(ast.name, context, create); - case AST.MemberExpression: - left = this.recurse(ast.object, false, !!create); - if (!ast.computed) { - right = ast.property.name; - } - if (ast.computed) right = this.recurse(ast.property); - return ast.computed ? - this.computedMember(left, right, context, create) : - this.nonComputedMember(left, right, context, create); - case AST.CallExpression: - args = []; - forEach(ast.arguments, function(expr) { - args.push(self.recurse(expr)); - }); - if (ast.filter) right = this.$filter(ast.callee.name); - if (!ast.filter) right = this.recurse(ast.callee, true); - return ast.filter ? - function(scope, locals, assign, inputs) { - var values = []; - for (var i = 0; i < args.length; ++i) { - values.push(args[i](scope, locals, assign, inputs)); - } - var value = right.apply(undefined, values, inputs); - return context ? {context: undefined, name: undefined, value: value} : value; - } : - function(scope, locals, assign, inputs) { - var rhs = right(scope, locals, assign, inputs); - var value; - if (rhs.value != null) { - var values = []; - for (var i = 0; i < args.length; ++i) { - values.push(args[i](scope, locals, assign, inputs)); - } - value = rhs.value.apply(rhs.context, values); - } - return context ? {value: value} : value; - }; - case AST.AssignmentExpression: - left = this.recurse(ast.left, true, 1); - right = this.recurse(ast.right); - return function(scope, locals, assign, inputs) { - var lhs = left(scope, locals, assign, inputs); - var rhs = right(scope, locals, assign, inputs); - lhs.context[lhs.name] = rhs; - return context ? {value: rhs} : rhs; - }; - case AST.ArrayExpression: - args = []; - forEach(ast.elements, function(expr) { - args.push(self.recurse(expr)); - }); - return function(scope, locals, assign, inputs) { - var value = []; - for (var i = 0; i < args.length; ++i) { - value.push(args[i](scope, locals, assign, inputs)); - } - return context ? {value: value} : value; - }; - case AST.ObjectExpression: - args = []; - forEach(ast.properties, function(property) { - if (property.computed) { - args.push({key: self.recurse(property.key), - computed: true, - value: self.recurse(property.value) - }); - } else { - args.push({key: property.key.type === AST.Identifier ? - property.key.name : - ('' + property.key.value), - computed: false, - value: self.recurse(property.value) - }); - } - }); - return function(scope, locals, assign, inputs) { - var value = {}; - for (var i = 0; i < args.length; ++i) { - if (args[i].computed) { - value[args[i].key(scope, locals, assign, inputs)] = args[i].value(scope, locals, assign, inputs); - } else { - value[args[i].key] = args[i].value(scope, locals, assign, inputs); - } - } - return context ? {value: value} : value; - }; - case AST.ThisExpression: - return function(scope) { - return context ? {value: scope} : scope; - }; - case AST.LocalsExpression: - return function(scope, locals) { - return context ? {value: locals} : locals; - }; - case AST.NGValueParameter: - return function(scope, locals, assign) { - return context ? {value: assign} : assign; - }; - } - }, - - 'unary+': function(argument, context) { - return function(scope, locals, assign, inputs) { - var arg = argument(scope, locals, assign, inputs); - if (isDefined(arg)) { - arg = +arg; - } else { - arg = 0; - } - return context ? {value: arg} : arg; - }; - }, - 'unary-': function(argument, context) { - return function(scope, locals, assign, inputs) { - var arg = argument(scope, locals, assign, inputs); - if (isDefined(arg)) { - arg = -arg; - } else { - arg = -0; - } - return context ? {value: arg} : arg; - }; - }, - 'unary!': function(argument, context) { - return function(scope, locals, assign, inputs) { - var arg = !argument(scope, locals, assign, inputs); - return context ? {value: arg} : arg; - }; - }, - 'binary+': function(left, right, context) { - return function(scope, locals, assign, inputs) { - var lhs = left(scope, locals, assign, inputs); - var rhs = right(scope, locals, assign, inputs); - var arg = plusFn(lhs, rhs); - return context ? {value: arg} : arg; - }; - }, - 'binary-': function(left, right, context) { - return function(scope, locals, assign, inputs) { - var lhs = left(scope, locals, assign, inputs); - var rhs = right(scope, locals, assign, inputs); - var arg = (isDefined(lhs) ? lhs : 0) - (isDefined(rhs) ? rhs : 0); - return context ? {value: arg} : arg; - }; - }, - 'binary*': function(left, right, context) { - return function(scope, locals, assign, inputs) { - var arg = left(scope, locals, assign, inputs) * right(scope, locals, assign, inputs); - return context ? {value: arg} : arg; - }; - }, - 'binary/': function(left, right, context) { - return function(scope, locals, assign, inputs) { - var arg = left(scope, locals, assign, inputs) / right(scope, locals, assign, inputs); - return context ? {value: arg} : arg; - }; - }, - 'binary%': function(left, right, context) { - return function(scope, locals, assign, inputs) { - var arg = left(scope, locals, assign, inputs) % right(scope, locals, assign, inputs); - return context ? {value: arg} : arg; - }; - }, - 'binary===': function(left, right, context) { - return function(scope, locals, assign, inputs) { - var arg = left(scope, locals, assign, inputs) === right(scope, locals, assign, inputs); - return context ? {value: arg} : arg; - }; - }, - 'binary!==': function(left, right, context) { - return function(scope, locals, assign, inputs) { - var arg = left(scope, locals, assign, inputs) !== right(scope, locals, assign, inputs); - return context ? {value: arg} : arg; - }; - }, - 'binary==': function(left, right, context) { - return function(scope, locals, assign, inputs) { - // eslint-disable-next-line eqeqeq - var arg = left(scope, locals, assign, inputs) == right(scope, locals, assign, inputs); - return context ? {value: arg} : arg; - }; - }, - 'binary!=': function(left, right, context) { - return function(scope, locals, assign, inputs) { - // eslint-disable-next-line eqeqeq - var arg = left(scope, locals, assign, inputs) != right(scope, locals, assign, inputs); - return context ? {value: arg} : arg; - }; - }, - 'binary<': function(left, right, context) { - return function(scope, locals, assign, inputs) { - var arg = left(scope, locals, assign, inputs) < right(scope, locals, assign, inputs); - return context ? {value: arg} : arg; - }; - }, - 'binary>': function(left, right, context) { - return function(scope, locals, assign, inputs) { - var arg = left(scope, locals, assign, inputs) > right(scope, locals, assign, inputs); - return context ? {value: arg} : arg; - }; - }, - 'binary<=': function(left, right, context) { - return function(scope, locals, assign, inputs) { - var arg = left(scope, locals, assign, inputs) <= right(scope, locals, assign, inputs); - return context ? {value: arg} : arg; - }; - }, - 'binary>=': function(left, right, context) { - return function(scope, locals, assign, inputs) { - var arg = left(scope, locals, assign, inputs) >= right(scope, locals, assign, inputs); - return context ? {value: arg} : arg; - }; - }, - 'binary&&': function(left, right, context) { - return function(scope, locals, assign, inputs) { - var arg = left(scope, locals, assign, inputs) && right(scope, locals, assign, inputs); - return context ? {value: arg} : arg; - }; - }, - 'binary||': function(left, right, context) { - return function(scope, locals, assign, inputs) { - var arg = left(scope, locals, assign, inputs) || right(scope, locals, assign, inputs); - return context ? {value: arg} : arg; - }; - }, - 'ternary?:': function(test, alternate, consequent, context) { - return function(scope, locals, assign, inputs) { - var arg = test(scope, locals, assign, inputs) ? alternate(scope, locals, assign, inputs) : consequent(scope, locals, assign, inputs); - return context ? {value: arg} : arg; - }; - }, - value: function(value, context) { - return function() { return context ? {context: undefined, name: undefined, value: value} : value; }; - }, - identifier: function(name, context, create) { - return function(scope, locals, assign, inputs) { - var base = locals && (name in locals) ? locals : scope; - if (create && create !== 1 && base && base[name] == null) { - base[name] = {}; - } - var value = base ? base[name] : undefined; - if (context) { - return {context: base, name: name, value: value}; - } else { - return value; - } - }; - }, - computedMember: function(left, right, context, create) { - return function(scope, locals, assign, inputs) { - var lhs = left(scope, locals, assign, inputs); - var rhs; - var value; - if (lhs != null) { - rhs = right(scope, locals, assign, inputs); - rhs = getStringValue(rhs); - if (create && create !== 1) { - if (lhs && !(lhs[rhs])) { - lhs[rhs] = {}; - } - } - value = lhs[rhs]; - } - if (context) { - return {context: lhs, name: rhs, value: value}; - } else { - return value; - } - }; - }, - nonComputedMember: function(left, right, context, create) { - return function(scope, locals, assign, inputs) { - var lhs = left(scope, locals, assign, inputs); - if (create && create !== 1) { - if (lhs && lhs[right] == null) { - lhs[right] = {}; - } - } - var value = lhs != null ? lhs[right] : undefined; - if (context) { - return {context: lhs, name: right, value: value}; - } else { - return value; - } - }; - }, - inputs: function(input, watchId) { - return function(scope, value, locals, inputs) { - if (inputs) return inputs[watchId]; - return input(scope, value, locals); - }; - } -}; - -/** - * @constructor - */ -function Parser(lexer, $filter, options) { - this.ast = new AST(lexer, options); - this.astCompiler = options.csp ? new ASTInterpreter($filter) : - new ASTCompiler($filter); -} - -Parser.prototype = { - constructor: Parser, - - parse: function(text) { - var ast = this.getAst(text); - var fn = this.astCompiler.compile(ast.ast); - fn.literal = isLiteral(ast.ast); - fn.constant = isConstant(ast.ast); - fn.oneTime = ast.oneTime; - return fn; - }, - - getAst: function(exp) { - var oneTime = false; - exp = exp.trim(); - - if (exp.charAt(0) === ':' && exp.charAt(1) === ':') { - oneTime = true; - exp = exp.substring(2); - } - return { - ast: this.ast.ast(exp), - oneTime: oneTime - }; - } -}; - -function getValueOf(value) { - return isFunction(value.valueOf) ? value.valueOf() : objectValueOf.call(value); -} - -/////////////////////////////////// - -/** - * @ngdoc service - * @name $parse - * @kind function - * - * @description - * - * Converts AngularJS {@link guide/expression expression} into a function. - * - * ```js - * var getter = $parse('user.name'); - * var setter = getter.assign; - * var context = {user:{name:'AngularJS'}}; - * var locals = {user:{name:'local'}}; - * - * expect(getter(context)).toEqual('AngularJS'); - * setter(context, 'newValue'); - * expect(context.user.name).toEqual('newValue'); - * expect(getter(context, locals)).toEqual('local'); - * ``` - * - * - * @param {string} expression String expression to compile. - * @returns {function(context, locals)} a function which represents the compiled expression: - * - * * `context` – `{object}` – an object against which any expressions embedded in the strings - * are evaluated against (typically a scope object). - * * `locals` – `{object=}` – local variables context object, useful for overriding values in - * `context`. - * - * The returned function also has the following properties: - * * `literal` – `{boolean}` – whether the expression's top-level node is a JavaScript - * literal. - * * `constant` – `{boolean}` – whether the expression is made entirely of JavaScript - * constant literals. - * * `assign` – `{?function(context, value)}` – if the expression is assignable, this will be - * set to a function to change its value on the given context. - * - */ - - -/** - * @ngdoc provider - * @name $parseProvider - * @this - * - * @description - * `$parseProvider` can be used for configuring the default behavior of the {@link ng.$parse $parse} - * service. - */ -function $ParseProvider() { - var cache = createMap(); - var literals = { - 'true': true, - 'false': false, - 'null': null, - 'undefined': undefined - }; - var identStart, identContinue; - - /** - * @ngdoc method - * @name $parseProvider#addLiteral - * @description - * - * Configure $parse service to add literal values that will be present as literal at expressions. - * - * @param {string} literalName Token for the literal value. The literal name value must be a valid literal name. - * @param {*} literalValue Value for this literal. All literal values must be primitives or `undefined`. - * - **/ - this.addLiteral = function(literalName, literalValue) { - literals[literalName] = literalValue; - }; - - /** - * @ngdoc method - * @name $parseProvider#setIdentifierFns - * - * @description - * - * Allows defining the set of characters that are allowed in AngularJS expressions. The function - * `identifierStart` will get called to know if a given character is a valid character to be the - * first character for an identifier. The function `identifierContinue` will get called to know if - * a given character is a valid character to be a follow-up identifier character. The functions - * `identifierStart` and `identifierContinue` will receive as arguments the single character to be - * identifier and the character code point. These arguments will be `string` and `numeric`. Keep in - * mind that the `string` parameter can be two characters long depending on the character - * representation. It is expected for the function to return `true` or `false`, whether that - * character is allowed or not. - * - * Since this function will be called extensively, keep the implementation of these functions fast, - * as the performance of these functions have a direct impact on the expressions parsing speed. - * - * @param {function=} identifierStart The function that will decide whether the given character is - * a valid identifier start character. - * @param {function=} identifierContinue The function that will decide whether the given character is - * a valid identifier continue character. - */ - this.setIdentifierFns = function(identifierStart, identifierContinue) { - identStart = identifierStart; - identContinue = identifierContinue; - return this; - }; - - this.$get = ['$filter', function($filter) { - var noUnsafeEval = csp().noUnsafeEval; - var $parseOptions = { - csp: noUnsafeEval, - literals: copy(literals), - isIdentifierStart: isFunction(identStart) && identStart, - isIdentifierContinue: isFunction(identContinue) && identContinue - }; - $parse.$$getAst = $$getAst; - return $parse; - - function $parse(exp, interceptorFn) { - var parsedExpression, cacheKey; - - switch (typeof exp) { - case 'string': - exp = exp.trim(); - cacheKey = exp; - - parsedExpression = cache[cacheKey]; - - if (!parsedExpression) { - var lexer = new Lexer($parseOptions); - var parser = new Parser(lexer, $filter, $parseOptions); - parsedExpression = parser.parse(exp); - - cache[cacheKey] = addWatchDelegate(parsedExpression); - } - return addInterceptor(parsedExpression, interceptorFn); - - case 'function': - return addInterceptor(exp, interceptorFn); - - default: - return addInterceptor(noop, interceptorFn); - } - } - - function $$getAst(exp) { - var lexer = new Lexer($parseOptions); - var parser = new Parser(lexer, $filter, $parseOptions); - return parser.getAst(exp).ast; - } - - function expressionInputDirtyCheck(newValue, oldValueOfValue, compareObjectIdentity) { - - if (newValue == null || oldValueOfValue == null) { // null/undefined - return newValue === oldValueOfValue; - } - - if (typeof newValue === 'object') { - - // attempt to convert the value to a primitive type - // TODO(docs): add a note to docs that by implementing valueOf even objects and arrays can - // be cheaply dirty-checked - newValue = getValueOf(newValue); - - if (typeof newValue === 'object' && !compareObjectIdentity) { - // objects/arrays are not supported - deep-watching them would be too expensive - return false; - } - - // fall-through to the primitive equality check - } - - //Primitive or NaN - // eslint-disable-next-line no-self-compare - return newValue === oldValueOfValue || (newValue !== newValue && oldValueOfValue !== oldValueOfValue); - } - - function inputsWatchDelegate(scope, listener, objectEquality, parsedExpression, prettyPrintExpression) { - var inputExpressions = parsedExpression.inputs; - var lastResult; - - if (inputExpressions.length === 1) { - var oldInputValueOf = expressionInputDirtyCheck; // init to something unique so that equals check fails - inputExpressions = inputExpressions[0]; - return scope.$watch(function expressionInputWatch(scope) { - var newInputValue = inputExpressions(scope); - if (!expressionInputDirtyCheck(newInputValue, oldInputValueOf, inputExpressions.isPure)) { - lastResult = parsedExpression(scope, undefined, undefined, [newInputValue]); - oldInputValueOf = newInputValue && getValueOf(newInputValue); - } - return lastResult; - }, listener, objectEquality, prettyPrintExpression); - } - - var oldInputValueOfValues = []; - var oldInputValues = []; - for (var i = 0, ii = inputExpressions.length; i < ii; i++) { - oldInputValueOfValues[i] = expressionInputDirtyCheck; // init to something unique so that equals check fails - oldInputValues[i] = null; - } - - return scope.$watch(function expressionInputsWatch(scope) { - var changed = false; - - for (var i = 0, ii = inputExpressions.length; i < ii; i++) { - var newInputValue = inputExpressions[i](scope); - if (changed || (changed = !expressionInputDirtyCheck(newInputValue, oldInputValueOfValues[i], inputExpressions[i].isPure))) { - oldInputValues[i] = newInputValue; - oldInputValueOfValues[i] = newInputValue && getValueOf(newInputValue); - } - } - - if (changed) { - lastResult = parsedExpression(scope, undefined, undefined, oldInputValues); - } - - return lastResult; - }, listener, objectEquality, prettyPrintExpression); - } - - function oneTimeWatchDelegate(scope, listener, objectEquality, parsedExpression, prettyPrintExpression) { - var isDone = parsedExpression.literal ? isAllDefined : isDefined; - var unwatch, lastValue; - - var exp = parsedExpression.$$intercepted || parsedExpression; - var post = parsedExpression.$$interceptor || identity; - - var useInputs = parsedExpression.inputs && !exp.inputs; - - // Propogate the literal/inputs/constant attributes - // ... but not oneTime since we are handling it - oneTimeWatch.literal = parsedExpression.literal; - oneTimeWatch.constant = parsedExpression.constant; - oneTimeWatch.inputs = parsedExpression.inputs; - - // Allow other delegates to run on this wrapped expression - addWatchDelegate(oneTimeWatch); - - unwatch = scope.$watch(oneTimeWatch, listener, objectEquality, prettyPrintExpression); - - return unwatch; - - function unwatchIfDone() { - if (isDone(lastValue)) { - unwatch(); - } - } - - function oneTimeWatch(scope, locals, assign, inputs) { - lastValue = useInputs && inputs ? inputs[0] : exp(scope, locals, assign, inputs); - if (isDone(lastValue)) { - scope.$$postDigest(unwatchIfDone); - } - return post(lastValue); - } - } - - function isAllDefined(value) { - var allDefined = true; - forEach(value, function(val) { - if (!isDefined(val)) allDefined = false; - }); - return allDefined; - } - - function constantWatchDelegate(scope, listener, objectEquality, parsedExpression) { - var unwatch = scope.$watch(function constantWatch(scope) { - unwatch(); - return parsedExpression(scope); - }, listener, objectEquality); - return unwatch; - } - - function addWatchDelegate(parsedExpression) { - if (parsedExpression.constant) { - parsedExpression.$$watchDelegate = constantWatchDelegate; - } else if (parsedExpression.oneTime) { - parsedExpression.$$watchDelegate = oneTimeWatchDelegate; - } else if (parsedExpression.inputs) { - parsedExpression.$$watchDelegate = inputsWatchDelegate; - } - - return parsedExpression; - } - - function chainInterceptors(first, second) { - function chainedInterceptor(value) { - return second(first(value)); - } - chainedInterceptor.$stateful = first.$stateful || second.$stateful; - chainedInterceptor.$$pure = first.$$pure && second.$$pure; - - return chainedInterceptor; - } - - function addInterceptor(parsedExpression, interceptorFn) { - if (!interceptorFn) return parsedExpression; - - // Extract any existing interceptors out of the parsedExpression - // to ensure the original parsedExpression is always the $$intercepted - if (parsedExpression.$$interceptor) { - interceptorFn = chainInterceptors(parsedExpression.$$interceptor, interceptorFn); - parsedExpression = parsedExpression.$$intercepted; - } - - var useInputs = false; - - var fn = function interceptedExpression(scope, locals, assign, inputs) { - var value = useInputs && inputs ? inputs[0] : parsedExpression(scope, locals, assign, inputs); - return interceptorFn(value); - }; - - // Maintain references to the interceptor/intercepted - fn.$$intercepted = parsedExpression; - fn.$$interceptor = interceptorFn; - - // Propogate the literal/oneTime/constant attributes - fn.literal = parsedExpression.literal; - fn.oneTime = parsedExpression.oneTime; - fn.constant = parsedExpression.constant; - - // Treat the interceptor like filters. - // If it is not $stateful then only watch its inputs. - // If the expression itself has no inputs then use the full expression as an input. - if (!interceptorFn.$stateful) { - useInputs = !parsedExpression.inputs; - fn.inputs = parsedExpression.inputs ? parsedExpression.inputs : [parsedExpression]; - - if (!interceptorFn.$$pure) { - fn.inputs = fn.inputs.map(function(e) { - // Remove the isPure flag of inputs when it is not absolute because they are now wrapped in a - // non-pure interceptor function. - if (e.isPure === PURITY_RELATIVE) { - return function depurifier(s) { return e(s); }; - } - return e; - }); - } - } - - return addWatchDelegate(fn); - } - }]; -} - -/** - * @ngdoc service - * @name $q - * @requires $rootScope - * - * @description - * A service that helps you run functions asynchronously, and use their return values (or exceptions) - * when they are done processing. - * - * This is a [Promises/A+](https://promisesaplus.com/)-compliant implementation of promises/deferred - * objects inspired by [Kris Kowal's Q](https://github.com/kriskowal/q). - * - * $q can be used in two fashions --- one which is more similar to Kris Kowal's Q or jQuery's Deferred - * implementations, and the other which resembles ES6 (ES2015) promises to some degree. - * - * ## $q constructor - * - * The streamlined ES6 style promise is essentially just using $q as a constructor which takes a `resolver` - * function as the first argument. This is similar to the native Promise implementation from ES6, - * see [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise). - * - * While the constructor-style use is supported, not all of the supporting methods from ES6 promises are - * available yet. - * - * It can be used like so: - * - * ```js - * // for the purpose of this example let's assume that variables `$q` and `okToGreet` - * // are available in the current lexical scope (they could have been injected or passed in). - * - * function asyncGreet(name) { - * // perform some asynchronous operation, resolve or reject the promise when appropriate. - * return $q(function(resolve, reject) { - * setTimeout(function() { - * if (okToGreet(name)) { - * resolve('Hello, ' + name + '!'); - * } else { - * reject('Greeting ' + name + ' is not allowed.'); - * } - * }, 1000); - * }); - * } - * - * var promise = asyncGreet('Robin Hood'); - * promise.then(function(greeting) { - * alert('Success: ' + greeting); - * }, function(reason) { - * alert('Failed: ' + reason); - * }); - * ``` - * - * Note: progress/notify callbacks are not currently supported via the ES6-style interface. - * - * Note: unlike ES6 behavior, an exception thrown in the constructor function will NOT implicitly reject the promise. - * - * However, the more traditional CommonJS-style usage is still available, and documented below. - * - * [The CommonJS Promise proposal](http://wiki.commonjs.org/wiki/Promises) describes a promise as an - * interface for interacting with an object that represents the result of an action that is - * performed asynchronously, and may or may not be finished at any given point in time. - * - * From the perspective of dealing with error handling, deferred and promise APIs are to - * asynchronous programming what `try`, `catch` and `throw` keywords are to synchronous programming. - * - * ```js - * // for the purpose of this example let's assume that variables `$q` and `okToGreet` - * // are available in the current lexical scope (they could have been injected or passed in). - * - * function asyncGreet(name) { - * var deferred = $q.defer(); - * - * setTimeout(function() { - * deferred.notify('About to greet ' + name + '.'); - * - * if (okToGreet(name)) { - * deferred.resolve('Hello, ' + name + '!'); - * } else { - * deferred.reject('Greeting ' + name + ' is not allowed.'); - * } - * }, 1000); - * - * return deferred.promise; - * } - * - * var promise = asyncGreet('Robin Hood'); - * promise.then(function(greeting) { - * alert('Success: ' + greeting); - * }, function(reason) { - * alert('Failed: ' + reason); - * }, function(update) { - * alert('Got notification: ' + update); - * }); - * ``` - * - * At first it might not be obvious why this extra complexity is worth the trouble. The payoff - * comes in the way of guarantees that promise and deferred APIs make, see - * https://github.com/kriskowal/uncommonjs/blob/master/promises/specification.md. - * - * Additionally the promise api allows for composition that is very hard to do with the - * traditional callback ([CPS](http://en.wikipedia.org/wiki/Continuation-passing_style)) approach. - * For more on this please see the [Q documentation](https://github.com/kriskowal/q) especially the - * section on serial or parallel joining of promises. - * - * ## The Deferred API - * - * A new instance of deferred is constructed by calling `$q.defer()`. - * - * The purpose of the deferred object is to expose the associated Promise instance as well as APIs - * that can be used for signaling the successful or unsuccessful completion, as well as the status - * of the task. - * - * **Methods** - * - * - `resolve(value)` – resolves the derived promise with the `value`. If the value is a rejection - * constructed via `$q.reject`, the promise will be rejected instead. - * - `reject(reason)` – rejects the derived promise with the `reason`. This is equivalent to - * resolving it with a rejection constructed via `$q.reject`. - * - `notify(value)` - provides updates on the status of the promise's execution. This may be called - * multiple times before the promise is either resolved or rejected. - * - * **Properties** - * - * - promise – `{Promise}` – promise object associated with this deferred. - * - * - * ## The Promise API - * - * A new promise instance is created when a deferred instance is created and can be retrieved by - * calling `deferred.promise`. - * - * The purpose of the promise object is to allow for interested parties to get access to the result - * of the deferred task when it completes. - * - * **Methods** - * - * - `then(successCallback, [errorCallback], [notifyCallback])` – regardless of when the promise was or - * will be resolved or rejected, `then` calls one of the success or error callbacks asynchronously - * as soon as the result is available. The callbacks are called with a single argument: the result - * or rejection reason. Additionally, the notify callback may be called zero or more times to - * provide a progress indication, before the promise is resolved or rejected. - * - * This method *returns a new promise* which is resolved or rejected via the return value of the - * `successCallback`, `errorCallback` (unless that value is a promise, in which case it is resolved - * with the value which is resolved in that promise using - * [promise chaining](http://www.html5rocks.com/en/tutorials/es6/promises/#toc-promises-queues)). - * It also notifies via the return value of the `notifyCallback` method. The promise cannot be - * resolved or rejected from the notifyCallback method. The errorCallback and notifyCallback - * arguments are optional. - * - * - `catch(errorCallback)` – shorthand for `promise.then(null, errorCallback)` - * - * - `finally(callback, notifyCallback)` – allows you to observe either the fulfillment or rejection of a promise, - * but to do so without modifying the final value. This is useful to release resources or do some - * clean-up that needs to be done whether the promise was rejected or resolved. See the [full - * specification](https://github.com/kriskowal/q/wiki/API-Reference#promisefinallycallback) for - * more information. - * - * ## Chaining promises - * - * Because calling the `then` method of a promise returns a new derived promise, it is easily - * possible to create a chain of promises: - * - * ```js - * promiseB = promiseA.then(function(result) { - * return result + 1; - * }); - * - * // promiseB will be resolved immediately after promiseA is resolved and its value - * // will be the result of promiseA incremented by 1 - * ``` - * - * It is possible to create chains of any length and since a promise can be resolved with another - * promise (which will defer its resolution further), it is possible to pause/defer resolution of - * the promises at any point in the chain. This makes it possible to implement powerful APIs like - * $http's response interceptors. - * - * - * ## Differences between Kris Kowal's Q and $q - * - * There are two main differences: - * - * - $q is integrated with the {@link ng.$rootScope.Scope} Scope model observation - * mechanism in AngularJS, which means faster propagation of resolution or rejection into your - * models and avoiding unnecessary browser repaints, which would result in flickering UI. - * - Q has many more features than $q, but that comes at a cost of bytes. $q is tiny, but contains - * all the important functionality needed for common async tasks. - * - * ## Testing - * - * ```js - * it('should simulate promise', inject(function($q, $rootScope) { - * var deferred = $q.defer(); - * var promise = deferred.promise; - * var resolvedValue; - * - * promise.then(function(value) { resolvedValue = value; }); - * expect(resolvedValue).toBeUndefined(); - * - * // Simulate resolving of promise - * deferred.resolve(123); - * // Note that the 'then' function does not get called synchronously. - * // This is because we want the promise API to always be async, whether or not - * // it got called synchronously or asynchronously. - * expect(resolvedValue).toBeUndefined(); - * - * // Propagate promise resolution to 'then' functions using $apply(). - * $rootScope.$apply(); - * expect(resolvedValue).toEqual(123); - * })); - * ``` - * - * @param {function(function, function)} resolver Function which is responsible for resolving or - * rejecting the newly created promise. The first parameter is a function which resolves the - * promise, the second parameter is a function which rejects the promise. - * - * @returns {Promise} The newly created promise. - */ -/** - * @ngdoc provider - * @name $qProvider - * @this - * - * @description - */ -function $QProvider() { - var errorOnUnhandledRejections = true; - this.$get = ['$rootScope', '$exceptionHandler', function($rootScope, $exceptionHandler) { - return qFactory(function(callback) { - $rootScope.$evalAsync(callback); - }, $exceptionHandler, errorOnUnhandledRejections); - }]; - - /** - * @ngdoc method - * @name $qProvider#errorOnUnhandledRejections - * @kind function - * - * @description - * Retrieves or overrides whether to generate an error when a rejected promise is not handled. - * This feature is enabled by default. - * - * @param {boolean=} value Whether to generate an error when a rejected promise is not handled. - * @returns {boolean|ng.$qProvider} Current value when called without a new value or self for - * chaining otherwise. - */ - this.errorOnUnhandledRejections = function(value) { - if (isDefined(value)) { - errorOnUnhandledRejections = value; - return this; - } else { - return errorOnUnhandledRejections; - } - }; -} - -/** @this */ -function $$QProvider() { - var errorOnUnhandledRejections = true; - this.$get = ['$browser', '$exceptionHandler', function($browser, $exceptionHandler) { - return qFactory(function(callback) { - $browser.defer(callback); - }, $exceptionHandler, errorOnUnhandledRejections); - }]; - - this.errorOnUnhandledRejections = function(value) { - if (isDefined(value)) { - errorOnUnhandledRejections = value; - return this; - } else { - return errorOnUnhandledRejections; - } - }; -} - -/** - * Constructs a promise manager. - * - * @param {function(function)} nextTick Function for executing functions in the next turn. - * @param {function(...*)} exceptionHandler Function into which unexpected exceptions are passed for - * debugging purposes. - * @param {boolean=} errorOnUnhandledRejections Whether an error should be generated on unhandled - * promises rejections. - * @returns {object} Promise manager. - */ -function qFactory(nextTick, exceptionHandler, errorOnUnhandledRejections) { - var $qMinErr = minErr('$q', TypeError); - var queueSize = 0; - var checkQueue = []; - - /** - * @ngdoc method - * @name ng.$q#defer - * @kind function - * - * @description - * Creates a `Deferred` object which represents a task which will finish in the future. - * - * @returns {Deferred} Returns a new instance of deferred. - */ - function defer() { - return new Deferred(); - } - - function Deferred() { - var promise = this.promise = new Promise(); - //Non prototype methods necessary to support unbound execution :/ - this.resolve = function(val) { resolvePromise(promise, val); }; - this.reject = function(reason) { rejectPromise(promise, reason); }; - this.notify = function(progress) { notifyPromise(promise, progress); }; - } - - - function Promise() { - this.$$state = { status: 0 }; - } - - extend(Promise.prototype, { - then: function(onFulfilled, onRejected, progressBack) { - if (isUndefined(onFulfilled) && isUndefined(onRejected) && isUndefined(progressBack)) { - return this; - } - var result = new Promise(); - - this.$$state.pending = this.$$state.pending || []; - this.$$state.pending.push([result, onFulfilled, onRejected, progressBack]); - if (this.$$state.status > 0) scheduleProcessQueue(this.$$state); - - return result; - }, - - 'catch': function(callback) { - return this.then(null, callback); - }, - - 'finally': function(callback, progressBack) { - return this.then(function(value) { - return handleCallback(value, resolve, callback); - }, function(error) { - return handleCallback(error, reject, callback); - }, progressBack); - } - }); - - function processQueue(state) { - var fn, promise, pending; - - pending = state.pending; - state.processScheduled = false; - state.pending = undefined; - try { - for (var i = 0, ii = pending.length; i < ii; ++i) { - markQStateExceptionHandled(state); - promise = pending[i][0]; - fn = pending[i][state.status]; - try { - if (isFunction(fn)) { - resolvePromise(promise, fn(state.value)); - } else if (state.status === 1) { - resolvePromise(promise, state.value); - } else { - rejectPromise(promise, state.value); - } - } catch (e) { - rejectPromise(promise, e); - // This error is explicitly marked for being passed to the $exceptionHandler - if (e && e.$$passToExceptionHandler === true) { - exceptionHandler(e); - } - } - } - } finally { - --queueSize; - if (errorOnUnhandledRejections && queueSize === 0) { - nextTick(processChecks); - } - } - } - - function processChecks() { - // eslint-disable-next-line no-unmodified-loop-condition - while (!queueSize && checkQueue.length) { - var toCheck = checkQueue.shift(); - if (!isStateExceptionHandled(toCheck)) { - markQStateExceptionHandled(toCheck); - var errorMessage = 'Possibly unhandled rejection: ' + toDebugString(toCheck.value); - if (isError(toCheck.value)) { - exceptionHandler(toCheck.value, errorMessage); - } else { - exceptionHandler(errorMessage); - } - } - } - } - - function scheduleProcessQueue(state) { - if (errorOnUnhandledRejections && !state.pending && state.status === 2 && !isStateExceptionHandled(state)) { - if (queueSize === 0 && checkQueue.length === 0) { - nextTick(processChecks); - } - checkQueue.push(state); - } - if (state.processScheduled || !state.pending) return; - state.processScheduled = true; - ++queueSize; - nextTick(function() { processQueue(state); }); - } - - function resolvePromise(promise, val) { - if (promise.$$state.status) return; - if (val === promise) { - $$reject(promise, $qMinErr( - 'qcycle', - 'Expected promise to be resolved with value other than itself \'{0}\'', - val)); - } else { - $$resolve(promise, val); - } - - } - - function $$resolve(promise, val) { - var then; - var done = false; - try { - if (isObject(val) || isFunction(val)) then = val.then; - if (isFunction(then)) { - promise.$$state.status = -1; - then.call(val, doResolve, doReject, doNotify); - } else { - promise.$$state.value = val; - promise.$$state.status = 1; - scheduleProcessQueue(promise.$$state); - } - } catch (e) { - doReject(e); - } - - function doResolve(val) { - if (done) return; - done = true; - $$resolve(promise, val); - } - function doReject(val) { - if (done) return; - done = true; - $$reject(promise, val); - } - function doNotify(progress) { - notifyPromise(promise, progress); - } - } - - function rejectPromise(promise, reason) { - if (promise.$$state.status) return; - $$reject(promise, reason); - } - - function $$reject(promise, reason) { - promise.$$state.value = reason; - promise.$$state.status = 2; - scheduleProcessQueue(promise.$$state); - } - - function notifyPromise(promise, progress) { - var callbacks = promise.$$state.pending; - - if ((promise.$$state.status <= 0) && callbacks && callbacks.length) { - nextTick(function() { - var callback, result; - for (var i = 0, ii = callbacks.length; i < ii; i++) { - result = callbacks[i][0]; - callback = callbacks[i][3]; - try { - notifyPromise(result, isFunction(callback) ? callback(progress) : progress); - } catch (e) { - exceptionHandler(e); - } - } - }); - } - } - - /** - * @ngdoc method - * @name $q#reject - * @kind function - * - * @description - * Creates a promise that is resolved as rejected with the specified `reason`. This api should be - * used to forward rejection in a chain of promises. If you are dealing with the last promise in - * a promise chain, you don't need to worry about it. - * - * When comparing deferreds/promises to the familiar behavior of try/catch/throw, think of - * `reject` as the `throw` keyword in JavaScript. This also means that if you "catch" an error via - * a promise error callback and you want to forward the error to the promise derived from the - * current promise, you have to "rethrow" the error by returning a rejection constructed via - * `reject`. - * - * ```js - * promiseB = promiseA.then(function(result) { - * // success: do something and resolve promiseB - * // with the old or a new result - * return result; - * }, function(reason) { - * // error: handle the error if possible and - * // resolve promiseB with newPromiseOrValue, - * // otherwise forward the rejection to promiseB - * if (canHandle(reason)) { - * // handle the error and recover - * return newPromiseOrValue; - * } - * return $q.reject(reason); - * }); - * ``` - * - * @param {*} reason Constant, message, exception or an object representing the rejection reason. - * @returns {Promise} Returns a promise that was already resolved as rejected with the `reason`. - */ - function reject(reason) { - var result = new Promise(); - rejectPromise(result, reason); - return result; - } - - function handleCallback(value, resolver, callback) { - var callbackOutput = null; - try { - if (isFunction(callback)) callbackOutput = callback(); - } catch (e) { - return reject(e); - } - if (isPromiseLike(callbackOutput)) { - return callbackOutput.then(function() { - return resolver(value); - }, reject); - } else { - return resolver(value); - } - } - - /** - * @ngdoc method - * @name $q#when - * @kind function - * - * @description - * Wraps an object that might be a value or a (3rd party) then-able promise into a $q promise. - * This is useful when you are dealing with an object that might or might not be a promise, or if - * the promise comes from a source that can't be trusted. - * - * @param {*} value Value or a promise - * @param {Function=} successCallback - * @param {Function=} errorCallback - * @param {Function=} progressCallback - * @returns {Promise} Returns a promise of the passed value or promise - */ - - - function when(value, callback, errback, progressBack) { - var result = new Promise(); - resolvePromise(result, value); - return result.then(callback, errback, progressBack); - } - - /** - * @ngdoc method - * @name $q#resolve - * @kind function - * - * @description - * Alias of {@link ng.$q#when when} to maintain naming consistency with ES6. - * - * @param {*} value Value or a promise - * @param {Function=} successCallback - * @param {Function=} errorCallback - * @param {Function=} progressCallback - * @returns {Promise} Returns a promise of the passed value or promise - */ - var resolve = when; - - /** - * @ngdoc method - * @name $q#all - * @kind function - * - * @description - * Combines multiple promises into a single promise that is resolved when all of the input - * promises are resolved. - * - * @param {Array.|Object.} promises An array or hash of promises. - * @returns {Promise} Returns a single promise that will be resolved with an array/hash of values, - * each value corresponding to the promise at the same index/key in the `promises` array/hash. - * If any of the promises is resolved with a rejection, this resulting promise will be rejected - * with the same rejection value. - */ - - function all(promises) { - var result = new Promise(), - counter = 0, - results = isArray(promises) ? [] : {}; - - forEach(promises, function(promise, key) { - counter++; - when(promise).then(function(value) { - results[key] = value; - if (!(--counter)) resolvePromise(result, results); - }, function(reason) { - rejectPromise(result, reason); - }); - }); - - if (counter === 0) { - resolvePromise(result, results); - } - - return result; - } - - /** - * @ngdoc method - * @name $q#race - * @kind function - * - * @description - * Returns a promise that resolves or rejects as soon as one of those promises - * resolves or rejects, with the value or reason from that promise. - * - * @param {Array.|Object.} promises An array or hash of promises. - * @returns {Promise} a promise that resolves or rejects as soon as one of the `promises` - * resolves or rejects, with the value or reason from that promise. - */ - - function race(promises) { - var deferred = defer(); - - forEach(promises, function(promise) { - when(promise).then(deferred.resolve, deferred.reject); - }); - - return deferred.promise; - } - - function $Q(resolver) { - if (!isFunction(resolver)) { - throw $qMinErr('norslvr', 'Expected resolverFn, got \'{0}\'', resolver); - } - - var promise = new Promise(); - - function resolveFn(value) { - resolvePromise(promise, value); - } - - function rejectFn(reason) { - rejectPromise(promise, reason); - } - - resolver(resolveFn, rejectFn); - - return promise; - } - - // Let's make the instanceof operator work for promises, so that - // `new $q(fn) instanceof $q` would evaluate to true. - $Q.prototype = Promise.prototype; - - $Q.defer = defer; - $Q.reject = reject; - $Q.when = when; - $Q.resolve = resolve; - $Q.all = all; - $Q.race = race; - - return $Q; -} - -function isStateExceptionHandled(state) { - return !!state.pur; -} -function markQStateExceptionHandled(state) { - state.pur = true; -} -function markQExceptionHandled(q) { - // Built-in `$q` promises will always have a `$$state` property. This check is to allow - // overwriting `$q` with a different promise library (e.g. Bluebird + angular-bluebird-promises). - // (Currently, this is the only method that might be called with a promise, even if it is not - // created by the built-in `$q`.) - if (q.$$state) { - markQStateExceptionHandled(q.$$state); - } -} - -/** @this */ -function $$RAFProvider() { //rAF - this.$get = ['$window', '$timeout', function($window, $timeout) { - var requestAnimationFrame = $window.requestAnimationFrame || - $window.webkitRequestAnimationFrame; - - var cancelAnimationFrame = $window.cancelAnimationFrame || - $window.webkitCancelAnimationFrame || - $window.webkitCancelRequestAnimationFrame; - - var rafSupported = !!requestAnimationFrame; - var raf = rafSupported - ? function(fn) { - var id = requestAnimationFrame(fn); - return function() { - cancelAnimationFrame(id); - }; - } - : function(fn) { - var timer = $timeout(fn, 16.66, false); // 1000 / 60 = 16.666 - return function() { - $timeout.cancel(timer); - }; - }; - - raf.supported = rafSupported; - - return raf; - }]; -} - -/** - * DESIGN NOTES - * - * The design decisions behind the scope are heavily favored for speed and memory consumption. - * - * The typical use of scope is to watch the expressions, which most of the time return the same - * value as last time so we optimize the operation. - * - * Closures construction is expensive in terms of speed as well as memory: - * - No closures, instead use prototypical inheritance for API - * - Internal state needs to be stored on scope directly, which means that private state is - * exposed as $$____ properties - * - * Loop operations are optimized by using while(count--) { ... } - * - This means that in order to keep the same order of execution as addition we have to add - * items to the array at the beginning (unshift) instead of at the end (push) - * - * Child scopes are created and removed often - * - Using an array would be slow since inserts in the middle are expensive; so we use linked lists - * - * There are fewer watches than observers. This is why you don't want the observer to be implemented - * in the same way as watch. Watch requires return of the initialization function which is expensive - * to construct. - */ - - -/** - * @ngdoc provider - * @name $rootScopeProvider - * @description - * - * Provider for the $rootScope service. - */ - -/** - * @ngdoc method - * @name $rootScopeProvider#digestTtl - * @description - * - * Sets the number of `$digest` iterations the scope should attempt to execute before giving up and - * assuming that the model is unstable. - * - * The current default is 10 iterations. - * - * In complex applications it's possible that the dependencies between `$watch`s will result in - * several digest iterations. However if an application needs more than the default 10 digest - * iterations for its model to stabilize then you should investigate what is causing the model to - * continuously change during the digest. - * - * Increasing the TTL could have performance implications, so you should not change it without - * proper justification. - * - * @param {number} limit The number of digest iterations. - */ - - -/** - * @ngdoc service - * @name $rootScope - * @this - * - * @description - * - * Every application has a single root {@link ng.$rootScope.Scope scope}. - * All other scopes are descendant scopes of the root scope. Scopes provide separation - * between the model and the view, via a mechanism for watching the model for changes. - * They also provide event emission/broadcast and subscription facility. See the - * {@link guide/scope developer guide on scopes}. - */ -function $RootScopeProvider() { - var TTL = 10; - var $rootScopeMinErr = minErr('$rootScope'); - var lastDirtyWatch = null; - var applyAsyncId = null; - - this.digestTtl = function(value) { - if (arguments.length) { - TTL = value; - } - return TTL; - }; - - function createChildScopeClass(parent) { - function ChildScope() { - this.$$watchers = this.$$nextSibling = - this.$$childHead = this.$$childTail = null; - this.$$listeners = {}; - this.$$listenerCount = {}; - this.$$watchersCount = 0; - this.$id = nextUid(); - this.$$ChildScope = null; - this.$$suspended = false; - } - ChildScope.prototype = parent; - return ChildScope; - } - - this.$get = ['$exceptionHandler', '$parse', '$browser', - function($exceptionHandler, $parse, $browser) { - - function destroyChildScope($event) { - $event.currentScope.$$destroyed = true; - } - - function cleanUpScope($scope) { - - // Support: IE 9 only - if (msie === 9) { - // There is a memory leak in IE9 if all child scopes are not disconnected - // completely when a scope is destroyed. So this code will recurse up through - // all this scopes children - // - // See issue https://github.com/angular/angular.js/issues/10706 - if ($scope.$$childHead) { - cleanUpScope($scope.$$childHead); - } - if ($scope.$$nextSibling) { - cleanUpScope($scope.$$nextSibling); - } - } - - // The code below works around IE9 and V8's memory leaks - // - // See: - // - https://code.google.com/p/v8/issues/detail?id=2073#c26 - // - https://github.com/angular/angular.js/issues/6794#issuecomment-38648909 - // - https://github.com/angular/angular.js/issues/1313#issuecomment-10378451 - - $scope.$parent = $scope.$$nextSibling = $scope.$$prevSibling = $scope.$$childHead = - $scope.$$childTail = $scope.$root = $scope.$$watchers = null; - } - - /** - * @ngdoc type - * @name $rootScope.Scope - * - * @description - * A root scope can be retrieved using the {@link ng.$rootScope $rootScope} key from the - * {@link auto.$injector $injector}. Child scopes are created using the - * {@link ng.$rootScope.Scope#$new $new()} method. (Most scopes are created automatically when - * compiled HTML template is executed.) See also the {@link guide/scope Scopes guide} for - * an in-depth introduction and usage examples. - * - * - * ## Inheritance - * A scope can inherit from a parent scope, as in this example: - * ```js - var parent = $rootScope; - var child = parent.$new(); - - parent.salutation = "Hello"; - expect(child.salutation).toEqual('Hello'); - - child.salutation = "Welcome"; - expect(child.salutation).toEqual('Welcome'); - expect(parent.salutation).toEqual('Hello'); - * ``` - * - * When interacting with `Scope` in tests, additional helper methods are available on the - * instances of `Scope` type. See {@link ngMock.$rootScope.Scope ngMock Scope} for additional - * details. - * - * - * @param {Object.=} providers Map of service factory which need to be - * provided for the current scope. Defaults to {@link ng}. - * @param {Object.=} instanceCache Provides pre-instantiated services which should - * append/override services provided by `providers`. This is handy - * when unit-testing and having the need to override a default - * service. - * @returns {Object} Newly created scope. - * - */ - function Scope() { - this.$id = nextUid(); - this.$$phase = this.$parent = this.$$watchers = - this.$$nextSibling = this.$$prevSibling = - this.$$childHead = this.$$childTail = null; - this.$root = this; - this.$$destroyed = false; - this.$$suspended = false; - this.$$listeners = {}; - this.$$listenerCount = {}; - this.$$watchersCount = 0; - this.$$isolateBindings = null; - } - - /** - * @ngdoc property - * @name $rootScope.Scope#$id - * - * @description - * Unique scope ID (monotonically increasing) useful for debugging. - */ - - /** - * @ngdoc property - * @name $rootScope.Scope#$parent - * - * @description - * Reference to the parent scope. - */ - - /** - * @ngdoc property - * @name $rootScope.Scope#$root - * - * @description - * Reference to the root scope. - */ - - Scope.prototype = { - constructor: Scope, - /** - * @ngdoc method - * @name $rootScope.Scope#$new - * @kind function - * - * @description - * Creates a new child {@link ng.$rootScope.Scope scope}. - * - * The parent scope will propagate the {@link ng.$rootScope.Scope#$digest $digest()} event. - * The scope can be removed from the scope hierarchy using {@link ng.$rootScope.Scope#$destroy $destroy()}. - * - * {@link ng.$rootScope.Scope#$destroy $destroy()} must be called on a scope when it is - * desired for the scope and its child scopes to be permanently detached from the parent and - * thus stop participating in model change detection and listener notification by invoking. - * - * @param {boolean} isolate If true, then the scope does not prototypically inherit from the - * parent scope. The scope is isolated, as it can not see parent scope properties. - * When creating widgets, it is useful for the widget to not accidentally read parent - * state. - * - * @param {Scope} [parent=this] The {@link ng.$rootScope.Scope `Scope`} that will be the `$parent` - * of the newly created scope. Defaults to `this` scope if not provided. - * This is used when creating a transclude scope to correctly place it - * in the scope hierarchy while maintaining the correct prototypical - * inheritance. - * - * @returns {Object} The newly created child scope. - * - */ - $new: function(isolate, parent) { - var child; - - parent = parent || this; - - if (isolate) { - child = new Scope(); - child.$root = this.$root; - } else { - // Only create a child scope class if somebody asks for one, - // but cache it to allow the VM to optimize lookups. - if (!this.$$ChildScope) { - this.$$ChildScope = createChildScopeClass(this); - } - child = new this.$$ChildScope(); - } - child.$parent = parent; - child.$$prevSibling = parent.$$childTail; - if (parent.$$childHead) { - parent.$$childTail.$$nextSibling = child; - parent.$$childTail = child; - } else { - parent.$$childHead = parent.$$childTail = child; - } - - // When the new scope is not isolated or we inherit from `this`, and - // the parent scope is destroyed, the property `$$destroyed` is inherited - // prototypically. In all other cases, this property needs to be set - // when the parent scope is destroyed. - // The listener needs to be added after the parent is set - if (isolate || parent !== this) child.$on('$destroy', destroyChildScope); - - return child; - }, - - /** - * @ngdoc method - * @name $rootScope.Scope#$watch - * @kind function - * - * @description - * Registers a `listener` callback to be executed whenever the `watchExpression` changes. - * - * - The `watchExpression` is called on every call to {@link ng.$rootScope.Scope#$digest - * $digest()} and should return the value that will be watched. (`watchExpression` should not change - * its value when executed multiple times with the same input because it may be executed multiple - * times by {@link ng.$rootScope.Scope#$digest $digest()}. That is, `watchExpression` should be - * [idempotent](http://en.wikipedia.org/wiki/Idempotence).) - * - The `listener` is called only when the value from the current `watchExpression` and the - * previous call to `watchExpression` are not equal (with the exception of the initial run, - * see below). Inequality is determined according to reference inequality, - * [strict comparison](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comparison_Operators) - * via the `!==` Javascript operator, unless `objectEquality == true` - * (see next point) - * - When `objectEquality == true`, inequality of the `watchExpression` is determined - * according to the {@link angular.equals} function. To save the value of the object for - * later comparison, the {@link angular.copy} function is used. This therefore means that - * watching complex objects will have adverse memory and performance implications. - * - This should not be used to watch for changes in objects that are (or contain) - * [File](https://developer.mozilla.org/docs/Web/API/File) objects due to limitations with {@link angular.copy `angular.copy`}. - * - The watch `listener` may change the model, which may trigger other `listener`s to fire. - * This is achieved by rerunning the watchers until no changes are detected. The rerun - * iteration limit is 10 to prevent an infinite loop deadlock. - * - * - * If you want to be notified whenever {@link ng.$rootScope.Scope#$digest $digest} is called, - * you can register a `watchExpression` function with no `listener`. (Be prepared for - * multiple calls to your `watchExpression` because it will execute multiple times in a - * single {@link ng.$rootScope.Scope#$digest $digest} cycle if a change is detected.) - * - * After a watcher is registered with the scope, the `listener` fn is called asynchronously - * (via {@link ng.$rootScope.Scope#$evalAsync $evalAsync}) to initialize the - * watcher. In rare cases, this is undesirable because the listener is called when the result - * of `watchExpression` didn't change. To detect this scenario within the `listener` fn, you - * can compare the `newVal` and `oldVal`. If these two values are identical (`===`) then the - * listener was called due to initialization. - * - * - * - * @example - * ```js - // let's assume that scope was dependency injected as the $rootScope - var scope = $rootScope; - scope.name = 'misko'; - scope.counter = 0; - - expect(scope.counter).toEqual(0); - scope.$watch('name', function(newValue, oldValue) { - scope.counter = scope.counter + 1; - }); - expect(scope.counter).toEqual(0); - - scope.$digest(); - // the listener is always called during the first $digest loop after it was registered - expect(scope.counter).toEqual(1); - - scope.$digest(); - // but now it will not be called unless the value changes - expect(scope.counter).toEqual(1); - - scope.name = 'adam'; - scope.$digest(); - expect(scope.counter).toEqual(2); - - - - // Using a function as a watchExpression - var food; - scope.foodCounter = 0; - expect(scope.foodCounter).toEqual(0); - scope.$watch( - // This function returns the value being watched. It is called for each turn of the $digest loop - function() { return food; }, - // This is the change listener, called when the value returned from the above function changes - function(newValue, oldValue) { - if ( newValue !== oldValue ) { - // Only increment the counter if the value changed - scope.foodCounter = scope.foodCounter + 1; - } - } - ); - // No digest has been run so the counter will be zero - expect(scope.foodCounter).toEqual(0); - - // Run the digest but since food has not changed count will still be zero - scope.$digest(); - expect(scope.foodCounter).toEqual(0); - - // Update food and run digest. Now the counter will increment - food = 'cheeseburger'; - scope.$digest(); - expect(scope.foodCounter).toEqual(1); - - * ``` - * - * - * - * @param {(function()|string)} watchExpression Expression that is evaluated on each - * {@link ng.$rootScope.Scope#$digest $digest} cycle. A change in the return value triggers - * a call to the `listener`. - * - * - `string`: Evaluated as {@link guide/expression expression} - * - `function(scope)`: called with current `scope` as a parameter. - * @param {function(newVal, oldVal, scope)} listener Callback called whenever the value - * of `watchExpression` changes. - * - * - `newVal` contains the current value of the `watchExpression` - * - `oldVal` contains the previous value of the `watchExpression` - * - `scope` refers to the current scope - * @param {boolean=} [objectEquality=false] Compare for object equality using {@link angular.equals} instead of - * comparing for reference equality. - * @returns {function()} Returns a deregistration function for this listener. - */ - $watch: function(watchExp, listener, objectEquality, prettyPrintExpression) { - var get = $parse(watchExp); - var fn = isFunction(listener) ? listener : noop; - - if (get.$$watchDelegate) { - return get.$$watchDelegate(this, fn, objectEquality, get, watchExp); - } - var scope = this, - array = scope.$$watchers, - watcher = { - fn: fn, - last: initWatchVal, - get: get, - exp: prettyPrintExpression || watchExp, - eq: !!objectEquality - }; - - lastDirtyWatch = null; - - if (!array) { - array = scope.$$watchers = []; - array.$$digestWatchIndex = -1; - } - // we use unshift since we use a while loop in $digest for speed. - // the while loop reads in reverse order. - array.unshift(watcher); - array.$$digestWatchIndex++; - incrementWatchersCount(this, 1); - - return function deregisterWatch() { - var index = arrayRemove(array, watcher); - if (index >= 0) { - incrementWatchersCount(scope, -1); - if (index < array.$$digestWatchIndex) { - array.$$digestWatchIndex--; - } - } - lastDirtyWatch = null; - }; - }, - - /** - * @ngdoc method - * @name $rootScope.Scope#$watchGroup - * @kind function - * - * @description - * A variant of {@link ng.$rootScope.Scope#$watch $watch()} where it watches an array of `watchExpressions`. - * If any one expression in the collection changes the `listener` is executed. - * - * - The items in the `watchExpressions` array are observed via the standard `$watch` operation. Their return - * values are examined for changes on every call to `$digest`. - * - The `listener` is called whenever any expression in the `watchExpressions` array changes. - * - * @param {Array.} watchExpressions Array of expressions that will be individually - * watched using {@link ng.$rootScope.Scope#$watch $watch()} - * - * @param {function(newValues, oldValues, scope)} listener Callback called whenever the return value of any - * expression in `watchExpressions` changes - * The `newValues` array contains the current values of the `watchExpressions`, with the indexes matching - * those of `watchExpression` - * and the `oldValues` array contains the previous values of the `watchExpressions`, with the indexes matching - * those of `watchExpression` - * The `scope` refers to the current scope. - * @returns {function()} Returns a de-registration function for all listeners. - */ - $watchGroup: function(watchExpressions, listener) { - var oldValues = new Array(watchExpressions.length); - var newValues = new Array(watchExpressions.length); - var deregisterFns = []; - var self = this; - var changeReactionScheduled = false; - var firstRun = true; - - if (!watchExpressions.length) { - // No expressions means we call the listener ASAP - var shouldCall = true; - self.$evalAsync(function() { - if (shouldCall) listener(newValues, newValues, self); - }); - return function deregisterWatchGroup() { - shouldCall = false; - }; - } - - if (watchExpressions.length === 1) { - // Special case size of one - return this.$watch(watchExpressions[0], function watchGroupAction(value, oldValue, scope) { - newValues[0] = value; - oldValues[0] = oldValue; - listener(newValues, (value === oldValue) ? newValues : oldValues, scope); - }); - } - - forEach(watchExpressions, function(expr, i) { - var unwatchFn = self.$watch(expr, function watchGroupSubAction(value) { - newValues[i] = value; - if (!changeReactionScheduled) { - changeReactionScheduled = true; - self.$evalAsync(watchGroupAction); - } - }); - deregisterFns.push(unwatchFn); - }); - - function watchGroupAction() { - changeReactionScheduled = false; - - try { - if (firstRun) { - firstRun = false; - listener(newValues, newValues, self); - } else { - listener(newValues, oldValues, self); - } - } finally { - for (var i = 0; i < watchExpressions.length; i++) { - oldValues[i] = newValues[i]; - } - } - } - - return function deregisterWatchGroup() { - while (deregisterFns.length) { - deregisterFns.shift()(); - } - }; - }, - - - /** - * @ngdoc method - * @name $rootScope.Scope#$watchCollection - * @kind function - * - * @description - * Shallow watches the properties of an object and fires whenever any of the properties change - * (for arrays, this implies watching the array items; for object maps, this implies watching - * the properties). If a change is detected, the `listener` callback is fired. - * - * - The `obj` collection is observed via standard $watch operation and is examined on every - * call to $digest() to see if any items have been added, removed, or moved. - * - The `listener` is called whenever anything within the `obj` has changed. Examples include - * adding, removing, and moving items belonging to an object or array. - * - * - * @example - * ```js - $scope.names = ['igor', 'matias', 'misko', 'james']; - $scope.dataCount = 4; - - $scope.$watchCollection('names', function(newNames, oldNames) { - $scope.dataCount = newNames.length; - }); - - expect($scope.dataCount).toEqual(4); - $scope.$digest(); - - //still at 4 ... no changes - expect($scope.dataCount).toEqual(4); - - $scope.names.pop(); - $scope.$digest(); - - //now there's been a change - expect($scope.dataCount).toEqual(3); - * ``` - * - * - * @param {string|function(scope)} obj Evaluated as {@link guide/expression expression}. The - * expression value should evaluate to an object or an array which is observed on each - * {@link ng.$rootScope.Scope#$digest $digest} cycle. Any shallow change within the - * collection will trigger a call to the `listener`. - * - * @param {function(newCollection, oldCollection, scope)} listener a callback function called - * when a change is detected. - * - The `newCollection` object is the newly modified data obtained from the `obj` expression - * - The `oldCollection` object is a copy of the former collection data. - * Due to performance considerations, the`oldCollection` value is computed only if the - * `listener` function declares two or more arguments. - * - The `scope` argument refers to the current scope. - * - * @returns {function()} Returns a de-registration function for this listener. When the - * de-registration function is executed, the internal watch operation is terminated. - */ - $watchCollection: function(obj, listener) { - // Mark the interceptor as - // ... $$pure when literal since the instance will change when any input changes - $watchCollectionInterceptor.$$pure = $parse(obj).literal; - // ... $stateful when non-literal since we must read the state of the collection - $watchCollectionInterceptor.$stateful = !$watchCollectionInterceptor.$$pure; - - var self = this; - // the current value, updated on each dirty-check run - var newValue; - // a shallow copy of the newValue from the last dirty-check run, - // updated to match newValue during dirty-check run - var oldValue; - // a shallow copy of the newValue from when the last change happened - var veryOldValue; - // only track veryOldValue if the listener is asking for it - var trackVeryOldValue = (listener.length > 1); - var changeDetected = 0; - var changeDetector = $parse(obj, $watchCollectionInterceptor); - var internalArray = []; - var internalObject = {}; - var initRun = true; - var oldLength = 0; - - function $watchCollectionInterceptor(_value) { - newValue = _value; - var newLength, key, bothNaN, newItem, oldItem; - - // If the new value is undefined, then return undefined as the watch may be a one-time watch - if (isUndefined(newValue)) return; - - if (!isObject(newValue)) { // if primitive - if (oldValue !== newValue) { - oldValue = newValue; - changeDetected++; - } - } else if (isArrayLike(newValue)) { - if (oldValue !== internalArray) { - // we are transitioning from something which was not an array into array. - oldValue = internalArray; - oldLength = oldValue.length = 0; - changeDetected++; - } - - newLength = newValue.length; - - if (oldLength !== newLength) { - // if lengths do not match we need to trigger change notification - changeDetected++; - oldValue.length = oldLength = newLength; - } - // copy the items to oldValue and look for changes. - for (var i = 0; i < newLength; i++) { - oldItem = oldValue[i]; - newItem = newValue[i]; - - // eslint-disable-next-line no-self-compare - bothNaN = (oldItem !== oldItem) && (newItem !== newItem); - if (!bothNaN && (oldItem !== newItem)) { - changeDetected++; - oldValue[i] = newItem; - } - } - } else { - if (oldValue !== internalObject) { - // we are transitioning from something which was not an object into object. - oldValue = internalObject = {}; - oldLength = 0; - changeDetected++; - } - // copy the items to oldValue and look for changes. - newLength = 0; - for (key in newValue) { - if (hasOwnProperty.call(newValue, key)) { - newLength++; - newItem = newValue[key]; - oldItem = oldValue[key]; - - if (key in oldValue) { - // eslint-disable-next-line no-self-compare - bothNaN = (oldItem !== oldItem) && (newItem !== newItem); - if (!bothNaN && (oldItem !== newItem)) { - changeDetected++; - oldValue[key] = newItem; - } - } else { - oldLength++; - oldValue[key] = newItem; - changeDetected++; - } - } - } - if (oldLength > newLength) { - // we used to have more keys, need to find them and destroy them. - changeDetected++; - for (key in oldValue) { - if (!hasOwnProperty.call(newValue, key)) { - oldLength--; - delete oldValue[key]; - } - } - } - } - return changeDetected; - } - - function $watchCollectionAction() { - if (initRun) { - initRun = false; - listener(newValue, newValue, self); - } else { - listener(newValue, veryOldValue, self); - } - - // make a copy for the next time a collection is changed - if (trackVeryOldValue) { - if (!isObject(newValue)) { - //primitive - veryOldValue = newValue; - } else if (isArrayLike(newValue)) { - veryOldValue = new Array(newValue.length); - for (var i = 0; i < newValue.length; i++) { - veryOldValue[i] = newValue[i]; - } - } else { // if object - veryOldValue = {}; - for (var key in newValue) { - if (hasOwnProperty.call(newValue, key)) { - veryOldValue[key] = newValue[key]; - } - } - } - } - } - - return this.$watch(changeDetector, $watchCollectionAction); - }, - - /** - * @ngdoc method - * @name $rootScope.Scope#$digest - * @kind function - * - * @description - * Processes all of the {@link ng.$rootScope.Scope#$watch watchers} of the current scope and - * its children. Because a {@link ng.$rootScope.Scope#$watch watcher}'s listener can change - * the model, the `$digest()` keeps calling the {@link ng.$rootScope.Scope#$watch watchers} - * until no more listeners are firing. This means that it is possible to get into an infinite - * loop. This function will throw `'Maximum iteration limit exceeded.'` if the number of - * iterations exceeds 10. - * - * Usually, you don't call `$digest()` directly in - * {@link ng.directive:ngController controllers} or in - * {@link ng.$compileProvider#directive directives}. - * Instead, you should call {@link ng.$rootScope.Scope#$apply $apply()} (typically from within - * a {@link ng.$compileProvider#directive directive}), which will force a `$digest()`. - * - * If you want to be notified whenever `$digest()` is called, - * you can register a `watchExpression` function with - * {@link ng.$rootScope.Scope#$watch $watch()} with no `listener`. - * - * In unit tests, you may need to call `$digest()` to simulate the scope life cycle. - * - * @example - * ```js - var scope = ...; - scope.name = 'misko'; - scope.counter = 0; - - expect(scope.counter).toEqual(0); - scope.$watch('name', function(newValue, oldValue) { - scope.counter = scope.counter + 1; - }); - expect(scope.counter).toEqual(0); - - scope.$digest(); - // the listener is always called during the first $digest loop after it was registered - expect(scope.counter).toEqual(1); - - scope.$digest(); - // but now it will not be called unless the value changes - expect(scope.counter).toEqual(1); - - scope.name = 'adam'; - scope.$digest(); - expect(scope.counter).toEqual(2); - * ``` - * - */ - $digest: function() { - var watch, value, last, fn, get, - watchers, - dirty, ttl = TTL, - next, current, target = asyncQueue.length ? $rootScope : this, - watchLog = [], - logIdx, asyncTask; - - beginPhase('$digest'); - // Check for changes to browser url that happened in sync before the call to $digest - $browser.$$checkUrlChange(); - - if (this === $rootScope && applyAsyncId !== null) { - // If this is the root scope, and $applyAsync has scheduled a deferred $apply(), then - // cancel the scheduled $apply and flush the queue of expressions to be evaluated. - $browser.defer.cancel(applyAsyncId); - flushApplyAsync(); - } - - lastDirtyWatch = null; - - do { // "while dirty" loop - dirty = false; - current = target; - - // It's safe for asyncQueuePosition to be a local variable here because this loop can't - // be reentered recursively. Calling $digest from a function passed to $evalAsync would - // lead to a '$digest already in progress' error. - for (var asyncQueuePosition = 0; asyncQueuePosition < asyncQueue.length; asyncQueuePosition++) { - try { - asyncTask = asyncQueue[asyncQueuePosition]; - fn = asyncTask.fn; - fn(asyncTask.scope, asyncTask.locals); - } catch (e) { - $exceptionHandler(e); - } - lastDirtyWatch = null; - } - asyncQueue.length = 0; - - traverseScopesLoop: - do { // "traverse the scopes" loop - if ((watchers = !current.$$suspended && current.$$watchers)) { - // process our watches - watchers.$$digestWatchIndex = watchers.length; - while (watchers.$$digestWatchIndex--) { - try { - watch = watchers[watchers.$$digestWatchIndex]; - // Most common watches are on primitives, in which case we can short - // circuit it with === operator, only when === fails do we use .equals - if (watch) { - get = watch.get; - if ((value = get(current)) !== (last = watch.last) && - !(watch.eq - ? equals(value, last) - : (isNumberNaN(value) && isNumberNaN(last)))) { - dirty = true; - lastDirtyWatch = watch; - watch.last = watch.eq ? copy(value, null) : value; - fn = watch.fn; - fn(value, ((last === initWatchVal) ? value : last), current); - if (ttl < 5) { - logIdx = 4 - ttl; - if (!watchLog[logIdx]) watchLog[logIdx] = []; - watchLog[logIdx].push({ - msg: isFunction(watch.exp) ? 'fn: ' + (watch.exp.name || watch.exp.toString()) : watch.exp, - newVal: value, - oldVal: last - }); - } - } else if (watch === lastDirtyWatch) { - // If the most recently dirty watcher is now clean, short circuit since the remaining watchers - // have already been tested. - dirty = false; - break traverseScopesLoop; - } - } - } catch (e) { - $exceptionHandler(e); - } - } - } - - // Insanity Warning: scope depth-first traversal - // yes, this code is a bit crazy, but it works and we have tests to prove it! - // this piece should be kept in sync with the traversal in $broadcast - // (though it differs due to having the extra check for $$suspended and does not - // check $$listenerCount) - if (!(next = ((!current.$$suspended && current.$$watchersCount && current.$$childHead) || - (current !== target && current.$$nextSibling)))) { - while (current !== target && !(next = current.$$nextSibling)) { - current = current.$parent; - } - } - } while ((current = next)); - - // `break traverseScopesLoop;` takes us to here - - if ((dirty || asyncQueue.length) && !(ttl--)) { - clearPhase(); - throw $rootScopeMinErr('infdig', - '{0} $digest() iterations reached. Aborting!\n' + - 'Watchers fired in the last 5 iterations: {1}', - TTL, watchLog); - } - - } while (dirty || asyncQueue.length); - - clearPhase(); - - // postDigestQueuePosition isn't local here because this loop can be reentered recursively. - while (postDigestQueuePosition < postDigestQueue.length) { - try { - postDigestQueue[postDigestQueuePosition++](); - } catch (e) { - $exceptionHandler(e); - } - } - postDigestQueue.length = postDigestQueuePosition = 0; - - // Check for changes to browser url that happened during the $digest - // (for which no event is fired; e.g. via `history.pushState()`) - $browser.$$checkUrlChange(); - }, - - /** - * @ngdoc method - * @name $rootScope.Scope#$suspend - * @kind function - * - * @description - * Suspend watchers of this scope subtree so that they will not be invoked during digest. - * - * This can be used to optimize your application when you know that running those watchers - * is redundant. - * - * **Warning** - * - * Suspending scopes from the digest cycle can have unwanted and difficult to debug results. - * Only use this approach if you are confident that you know what you are doing and have - * ample tests to ensure that bindings get updated as you expect. - * - * Some of the things to consider are: - * - * * Any external event on a directive/component will not trigger a digest while the hosting - * scope is suspended - even if the event handler calls `$apply()` or `$rootScope.$digest()`. - * * Transcluded content exists on a scope that inherits from outside a directive but exists - * as a child of the directive's containing scope. If the containing scope is suspended the - * transcluded scope will also be suspended, even if the scope from which the transcluded - * scope inherits is not suspended. - * * Multiple directives trying to manage the suspended status of a scope can confuse each other: - * * A call to `$suspend()` on an already suspended scope is a no-op. - * * A call to `$resume()` on a non-suspended scope is a no-op. - * * If two directives suspend a scope, then one of them resumes the scope, the scope will no - * longer be suspended. This could result in the other directive believing a scope to be - * suspended when it is not. - * * If a parent scope is suspended then all its descendants will be also excluded from future - * digests whether or not they have been suspended themselves. Note that this also applies to - * isolate child scopes. - * * Calling `$digest()` directly on a descendant of a suspended scope will still run the watchers - * for that scope and its descendants. When digesting we only check whether the current scope is - * locally suspended, rather than checking whether it has a suspended ancestor. - * * Calling `$resume()` on a scope that has a suspended ancestor will not cause the scope to be - * included in future digests until all its ancestors have been resumed. - * * Resolved promises, e.g. from explicit `$q` deferreds and `$http` calls, trigger `$apply()` - * against the `$rootScope` and so will still trigger a global digest even if the promise was - * initiated by a component that lives on a suspended scope. - */ - $suspend: function() { - this.$$suspended = true; - }, - - /** - * @ngdoc method - * @name $rootScope.Scope#$isSuspended - * @kind function - * - * @description - * Call this method to determine if this scope has been explicitly suspended. It will not - * tell you whether an ancestor has been suspended. - * To determine if this scope will be excluded from a digest triggered at the $rootScope, - * for example, you must check all its ancestors: - * - * ``` - * function isExcludedFromDigest(scope) { - * while(scope) { - * if (scope.$isSuspended()) return true; - * scope = scope.$parent; - * } - * return false; - * ``` - * - * Be aware that a scope may not be included in digests if it has a suspended ancestor, - * even if `$isSuspended()` returns false. - * - * @returns true if the current scope has been suspended. - */ - $isSuspended: function() { - return this.$$suspended; - }, - - /** - * @ngdoc method - * @name $rootScope.Scope#$resume - * @kind function - * - * @description - * Resume watchers of this scope subtree in case it was suspended. - * - * See {@link $rootScope.Scope#$suspend} for information about the dangers of using this approach. - */ - $resume: function() { - this.$$suspended = false; - }, - - /** - * @ngdoc event - * @name $rootScope.Scope#$destroy - * @eventType broadcast on scope being destroyed - * - * @description - * Broadcasted when a scope and its children are being destroyed. - * - * Note that, in AngularJS, there is also a `$destroy` jQuery event, which can be used to - * clean up DOM bindings before an element is removed from the DOM. - */ - - /** - * @ngdoc method - * @name $rootScope.Scope#$destroy - * @kind function - * - * @description - * Removes the current scope (and all of its children) from the parent scope. Removal implies - * that calls to {@link ng.$rootScope.Scope#$digest $digest()} will no longer - * propagate to the current scope and its children. Removal also implies that the current - * scope is eligible for garbage collection. - * - * The `$destroy()` is usually used by directives such as - * {@link ng.directive:ngRepeat ngRepeat} for managing the - * unrolling of the loop. - * - * Just before a scope is destroyed, a `$destroy` event is broadcasted on this scope. - * Application code can register a `$destroy` event handler that will give it a chance to - * perform any necessary cleanup. - * - * Note that, in AngularJS, there is also a `$destroy` jQuery event, which can be used to - * clean up DOM bindings before an element is removed from the DOM. - */ - $destroy: function() { - // We can't destroy a scope that has been already destroyed. - if (this.$$destroyed) return; - var parent = this.$parent; - - this.$broadcast('$destroy'); - this.$$destroyed = true; - - if (this === $rootScope) { - //Remove handlers attached to window when $rootScope is removed - $browser.$$applicationDestroyed(); - } - - incrementWatchersCount(this, -this.$$watchersCount); - for (var eventName in this.$$listenerCount) { - decrementListenerCount(this, this.$$listenerCount[eventName], eventName); - } - - // sever all the references to parent scopes (after this cleanup, the current scope should - // not be retained by any of our references and should be eligible for garbage collection) - if (parent && parent.$$childHead === this) parent.$$childHead = this.$$nextSibling; - if (parent && parent.$$childTail === this) parent.$$childTail = this.$$prevSibling; - if (this.$$prevSibling) this.$$prevSibling.$$nextSibling = this.$$nextSibling; - if (this.$$nextSibling) this.$$nextSibling.$$prevSibling = this.$$prevSibling; - - // Disable listeners, watchers and apply/digest methods - this.$destroy = this.$digest = this.$apply = this.$evalAsync = this.$applyAsync = noop; - this.$on = this.$watch = this.$watchGroup = function() { return noop; }; - this.$$listeners = {}; - - // Disconnect the next sibling to prevent `cleanUpScope` destroying those too - this.$$nextSibling = null; - cleanUpScope(this); - }, - - /** - * @ngdoc method - * @name $rootScope.Scope#$eval - * @kind function - * - * @description - * Executes the `expression` on the current scope and returns the result. Any exceptions in - * the expression are propagated (uncaught). This is useful when evaluating AngularJS - * expressions. - * - * @example - * ```js - var scope = ng.$rootScope.Scope(); - scope.a = 1; - scope.b = 2; - - expect(scope.$eval('a+b')).toEqual(3); - expect(scope.$eval(function(scope){ return scope.a + scope.b; })).toEqual(3); - * ``` - * - * @param {(string|function())=} expression An AngularJS expression to be executed. - * - * - `string`: execute using the rules as defined in {@link guide/expression expression}. - * - `function(scope)`: execute the function with the current `scope` parameter. - * - * @param {(object)=} locals Local variables object, useful for overriding values in scope. - * @returns {*} The result of evaluating the expression. - */ - $eval: function(expr, locals) { - return $parse(expr)(this, locals); - }, - - /** - * @ngdoc method - * @name $rootScope.Scope#$evalAsync - * @kind function - * - * @description - * Executes the expression on the current scope at a later point in time. - * - * The `$evalAsync` makes no guarantees as to when the `expression` will be executed, only - * that: - * - * - it will execute after the function that scheduled the evaluation (preferably before DOM - * rendering). - * - at least one {@link ng.$rootScope.Scope#$digest $digest cycle} will be performed after - * `expression` execution. - * - * Any exceptions from the execution of the expression are forwarded to the - * {@link ng.$exceptionHandler $exceptionHandler} service. - * - * __Note:__ if this function is called outside of a `$digest` cycle, a new `$digest` cycle - * will be scheduled. However, it is encouraged to always call code that changes the model - * from within an `$apply` call. That includes code evaluated via `$evalAsync`. - * - * @param {(string|function())=} expression An AngularJS expression to be executed. - * - * - `string`: execute using the rules as defined in {@link guide/expression expression}. - * - `function(scope)`: execute the function with the current `scope` parameter. - * - * @param {(object)=} locals Local variables object, useful for overriding values in scope. - */ - $evalAsync: function(expr, locals) { - // if we are outside of an $digest loop and this is the first time we are scheduling async - // task also schedule async auto-flush - if (!$rootScope.$$phase && !asyncQueue.length) { - $browser.defer(function() { - if (asyncQueue.length) { - $rootScope.$digest(); - } - }, null, '$evalAsync'); - } - - asyncQueue.push({scope: this, fn: $parse(expr), locals: locals}); - }, - - $$postDigest: function(fn) { - postDigestQueue.push(fn); - }, - - /** - * @ngdoc method - * @name $rootScope.Scope#$apply - * @kind function - * - * @description - * `$apply()` is used to execute an expression in AngularJS from outside of the AngularJS - * framework. (For example from browser DOM events, setTimeout, XHR or third party libraries). - * Because we are calling into the AngularJS framework we need to perform proper scope life - * cycle of {@link ng.$exceptionHandler exception handling}, - * {@link ng.$rootScope.Scope#$digest executing watches}. - * - * **Life cycle: Pseudo-Code of `$apply()`** - * - * ```js - function $apply(expr) { - try { - return $eval(expr); - } catch (e) { - $exceptionHandler(e); - } finally { - $root.$digest(); - } - } - * ``` - * - * - * Scope's `$apply()` method transitions through the following stages: - * - * 1. The {@link guide/expression expression} is executed using the - * {@link ng.$rootScope.Scope#$eval $eval()} method. - * 2. Any exceptions from the execution of the expression are forwarded to the - * {@link ng.$exceptionHandler $exceptionHandler} service. - * 3. The {@link ng.$rootScope.Scope#$watch watch} listeners are fired immediately after the - * expression was executed using the {@link ng.$rootScope.Scope#$digest $digest()} method. - * - * - * @param {(string|function())=} exp An AngularJS expression to be executed. - * - * - `string`: execute using the rules as defined in {@link guide/expression expression}. - * - `function(scope)`: execute the function with current `scope` parameter. - * - * @returns {*} The result of evaluating the expression. - */ - $apply: function(expr) { - try { - beginPhase('$apply'); - try { - return this.$eval(expr); - } finally { - clearPhase(); - } - } catch (e) { - $exceptionHandler(e); - } finally { - try { - $rootScope.$digest(); - } catch (e) { - $exceptionHandler(e); - // eslint-disable-next-line no-unsafe-finally - throw e; - } - } - }, - - /** - * @ngdoc method - * @name $rootScope.Scope#$applyAsync - * @kind function - * - * @description - * Schedule the invocation of $apply to occur at a later time. The actual time difference - * varies across browsers, but is typically around ~10 milliseconds. - * - * This can be used to queue up multiple expressions which need to be evaluated in the same - * digest. - * - * @param {(string|function())=} exp An AngularJS expression to be executed. - * - * - `string`: execute using the rules as defined in {@link guide/expression expression}. - * - `function(scope)`: execute the function with current `scope` parameter. - */ - $applyAsync: function(expr) { - var scope = this; - if (expr) { - applyAsyncQueue.push($applyAsyncExpression); - } - expr = $parse(expr); - scheduleApplyAsync(); - - function $applyAsyncExpression() { - scope.$eval(expr); - } - }, - - /** - * @ngdoc method - * @name $rootScope.Scope#$on - * @kind function - * - * @description - * Listens on events of a given type. See {@link ng.$rootScope.Scope#$emit $emit} for - * discussion of event life cycle. - * - * The event listener function format is: `function(event, args...)`. The `event` object - * passed into the listener has the following attributes: - * - * - `targetScope` - `{Scope}`: the scope on which the event was `$emit`-ed or - * `$broadcast`-ed. - * - `currentScope` - `{Scope}`: the scope that is currently handling the event. Once the - * event propagates through the scope hierarchy, this property is set to null. - * - `name` - `{string}`: name of the event. - * - `stopPropagation` - `{function=}`: calling `stopPropagation` function will cancel - * further event propagation (available only for events that were `$emit`-ed). - * - `preventDefault` - `{function}`: calling `preventDefault` sets `defaultPrevented` flag - * to true. - * - `defaultPrevented` - `{boolean}`: true if `preventDefault` was called. - * - * @param {string} name Event name to listen on. - * @param {function(event, ...args)} listener Function to call when the event is emitted. - * @returns {function()} Returns a deregistration function for this listener. - */ - $on: function(name, listener) { - var namedListeners = this.$$listeners[name]; - if (!namedListeners) { - this.$$listeners[name] = namedListeners = []; - } - namedListeners.push(listener); - - var current = this; - do { - if (!current.$$listenerCount[name]) { - current.$$listenerCount[name] = 0; - } - current.$$listenerCount[name]++; - } while ((current = current.$parent)); - - var self = this; - return function() { - var indexOfListener = namedListeners.indexOf(listener); - if (indexOfListener !== -1) { - // Use delete in the hope of the browser deallocating the memory for the array entry, - // while not shifting the array indexes of other listeners. - // See issue https://github.com/angular/angular.js/issues/16135 - delete namedListeners[indexOfListener]; - decrementListenerCount(self, 1, name); - } - }; - }, - - - /** - * @ngdoc method - * @name $rootScope.Scope#$emit - * @kind function - * - * @description - * Dispatches an event `name` upwards through the scope hierarchy notifying the - * registered {@link ng.$rootScope.Scope#$on} listeners. - * - * The event life cycle starts at the scope on which `$emit` was called. All - * {@link ng.$rootScope.Scope#$on listeners} listening for `name` event on this scope get - * notified. Afterwards, the event traverses upwards toward the root scope and calls all - * registered listeners along the way. The event will stop propagating if one of the listeners - * cancels it. - * - * Any exception emitted from the {@link ng.$rootScope.Scope#$on listeners} will be passed - * onto the {@link ng.$exceptionHandler $exceptionHandler} service. - * - * @param {string} name Event name to emit. - * @param {...*} args Optional one or more arguments which will be passed onto the event listeners. - * @return {Object} Event object (see {@link ng.$rootScope.Scope#$on}). - */ - $emit: function(name, args) { - var empty = [], - namedListeners, - scope = this, - stopPropagation = false, - event = { - name: name, - targetScope: scope, - stopPropagation: function() {stopPropagation = true;}, - preventDefault: function() { - event.defaultPrevented = true; - }, - defaultPrevented: false - }, - listenerArgs = concat([event], arguments, 1), - i, length; - - do { - namedListeners = scope.$$listeners[name] || empty; - event.currentScope = scope; - for (i = 0, length = namedListeners.length; i < length; i++) { - - // if listeners were deregistered, defragment the array - if (!namedListeners[i]) { - namedListeners.splice(i, 1); - i--; - length--; - continue; - } - try { - //allow all listeners attached to the current scope to run - namedListeners[i].apply(null, listenerArgs); - } catch (e) { - $exceptionHandler(e); - } - } - //if any listener on the current scope stops propagation, prevent bubbling - if (stopPropagation) { - break; - } - //traverse upwards - scope = scope.$parent; - } while (scope); - - event.currentScope = null; - - return event; - }, - - - /** - * @ngdoc method - * @name $rootScope.Scope#$broadcast - * @kind function - * - * @description - * Dispatches an event `name` downwards to all child scopes (and their children) notifying the - * registered {@link ng.$rootScope.Scope#$on} listeners. - * - * The event life cycle starts at the scope on which `$broadcast` was called. All - * {@link ng.$rootScope.Scope#$on listeners} listening for `name` event on this scope get - * notified. Afterwards, the event propagates to all direct and indirect scopes of the current - * scope and calls all registered listeners along the way. The event cannot be canceled. - * - * Any exception emitted from the {@link ng.$rootScope.Scope#$on listeners} will be passed - * onto the {@link ng.$exceptionHandler $exceptionHandler} service. - * - * @param {string} name Event name to broadcast. - * @param {...*} args Optional one or more arguments which will be passed onto the event listeners. - * @return {Object} Event object, see {@link ng.$rootScope.Scope#$on} - */ - $broadcast: function(name, args) { - var target = this, - current = target, - next = target, - event = { - name: name, - targetScope: target, - preventDefault: function() { - event.defaultPrevented = true; - }, - defaultPrevented: false - }; - - if (!target.$$listenerCount[name]) return event; - - var listenerArgs = concat([event], arguments, 1), - listeners, i, length; - - //down while you can, then up and next sibling or up and next sibling until back at root - while ((current = next)) { - event.currentScope = current; - listeners = current.$$listeners[name] || []; - for (i = 0, length = listeners.length; i < length; i++) { - // if listeners were deregistered, defragment the array - if (!listeners[i]) { - listeners.splice(i, 1); - i--; - length--; - continue; - } - - try { - listeners[i].apply(null, listenerArgs); - } catch (e) { - $exceptionHandler(e); - } - } - - // Insanity Warning: scope depth-first traversal - // yes, this code is a bit crazy, but it works and we have tests to prove it! - // this piece should be kept in sync with the traversal in $digest - // (though it differs due to having the extra check for $$listenerCount and - // does not check $$suspended) - if (!(next = ((current.$$listenerCount[name] && current.$$childHead) || - (current !== target && current.$$nextSibling)))) { - while (current !== target && !(next = current.$$nextSibling)) { - current = current.$parent; - } - } - } - - event.currentScope = null; - return event; - } - }; - - var $rootScope = new Scope(); - - //The internal queues. Expose them on the $rootScope for debugging/testing purposes. - var asyncQueue = $rootScope.$$asyncQueue = []; - var postDigestQueue = $rootScope.$$postDigestQueue = []; - var applyAsyncQueue = $rootScope.$$applyAsyncQueue = []; - - var postDigestQueuePosition = 0; - - return $rootScope; - - - function beginPhase(phase) { - if ($rootScope.$$phase) { - throw $rootScopeMinErr('inprog', '{0} already in progress', $rootScope.$$phase); - } - - $rootScope.$$phase = phase; - } - - function clearPhase() { - $rootScope.$$phase = null; - } - - function incrementWatchersCount(current, count) { - do { - current.$$watchersCount += count; - } while ((current = current.$parent)); - } - - function decrementListenerCount(current, count, name) { - do { - current.$$listenerCount[name] -= count; - - if (current.$$listenerCount[name] === 0) { - delete current.$$listenerCount[name]; - } - } while ((current = current.$parent)); - } - - /** - * function used as an initial value for watchers. - * because it's unique we can easily tell it apart from other values - */ - function initWatchVal() {} - - function flushApplyAsync() { - while (applyAsyncQueue.length) { - try { - applyAsyncQueue.shift()(); - } catch (e) { - $exceptionHandler(e); - } - } - applyAsyncId = null; - } - - function scheduleApplyAsync() { - if (applyAsyncId === null) { - applyAsyncId = $browser.defer(function() { - $rootScope.$apply(flushApplyAsync); - }, null, '$applyAsync'); - } - } - }]; -} - -/** - * @ngdoc service - * @name $rootElement - * - * @description - * The root element of AngularJS application. This is either the element where {@link - * ng.directive:ngApp ngApp} was declared or the element passed into - * {@link angular.bootstrap}. The element represents the root element of application. It is also the - * location where the application's {@link auto.$injector $injector} service gets - * published, and can be retrieved using `$rootElement.injector()`. - */ - - -// the implementation is in angular.bootstrap - -/** - * @this - * @description - * Private service to sanitize uris for links and images. Used by $compile and $sanitize. - */ -function $$SanitizeUriProvider() { - - var aHrefSanitizationWhitelist = /^\s*(https?|s?ftp|mailto|tel|file):/, - imgSrcSanitizationWhitelist = /^\s*((https?|ftp|file|blob):|data:image\/)/; - - /** - * @description - * Retrieves or overrides the default regular expression that is used for whitelisting of safe - * urls during a[href] sanitization. - * - * The sanitization is a security measure aimed at prevent XSS attacks via HTML anchor links. - * - * Any url due to be assigned to an `a[href]` attribute via interpolation is marked as requiring - * the $sce.URL security context. When interpolation occurs a call is made to `$sce.trustAsUrl(url)` - * which in turn may call `$$sanitizeUri(url, isMedia)` to sanitize the potentially malicious URL. - * - * If the URL matches the `aHrefSanitizationWhitelist` regular expression, it is returned unchanged. - * - * If there is no match the URL is returned prefixed with `'unsafe:'` to ensure that when it is written - * to the DOM it is inactive and potentially malicious code will not be executed. - * - * @param {RegExp=} regexp New regexp to whitelist urls with. - * @returns {RegExp|ng.$compileProvider} Current RegExp if called without value or self for - * chaining otherwise. - */ - this.aHrefSanitizationWhitelist = function(regexp) { - if (isDefined(regexp)) { - aHrefSanitizationWhitelist = regexp; - return this; - } - return aHrefSanitizationWhitelist; - }; - - - /** - * @description - * Retrieves or overrides the default regular expression that is used for whitelisting of safe - * urls during img[src] sanitization. - * - * The sanitization is a security measure aimed at prevent XSS attacks via HTML image src links. - * - * Any URL due to be assigned to an `img[src]` attribute via interpolation is marked as requiring - * the $sce.MEDIA_URL security context. When interpolation occurs a call is made to - * `$sce.trustAsMediaUrl(url)` which in turn may call `$$sanitizeUri(url, isMedia)` to sanitize - * the potentially malicious URL. - * - * If the URL matches the `aImgSanitizationWhitelist` regular expression, it is returned unchanged. - * - * If there is no match the URL is returned prefixed with `'unsafe:'` to ensure that when it is written - * to the DOM it is inactive and potentially malicious code will not be executed. - * - * @param {RegExp=} regexp New regexp to whitelist urls with. - * @returns {RegExp|ng.$compileProvider} Current RegExp if called without value or self for - * chaining otherwise. - */ - this.imgSrcSanitizationWhitelist = function(regexp) { - if (isDefined(regexp)) { - imgSrcSanitizationWhitelist = regexp; - return this; - } - return imgSrcSanitizationWhitelist; - }; - - this.$get = function() { - return function sanitizeUri(uri, isMediaUrl) { - // if (!uri) return uri; - var regex = isMediaUrl ? imgSrcSanitizationWhitelist : aHrefSanitizationWhitelist; - var normalizedVal = urlResolve(uri && uri.trim()).href; - if (normalizedVal !== '' && !normalizedVal.match(regex)) { - return 'unsafe:' + normalizedVal; - } - return uri; - }; - }; -} - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * Any commits to this file should be reviewed with security in mind. * - * Changes to this file can potentially create security vulnerabilities. * - * An approval from 2 Core members with history of modifying * - * this file is required. * - * * - * Does the change somehow allow for arbitrary javascript to be executed? * - * Or allows for someone to change the prototype of built-in objects? * - * Or gives undesired access to variables likes document or window? * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -/* exported $SceProvider, $SceDelegateProvider */ - -var $sceMinErr = minErr('$sce'); - -var SCE_CONTEXTS = { - // HTML is used when there's HTML rendered (e.g. ng-bind-html, iframe srcdoc binding). - HTML: 'html', - - // Style statements or stylesheets. Currently unused in AngularJS. - CSS: 'css', - - // An URL used in a context where it refers to the source of media, which are not expected to be run - // as scripts, such as an image, audio, video, etc. - MEDIA_URL: 'mediaUrl', - - // An URL used in a context where it does not refer to a resource that loads code. - // A value that can be trusted as a URL can also trusted as a MEDIA_URL. - URL: 'url', - - // RESOURCE_URL is a subtype of URL used where the referred-to resource could be interpreted as - // code. (e.g. ng-include, script src binding, templateUrl) - // A value that can be trusted as a RESOURCE_URL, can also trusted as a URL and a MEDIA_URL. - RESOURCE_URL: 'resourceUrl', - - // Script. Currently unused in AngularJS. - JS: 'js' -}; - -// Helper functions follow. - -var UNDERSCORE_LOWERCASE_REGEXP = /_([a-z])/g; - -function snakeToCamel(name) { - return name - .replace(UNDERSCORE_LOWERCASE_REGEXP, fnCamelCaseReplace); -} - -function adjustMatcher(matcher) { - if (matcher === 'self') { - return matcher; - } else if (isString(matcher)) { - // Strings match exactly except for 2 wildcards - '*' and '**'. - // '*' matches any character except those from the set ':/.?&'. - // '**' matches any character (like .* in a RegExp). - // More than 2 *'s raises an error as it's ill defined. - if (matcher.indexOf('***') > -1) { - throw $sceMinErr('iwcard', - 'Illegal sequence *** in string matcher. String: {0}', matcher); - } - matcher = escapeForRegexp(matcher). - replace(/\\\*\\\*/g, '.*'). - replace(/\\\*/g, '[^:/.?&;]*'); - return new RegExp('^' + matcher + '$'); - } else if (isRegExp(matcher)) { - // The only other type of matcher allowed is a Regexp. - // Match entire URL / disallow partial matches. - // Flags are reset (i.e. no global, ignoreCase or multiline) - return new RegExp('^' + matcher.source + '$'); - } else { - throw $sceMinErr('imatcher', - 'Matchers may only be "self", string patterns or RegExp objects'); - } -} - - -function adjustMatchers(matchers) { - var adjustedMatchers = []; - if (isDefined(matchers)) { - forEach(matchers, function(matcher) { - adjustedMatchers.push(adjustMatcher(matcher)); - }); - } - return adjustedMatchers; -} - - -/** - * @ngdoc service - * @name $sceDelegate - * @kind function - * - * @description - * - * `$sceDelegate` is a service that is used by the `$sce` service to provide {@link ng.$sce Strict - * Contextual Escaping (SCE)} services to AngularJS. - * - * For an overview of this service and the functionnality it provides in AngularJS, see the main - * page for {@link ng.$sce SCE}. The current page is targeted for developers who need to alter how - * SCE works in their application, which shouldn't be needed in most cases. - * - *
- * AngularJS strongly relies on contextual escaping for the security of bindings: disabling or - * modifying this might cause cross site scripting (XSS) vulnerabilities. For libraries owners, - * changes to this service will also influence users, so be extra careful and document your changes. - *
- * - * Typically, you would configure or override the {@link ng.$sceDelegate $sceDelegate} instead of - * the `$sce` service to customize the way Strict Contextual Escaping works in AngularJS. This is - * because, while the `$sce` provides numerous shorthand methods, etc., you really only need to - * override 3 core functions (`trustAs`, `getTrusted` and `valueOf`) to replace the way things - * work because `$sce` delegates to `$sceDelegate` for these operations. - * - * Refer {@link ng.$sceDelegateProvider $sceDelegateProvider} to configure this service. - * - * The default instance of `$sceDelegate` should work out of the box with little pain. While you - * can override it completely to change the behavior of `$sce`, the common case would - * involve configuring the {@link ng.$sceDelegateProvider $sceDelegateProvider} instead by setting - * your own whitelists and blacklists for trusting URLs used for loading AngularJS resources such as - * templates. Refer {@link ng.$sceDelegateProvider#resourceUrlWhitelist - * $sceDelegateProvider.resourceUrlWhitelist} and {@link - * ng.$sceDelegateProvider#resourceUrlBlacklist $sceDelegateProvider.resourceUrlBlacklist} - */ - -/** - * @ngdoc provider - * @name $sceDelegateProvider - * @this - * - * @description - * - * The `$sceDelegateProvider` provider allows developers to configure the {@link ng.$sceDelegate - * $sceDelegate service}, used as a delegate for {@link ng.$sce Strict Contextual Escaping (SCE)}. - * - * The `$sceDelegateProvider` allows one to get/set the whitelists and blacklists used to ensure - * that the URLs used for sourcing AngularJS templates and other script-running URLs are safe (all - * places that use the `$sce.RESOURCE_URL` context). See - * {@link ng.$sceDelegateProvider#resourceUrlWhitelist $sceDelegateProvider.resourceUrlWhitelist} - * and - * {@link ng.$sceDelegateProvider#resourceUrlBlacklist $sceDelegateProvider.resourceUrlBlacklist}, - * - * For the general details about this service in AngularJS, read the main page for {@link ng.$sce - * Strict Contextual Escaping (SCE)}. - * - * **Example**: Consider the following case.
- * - * - your app is hosted at url `http://myapp.example.com/` - * - but some of your templates are hosted on other domains you control such as - * `http://srv01.assets.example.com/`, `http://srv02.assets.example.com/`, etc. - * - and you have an open redirect at `http://myapp.example.com/clickThru?...`. - * - * Here is what a secure configuration for this scenario might look like: - * - * ``` - * angular.module('myApp', []).config(function($sceDelegateProvider) { - * $sceDelegateProvider.resourceUrlWhitelist([ - * // Allow same origin resource loads. - * 'self', - * // Allow loading from our assets domain. Notice the difference between * and **. - * 'http://srv*.assets.example.com/**' - * ]); - * - * // The blacklist overrides the whitelist so the open redirect here is blocked. - * $sceDelegateProvider.resourceUrlBlacklist([ - * 'http://myapp.example.com/clickThru**' - * ]); - * }); - * ``` - * Note that an empty whitelist will block every resource URL from being loaded, and will require - * you to manually mark each one as trusted with `$sce.trustAsResourceUrl`. However, templates - * requested by {@link ng.$templateRequest $templateRequest} that are present in - * {@link ng.$templateCache $templateCache} will not go through this check. If you have a mechanism - * to populate your templates in that cache at config time, then it is a good idea to remove 'self' - * from that whitelist. This helps to mitigate the security impact of certain types of issues, like - * for instance attacker-controlled `ng-includes`. - */ - -function $SceDelegateProvider() { - this.SCE_CONTEXTS = SCE_CONTEXTS; - - // Resource URLs can also be trusted by policy. - var resourceUrlWhitelist = ['self'], - resourceUrlBlacklist = []; - - /** - * @ngdoc method - * @name $sceDelegateProvider#resourceUrlWhitelist - * @kind function - * - * @param {Array=} whitelist When provided, replaces the resourceUrlWhitelist with the value - * provided. This must be an array or null. A snapshot of this array is used so further - * changes to the array are ignored. - * Follow {@link ng.$sce#resourceUrlPatternItem this link} for a description of the items - * allowed in this array. - * - * @return {Array} The currently set whitelist array. - * - * @description - * Sets/Gets the whitelist of trusted resource URLs. - * - * The **default value** when no whitelist has been explicitly set is `['self']` allowing only - * same origin resource requests. - * - *
- * **Note:** the default whitelist of 'self' is not recommended if your app shares its origin - * with other apps! It is a good idea to limit it to only your application's directory. - *
- */ - this.resourceUrlWhitelist = function(value) { - if (arguments.length) { - resourceUrlWhitelist = adjustMatchers(value); - } - return resourceUrlWhitelist; - }; - - /** - * @ngdoc method - * @name $sceDelegateProvider#resourceUrlBlacklist - * @kind function - * - * @param {Array=} blacklist When provided, replaces the resourceUrlBlacklist with the value - * provided. This must be an array or null. A snapshot of this array is used so further - * changes to the array are ignored.

- * Follow {@link ng.$sce#resourceUrlPatternItem this link} for a description of the items - * allowed in this array.

- * The typical usage for the blacklist is to **block - * [open redirects](http://cwe.mitre.org/data/definitions/601.html)** served by your domain as - * these would otherwise be trusted but actually return content from the redirected domain. - *

- * Finally, **the blacklist overrides the whitelist** and has the final say. - * - * @return {Array} The currently set blacklist array. - * - * @description - * Sets/Gets the blacklist of trusted resource URLs. - * - * The **default value** when no whitelist has been explicitly set is the empty array (i.e. there - * is no blacklist.) - */ - - this.resourceUrlBlacklist = function(value) { - if (arguments.length) { - resourceUrlBlacklist = adjustMatchers(value); - } - return resourceUrlBlacklist; - }; - - this.$get = ['$injector', '$$sanitizeUri', function($injector, $$sanitizeUri) { - - var htmlSanitizer = function htmlSanitizer(html) { - throw $sceMinErr('unsafe', 'Attempting to use an unsafe value in a safe context.'); - }; - - if ($injector.has('$sanitize')) { - htmlSanitizer = $injector.get('$sanitize'); - } - - - function matchUrl(matcher, parsedUrl) { - if (matcher === 'self') { - return urlIsSameOrigin(parsedUrl) || urlIsSameOriginAsBaseUrl(parsedUrl); - } else { - // definitely a regex. See adjustMatchers() - return !!matcher.exec(parsedUrl.href); - } - } - - function isResourceUrlAllowedByPolicy(url) { - var parsedUrl = urlResolve(url.toString()); - var i, n, allowed = false; - // Ensure that at least one item from the whitelist allows this url. - for (i = 0, n = resourceUrlWhitelist.length; i < n; i++) { - if (matchUrl(resourceUrlWhitelist[i], parsedUrl)) { - allowed = true; - break; - } - } - if (allowed) { - // Ensure that no item from the blacklist blocked this url. - for (i = 0, n = resourceUrlBlacklist.length; i < n; i++) { - if (matchUrl(resourceUrlBlacklist[i], parsedUrl)) { - allowed = false; - break; - } - } - } - return allowed; - } - - function generateHolderType(Base) { - var holderType = function TrustedValueHolderType(trustedValue) { - this.$$unwrapTrustedValue = function() { - return trustedValue; - }; - }; - if (Base) { - holderType.prototype = new Base(); - } - holderType.prototype.valueOf = function sceValueOf() { - return this.$$unwrapTrustedValue(); - }; - holderType.prototype.toString = function sceToString() { - return this.$$unwrapTrustedValue().toString(); - }; - return holderType; - } - - var trustedValueHolderBase = generateHolderType(), - byType = {}; - - byType[SCE_CONTEXTS.HTML] = generateHolderType(trustedValueHolderBase); - byType[SCE_CONTEXTS.CSS] = generateHolderType(trustedValueHolderBase); - byType[SCE_CONTEXTS.MEDIA_URL] = generateHolderType(trustedValueHolderBase); - byType[SCE_CONTEXTS.URL] = generateHolderType(byType[SCE_CONTEXTS.MEDIA_URL]); - byType[SCE_CONTEXTS.JS] = generateHolderType(trustedValueHolderBase); - byType[SCE_CONTEXTS.RESOURCE_URL] = generateHolderType(byType[SCE_CONTEXTS.URL]); - - /** - * @ngdoc method - * @name $sceDelegate#trustAs - * - * @description - * Returns a trusted representation of the parameter for the specified context. This trusted - * object will later on be used as-is, without any security check, by bindings or directives - * that require this security context. - * For instance, marking a string as trusted for the `$sce.HTML` context will entirely bypass - * the potential `$sanitize` call in corresponding `$sce.HTML` bindings or directives, such as - * `ng-bind-html`. Note that in most cases you won't need to call this function: if you have the - * sanitizer loaded, passing the value itself will render all the HTML that does not pose a - * security risk. - * - * See {@link ng.$sceDelegate#getTrusted getTrusted} for the function that will consume those - * trusted values, and {@link ng.$sce $sce} for general documentation about strict contextual - * escaping. - * - * @param {string} type The context in which this value is safe for use, e.g. `$sce.URL`, - * `$sce.RESOURCE_URL`, `$sce.HTML`, `$sce.JS` or `$sce.CSS`. - * - * @param {*} value The value that should be considered trusted. - * @return {*} A trusted representation of value, that can be used in the given context. - */ - function trustAs(type, trustedValue) { - var Constructor = (byType.hasOwnProperty(type) ? byType[type] : null); - if (!Constructor) { - throw $sceMinErr('icontext', - 'Attempted to trust a value in invalid context. Context: {0}; Value: {1}', - type, trustedValue); - } - if (trustedValue === null || isUndefined(trustedValue) || trustedValue === '') { - return trustedValue; - } - // All the current contexts in SCE_CONTEXTS happen to be strings. In order to avoid trusting - // mutable objects, we ensure here that the value passed in is actually a string. - if (typeof trustedValue !== 'string') { - throw $sceMinErr('itype', - 'Attempted to trust a non-string value in a content requiring a string: Context: {0}', - type); - } - return new Constructor(trustedValue); - } - - /** - * @ngdoc method - * @name $sceDelegate#valueOf - * - * @description - * If the passed parameter had been returned by a prior call to {@link ng.$sceDelegate#trustAs - * `$sceDelegate.trustAs`}, returns the value that had been passed to {@link - * ng.$sceDelegate#trustAs `$sceDelegate.trustAs`}. - * - * If the passed parameter is not a value that had been returned by {@link - * ng.$sceDelegate#trustAs `$sceDelegate.trustAs`}, it must be returned as-is. - * - * @param {*} value The result of a prior {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs`} - * call or anything else. - * @return {*} The `value` that was originally provided to {@link ng.$sceDelegate#trustAs - * `$sceDelegate.trustAs`} if `value` is the result of such a call. Otherwise, returns - * `value` unchanged. - */ - function valueOf(maybeTrusted) { - if (maybeTrusted instanceof trustedValueHolderBase) { - return maybeTrusted.$$unwrapTrustedValue(); - } else { - return maybeTrusted; - } - } - - /** - * @ngdoc method - * @name $sceDelegate#getTrusted - * - * @description - * Given an object and a security context in which to assign it, returns a value that's safe to - * use in this context, which was represented by the parameter. To do so, this function either - * unwraps the safe type it has been given (for instance, a {@link ng.$sceDelegate#trustAs - * `$sceDelegate.trustAs`} result), or it might try to sanitize the value given, depending on - * the context and sanitizer availablility. - * - * The contexts that can be sanitized are $sce.MEDIA_URL, $sce.URL and $sce.HTML. The first two are available - * by default, and the third one relies on the `$sanitize` service (which may be loaded through - * the `ngSanitize` module). Furthermore, for $sce.RESOURCE_URL context, a plain string may be - * accepted if the resource url policy defined by {@link ng.$sceDelegateProvider#resourceUrlWhitelist - * `$sceDelegateProvider.resourceUrlWhitelist`} and {@link ng.$sceDelegateProvider#resourceUrlBlacklist - * `$sceDelegateProvider.resourceUrlBlacklist`} accepts that resource. - * - * This function will throw if the safe type isn't appropriate for this context, or if the - * value given cannot be accepted in the context (which might be caused by sanitization not - * being available, or the value not being recognized as safe). - * - *

- * Disabling auto-escaping is extremely dangerous, it usually creates a Cross Site Scripting - * (XSS) vulnerability in your application. - *
- * - * @param {string} type The context in which this value is to be used (such as `$sce.HTML`). - * @param {*} maybeTrusted The result of a prior {@link ng.$sceDelegate#trustAs - * `$sceDelegate.trustAs`} call, or anything else (which will not be considered trusted.) - * @return {*} A version of the value that's safe to use in the given context, or throws an - * exception if this is impossible. - */ - function getTrusted(type, maybeTrusted) { - if (maybeTrusted === null || isUndefined(maybeTrusted) || maybeTrusted === '') { - return maybeTrusted; - } - var constructor = (byType.hasOwnProperty(type) ? byType[type] : null); - // If maybeTrusted is a trusted class instance or subclass instance, then unwrap and return - // as-is. - if (constructor && maybeTrusted instanceof constructor) { - return maybeTrusted.$$unwrapTrustedValue(); - } - - // If maybeTrusted is a trusted class instance but not of the correct trusted type - // then unwrap it and allow it to pass through to the rest of the checks - if (isFunction(maybeTrusted.$$unwrapTrustedValue)) { - maybeTrusted = maybeTrusted.$$unwrapTrustedValue(); - } - - // If we get here, then we will either sanitize the value or throw an exception. - if (type === SCE_CONTEXTS.MEDIA_URL || type === SCE_CONTEXTS.URL) { - // we attempt to sanitize non-resource URLs - return $$sanitizeUri(maybeTrusted.toString(), type === SCE_CONTEXTS.MEDIA_URL); - } else if (type === SCE_CONTEXTS.RESOURCE_URL) { - if (isResourceUrlAllowedByPolicy(maybeTrusted)) { - return maybeTrusted; - } else { - throw $sceMinErr('insecurl', - 'Blocked loading resource from url not allowed by $sceDelegate policy. URL: {0}', - maybeTrusted.toString()); - } - } else if (type === SCE_CONTEXTS.HTML) { - // htmlSanitizer throws its own error when no sanitizer is available. - return htmlSanitizer(maybeTrusted); - } - // Default error when the $sce service has no way to make the input safe. - throw $sceMinErr('unsafe', 'Attempting to use an unsafe value in a safe context.'); - } - - return { trustAs: trustAs, - getTrusted: getTrusted, - valueOf: valueOf }; - }]; -} - - -/** - * @ngdoc provider - * @name $sceProvider - * @this - * - * @description - * - * The $sceProvider provider allows developers to configure the {@link ng.$sce $sce} service. - * - enable/disable Strict Contextual Escaping (SCE) in a module - * - override the default implementation with a custom delegate - * - * Read more about {@link ng.$sce Strict Contextual Escaping (SCE)}. - */ - -/** - * @ngdoc service - * @name $sce - * @kind function - * - * @description - * - * `$sce` is a service that provides Strict Contextual Escaping services to AngularJS. - * - * ## Strict Contextual Escaping - * - * Strict Contextual Escaping (SCE) is a mode in which AngularJS constrains bindings to only render - * trusted values. Its goal is to assist in writing code in a way that (a) is secure by default, and - * (b) makes auditing for security vulnerabilities such as XSS, clickjacking, etc. a lot easier. - * - * ### Overview - * - * To systematically block XSS security bugs, AngularJS treats all values as untrusted by default in - * HTML or sensitive URL bindings. When binding untrusted values, AngularJS will automatically - * run security checks on them (sanitizations, whitelists, depending on context), or throw when it - * cannot guarantee the security of the result. That behavior depends strongly on contexts: HTML - * can be sanitized, but template URLs cannot, for instance. - * - * To illustrate this, consider the `ng-bind-html` directive. It renders its value directly as HTML: - * we call that the *context*. When given an untrusted input, AngularJS will attempt to sanitize it - * before rendering if a sanitizer is available, and throw otherwise. To bypass sanitization and - * render the input as-is, you will need to mark it as trusted for that context before attempting - * to bind it. - * - * As of version 1.2, AngularJS ships with SCE enabled by default. - * - * ### In practice - * - * Here's an example of a binding in a privileged context: - * - * ``` - * - *
- * ``` - * - * Notice that `ng-bind-html` is bound to `userHtml` controlled by the user. With SCE - * disabled, this application allows the user to render arbitrary HTML into the DIV, which would - * be an XSS security bug. In a more realistic example, one may be rendering user comments, blog - * articles, etc. via bindings. (HTML is just one example of a context where rendering user - * controlled input creates security vulnerabilities.) - * - * For the case of HTML, you might use a library, either on the client side, or on the server side, - * to sanitize unsafe HTML before binding to the value and rendering it in the document. - * - * How would you ensure that every place that used these types of bindings was bound to a value that - * was sanitized by your library (or returned as safe for rendering by your server?) How can you - * ensure that you didn't accidentally delete the line that sanitized the value, or renamed some - * properties/fields and forgot to update the binding to the sanitized value? - * - * To be secure by default, AngularJS makes sure bindings go through that sanitization, or - * any similar validation process, unless there's a good reason to trust the given value in this - * context. That trust is formalized with a function call. This means that as a developer, you - * can assume all untrusted bindings are safe. Then, to audit your code for binding security issues, - * you just need to ensure the values you mark as trusted indeed are safe - because they were - * received from your server, sanitized by your library, etc. You can organize your codebase to - * help with this - perhaps allowing only the files in a specific directory to do this. - * Ensuring that the internal API exposed by that code doesn't markup arbitrary values as safe then - * becomes a more manageable task. - * - * In the case of AngularJS' SCE service, one uses {@link ng.$sce#trustAs $sce.trustAs} - * (and shorthand methods such as {@link ng.$sce#trustAsHtml $sce.trustAsHtml}, etc.) to - * build the trusted versions of your values. - * - * ### How does it work? - * - * In privileged contexts, directives and code will bind to the result of {@link ng.$sce#getTrusted - * $sce.getTrusted(context, value)} rather than to the value directly. Think of this function as - * a way to enforce the required security context in your data sink. Directives use {@link - * ng.$sce#parseAs $sce.parseAs} rather than `$parse` to watch attribute bindings, which performs - * the {@link ng.$sce#getTrusted $sce.getTrusted} behind the scenes on non-constant literals. Also, - * when binding without directives, AngularJS will understand the context of your bindings - * automatically. - * - * As an example, {@link ng.directive:ngBindHtml ngBindHtml} uses {@link - * ng.$sce#parseAsHtml $sce.parseAsHtml(binding expression)}. Here's the actual code (slightly - * simplified): - * - * ``` - * var ngBindHtmlDirective = ['$sce', function($sce) { - * return function(scope, element, attr) { - * scope.$watch($sce.parseAsHtml(attr.ngBindHtml), function(value) { - * element.html(value || ''); - * }); - * }; - * }]; - * ``` - * - * ### Impact on loading templates - * - * This applies both to the {@link ng.directive:ngInclude `ng-include`} directive as well as - * `templateUrl`'s specified by {@link guide/directive directives}. - * - * By default, AngularJS only loads templates from the same domain and protocol as the application - * document. This is done by calling {@link ng.$sce#getTrustedResourceUrl - * $sce.getTrustedResourceUrl} on the template URL. To load templates from other domains and/or - * protocols, you may either {@link ng.$sceDelegateProvider#resourceUrlWhitelist whitelist - * them} or {@link ng.$sce#trustAsResourceUrl wrap it} into a trusted value. - * - * *Please note*: - * The browser's - * [Same Origin Policy](https://code.google.com/p/browsersec/wiki/Part2#Same-origin_policy_for_XMLHttpRequest) - * and [Cross-Origin Resource Sharing (CORS)](http://www.w3.org/TR/cors/) - * policy apply in addition to this and may further restrict whether the template is successfully - * loaded. This means that without the right CORS policy, loading templates from a different domain - * won't work on all browsers. Also, loading templates from `file://` URL does not work on some - * browsers. - * - * ### This feels like too much overhead - * - * It's important to remember that SCE only applies to interpolation expressions. - * - * If your expressions are constant literals, they're automatically trusted and you don't need to - * call `$sce.trustAs` on them (e.g. - * `
`) just works (remember to include the - * `ngSanitize` module). The `$sceDelegate` will also use the `$sanitize` service if it is available - * when binding untrusted values to `$sce.HTML` context. - * AngularJS provides an implementation in `angular-sanitize.js`, and if you - * wish to use it, you will also need to depend on the {@link ngSanitize `ngSanitize`} module in - * your application. - * - * The included {@link ng.$sceDelegate $sceDelegate} comes with sane defaults to allow you to load - * templates in `ng-include` from your application's domain without having to even know about SCE. - * It blocks loading templates from other domains or loading templates over http from an https - * served document. You can change these by setting your own custom {@link - * ng.$sceDelegateProvider#resourceUrlWhitelist whitelists} and {@link - * ng.$sceDelegateProvider#resourceUrlBlacklist blacklists} for matching such URLs. - * - * This significantly reduces the overhead. It is far easier to pay the small overhead and have an - * application that's secure and can be audited to verify that with much more ease than bolting - * security onto an application later. - * - * - * ### What trusted context types are supported? - * - * | Context | Notes | - * |---------------------|----------------| - * | `$sce.HTML` | For HTML that's safe to source into the application. The {@link ng.directive:ngBindHtml ngBindHtml} directive uses this context for bindings. If an unsafe value is encountered and the {@link ngSanitize $sanitize} module is present this will sanitize the value instead of throwing an error. | - * | `$sce.CSS` | For CSS that's safe to source into the application. Currently unused. Feel free to use it in your own directives. | - * | `$sce.MEDIA_URL` | For URLs that are safe to render as media. Is automatically converted from string by sanitizing when needed. | - * | `$sce.URL` | For URLs that are safe to follow as links. Is automatically converted from string by sanitizing when needed. Note that `$sce.URL` makes a stronger statement about the URL than `$sce.MEDIA_URL` does and therefore contexts requiring values trusted for `$sce.URL` can be used anywhere that values trusted for `$sce.MEDIA_URL` are required.| - * | `$sce.RESOURCE_URL` | For URLs that are not only safe to follow as links, but whose contents are also safe to include in your application. Examples include `ng-include`, `src` / `ngSrc` bindings for tags other than `IMG` (e.g. `IFRAME`, `OBJECT`, etc.)

Note that `$sce.RESOURCE_URL` makes a stronger statement about the URL than `$sce.URL` or `$sce.MEDIA_URL` do and therefore contexts requiring values trusted for `$sce.RESOURCE_URL` can be used anywhere that values trusted for `$sce.URL` or `$sce.MEDIA_URL` are required.

The {@link $sceDelegateProvider#resourceUrlWhitelist $sceDelegateProvider#resourceUrlWhitelist()} and {@link $sceDelegateProvider#resourceUrlBlacklist $sceDelegateProvider#resourceUrlBlacklist()} can be used to restrict trusted origins for `RESOURCE_URL` | - * | `$sce.JS` | For JavaScript that is safe to execute in your application's context. Currently unused. Feel free to use it in your own directives. | - * - * - *
- * Be aware that, before AngularJS 1.7.0, `a[href]` and `img[src]` used to sanitize their - * interpolated values directly rather than rely upon {@link ng.$sce#getTrusted `$sce.getTrusted`}. - * - * **As of 1.7.0, this is no longer the case.** - * - * Now such interpolations are marked as requiring `$sce.URL` (for `a[href]`) or `$sce.MEDIA_URL` - * (for `img[src]`), so that the sanitization happens (via `$sce.getTrusted...`) when the `$interpolate` - * service evaluates the expressions. - *
- * - * There are no CSS or JS context bindings in AngularJS currently, so their corresponding `$sce.trustAs` - * functions aren't useful yet. This might evolve. - * - * ### Format of items in {@link ng.$sceDelegateProvider#resourceUrlWhitelist resourceUrlWhitelist}/{@link ng.$sceDelegateProvider#resourceUrlBlacklist Blacklist} - * - * Each element in these arrays must be one of the following: - * - * - **'self'** - * - The special **string**, `'self'`, can be used to match against all URLs of the **same - * domain** as the application document using the **same protocol**. - * - **String** (except the special value `'self'`) - * - The string is matched against the full *normalized / absolute URL* of the resource - * being tested (substring matches are not good enough.) - * - There are exactly **two wildcard sequences** - `*` and `**`. All other characters - * match themselves. - * - `*`: matches zero or more occurrences of any character other than one of the following 6 - * characters: '`:`', '`/`', '`.`', '`?`', '`&`' and '`;`'. It's a useful wildcard for use - * in a whitelist. - * - `**`: matches zero or more occurrences of *any* character. As such, it's not - * appropriate for use in a scheme, domain, etc. as it would match too much. (e.g. - * http://**.example.com/ would match http://evil.com/?ignore=.example.com/ and that might - * not have been the intention.) Its usage at the very end of the path is ok. (e.g. - * http://foo.example.com/templates/**). - * - **RegExp** (*see caveat below*) - * - *Caveat*: While regular expressions are powerful and offer great flexibility, their syntax - * (and all the inevitable escaping) makes them *harder to maintain*. It's easy to - * accidentally introduce a bug when one updates a complex expression (imho, all regexes should - * have good test coverage). For instance, the use of `.` in the regex is correct only in a - * small number of cases. A `.` character in the regex used when matching the scheme or a - * subdomain could be matched against a `:` or literal `.` that was likely not intended. It - * is highly recommended to use the string patterns and only fall back to regular expressions - * as a last resort. - * - The regular expression must be an instance of RegExp (i.e. not a string.) It is - * matched against the **entire** *normalized / absolute URL* of the resource being tested - * (even when the RegExp did not have the `^` and `$` codes.) In addition, any flags - * present on the RegExp (such as multiline, global, ignoreCase) are ignored. - * - If you are generating your JavaScript from some other templating engine (not - * recommended, e.g. in issue [#4006](https://github.com/angular/angular.js/issues/4006)), - * remember to escape your regular expression (and be aware that you might need more than - * one level of escaping depending on your templating engine and the way you interpolated - * the value.) Do make use of your platform's escaping mechanism as it might be good - * enough before coding your own. E.g. Ruby has - * [Regexp.escape(str)](http://www.ruby-doc.org/core-2.0.0/Regexp.html#method-c-escape) - * and Python has [re.escape](http://docs.python.org/library/re.html#re.escape). - * Javascript lacks a similar built in function for escaping. Take a look at Google - * Closure library's [goog.string.regExpEscape(s)]( - * http://docs.closure-library.googlecode.com/git/closure_goog_string_string.js.source.html#line962). - * - * Refer {@link ng.$sceDelegateProvider $sceDelegateProvider} for an example. - * - * ### Show me an example using SCE. - * - * - * - *
- *

- * User comments
- * By default, HTML that isn't explicitly trusted (e.g. Alice's comment) is sanitized when - * $sanitize is available. If $sanitize isn't available, this results in an error instead of an - * exploit. - *
- *
- * {{userComment.name}}: - * - *
- *
- *
- *
- *
- * - * - * angular.module('mySceApp', ['ngSanitize']) - * .controller('AppController', ['$http', '$templateCache', '$sce', - * function AppController($http, $templateCache, $sce) { - * var self = this; - * $http.get('test_data.json', {cache: $templateCache}).then(function(response) { - * self.userComments = response.data; - * }); - * self.explicitlyTrustedHtml = $sce.trustAsHtml( - * 'Hover over this text.'); - * }]); - * - * - * - * [ - * { "name": "Alice", - * "htmlComment": - * "Is anyone reading this?" - * }, - * { "name": "Bob", - * "htmlComment": "Yes! Am I the only other one?" - * } - * ] - * - * - * - * describe('SCE doc demo', function() { - * it('should sanitize untrusted values', function() { - * expect(element.all(by.css('.htmlComment')).first().getAttribute('innerHTML')) - * .toBe('Is anyone reading this?'); - * }); - * - * it('should NOT sanitize explicitly trusted values', function() { - * expect(element(by.id('explicitlyTrustedHtml')).getAttribute('innerHTML')).toBe( - * 'Hover over this text.'); - * }); - * }); - * - *
- * - * - * - * ## Can I disable SCE completely? - * - * Yes, you can. However, this is strongly discouraged. SCE gives you a lot of security benefits - * for little coding overhead. It will be much harder to take an SCE disabled application and - * either secure it on your own or enable SCE at a later stage. It might make sense to disable SCE - * for cases where you have a lot of existing code that was written before SCE was introduced and - * you're migrating them a module at a time. Also do note that this is an app-wide setting, so if - * you are writing a library, you will cause security bugs applications using it. - * - * That said, here's how you can completely disable SCE: - * - * ``` - * angular.module('myAppWithSceDisabledmyApp', []).config(function($sceProvider) { - * // Completely disable SCE. For demonstration purposes only! - * // Do not use in new projects or libraries. - * $sceProvider.enabled(false); - * }); - * ``` - * - */ - -function $SceProvider() { - var enabled = true; - - /** - * @ngdoc method - * @name $sceProvider#enabled - * @kind function - * - * @param {boolean=} value If provided, then enables/disables SCE application-wide. - * @return {boolean} True if SCE is enabled, false otherwise. - * - * @description - * Enables/disables SCE and returns the current value. - */ - this.enabled = function(value) { - if (arguments.length) { - enabled = !!value; - } - return enabled; - }; - - - /* Design notes on the default implementation for SCE. - * - * The API contract for the SCE delegate - * ------------------------------------- - * The SCE delegate object must provide the following 3 methods: - * - * - trustAs(contextEnum, value) - * This method is used to tell the SCE service that the provided value is OK to use in the - * contexts specified by contextEnum. It must return an object that will be accepted by - * getTrusted() for a compatible contextEnum and return this value. - * - * - valueOf(value) - * For values that were not produced by trustAs(), return them as is. For values that were - * produced by trustAs(), return the corresponding input value to trustAs. Basically, if - * trustAs is wrapping the given values into some type, this operation unwraps it when given - * such a value. - * - * - getTrusted(contextEnum, value) - * This function should return the value that is safe to use in the context specified by - * contextEnum or throw and exception otherwise. - * - * NOTE: This contract deliberately does NOT state that values returned by trustAs() must be - * opaque or wrapped in some holder object. That happens to be an implementation detail. For - * instance, an implementation could maintain a registry of all trusted objects by context. In - * such a case, trustAs() would return the same object that was passed in. getTrusted() would - * return the same object passed in if it was found in the registry under a compatible context or - * throw an exception otherwise. An implementation might only wrap values some of the time based - * on some criteria. getTrusted() might return a value and not throw an exception for special - * constants or objects even if not wrapped. All such implementations fulfill this contract. - * - * - * A note on the inheritance model for SCE contexts - * ------------------------------------------------ - * I've used inheritance and made RESOURCE_URL wrapped types a subtype of URL wrapped types. This - * is purely an implementation details. - * - * The contract is simply this: - * - * getTrusted($sce.RESOURCE_URL, value) succeeding implies that getTrusted($sce.URL, value) - * will also succeed. - * - * Inheritance happens to capture this in a natural way. In some future, we may not use - * inheritance anymore. That is OK because no code outside of sce.js and sceSpecs.js would need to - * be aware of this detail. - */ - - this.$get = ['$parse', '$sceDelegate', function( - $parse, $sceDelegate) { - // Support: IE 9-11 only - // Prereq: Ensure that we're not running in IE<11 quirks mode. In that mode, IE < 11 allow - // the "expression(javascript expression)" syntax which is insecure. - if (enabled && msie < 8) { - throw $sceMinErr('iequirks', - 'Strict Contextual Escaping does not support Internet Explorer version < 11 in quirks ' + - 'mode. You can fix this by adding the text to the top of your HTML ' + - 'document. See http://docs.angularjs.org/api/ng.$sce for more information.'); - } - - var sce = shallowCopy(SCE_CONTEXTS); - - /** - * @ngdoc method - * @name $sce#isEnabled - * @kind function - * - * @return {Boolean} True if SCE is enabled, false otherwise. If you want to set the value, you - * have to do it at module config time on {@link ng.$sceProvider $sceProvider}. - * - * @description - * Returns a boolean indicating if SCE is enabled. - */ - sce.isEnabled = function() { - return enabled; - }; - sce.trustAs = $sceDelegate.trustAs; - sce.getTrusted = $sceDelegate.getTrusted; - sce.valueOf = $sceDelegate.valueOf; - - if (!enabled) { - sce.trustAs = sce.getTrusted = function(type, value) { return value; }; - sce.valueOf = identity; - } - - /** - * @ngdoc method - * @name $sce#parseAs - * - * @description - * Converts AngularJS {@link guide/expression expression} into a function. This is like {@link - * ng.$parse $parse} and is identical when the expression is a literal constant. Otherwise, it - * wraps the expression in a call to {@link ng.$sce#getTrusted $sce.getTrusted(*type*, - * *result*)} - * - * @param {string} type The SCE context in which this result will be used. - * @param {string} expression String expression to compile. - * @return {function(context, locals)} A function which represents the compiled expression: - * - * * `context` – `{object}` – an object against which any expressions embedded in the - * strings are evaluated against (typically a scope object). - * * `locals` – `{object=}` – local variables context object, useful for overriding values - * in `context`. - */ - sce.parseAs = function sceParseAs(type, expr) { - var parsed = $parse(expr); - if (parsed.literal && parsed.constant) { - return parsed; - } else { - return $parse(expr, function(value) { - return sce.getTrusted(type, value); - }); - } - }; - - /** - * @ngdoc method - * @name $sce#trustAs - * - * @description - * Delegates to {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs`}. As such, returns a - * wrapped object that represents your value, and the trust you have in its safety for the given - * context. AngularJS can then use that value as-is in bindings of the specified secure context. - * This is used in bindings for `ng-bind-html`, `ng-include`, and most `src` attribute - * interpolations. See {@link ng.$sce $sce} for strict contextual escaping. - * - * @param {string} type The context in which this value is safe for use, e.g. `$sce.URL`, - * `$sce.RESOURCE_URL`, `$sce.HTML`, `$sce.JS` or `$sce.CSS`. - * - * @param {*} value The value that that should be considered trusted. - * @return {*} A wrapped version of value that can be used as a trusted variant of your `value` - * in the context you specified. - */ - - /** - * @ngdoc method - * @name $sce#trustAsHtml - * - * @description - * Shorthand method. `$sce.trustAsHtml(value)` → - * {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.HTML, value)`} - * - * @param {*} value The value to mark as trusted for `$sce.HTML` context. - * @return {*} A wrapped version of value that can be used as a trusted variant of your `value` - * in `$sce.HTML` context (like `ng-bind-html`). - */ - - /** - * @ngdoc method - * @name $sce#trustAsCss - * - * @description - * Shorthand method. `$sce.trustAsCss(value)` → - * {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.CSS, value)`} - * - * @param {*} value The value to mark as trusted for `$sce.CSS` context. - * @return {*} A wrapped version of value that can be used as a trusted variant - * of your `value` in `$sce.CSS` context. This context is currently unused, so there are - * almost no reasons to use this function so far. - */ - - /** - * @ngdoc method - * @name $sce#trustAsUrl - * - * @description - * Shorthand method. `$sce.trustAsUrl(value)` → - * {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.URL, value)`} - * - * @param {*} value The value to mark as trusted for `$sce.URL` context. - * @return {*} A wrapped version of value that can be used as a trusted variant of your `value` - * in `$sce.URL` context. That context is currently unused, so there are almost no reasons - * to use this function so far. - */ - - /** - * @ngdoc method - * @name $sce#trustAsResourceUrl - * - * @description - * Shorthand method. `$sce.trustAsResourceUrl(value)` → - * {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.RESOURCE_URL, value)`} - * - * @param {*} value The value to mark as trusted for `$sce.RESOURCE_URL` context. - * @return {*} A wrapped version of value that can be used as a trusted variant of your `value` - * in `$sce.RESOURCE_URL` context (template URLs in `ng-include`, most `src` attribute - * bindings, ...) - */ - - /** - * @ngdoc method - * @name $sce#trustAsJs - * - * @description - * Shorthand method. `$sce.trustAsJs(value)` → - * {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.JS, value)`} - * - * @param {*} value The value to mark as trusted for `$sce.JS` context. - * @return {*} A wrapped version of value that can be used as a trusted variant of your `value` - * in `$sce.JS` context. That context is currently unused, so there are almost no reasons to - * use this function so far. - */ - - /** - * @ngdoc method - * @name $sce#getTrusted - * - * @description - * Delegates to {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted`}. As such, - * takes any input, and either returns a value that's safe to use in the specified context, - * or throws an exception. This function is aware of trusted values created by the `trustAs` - * function and its shorthands, and when contexts are appropriate, returns the unwrapped value - * as-is. Finally, this function can also throw when there is no way to turn `maybeTrusted` in a - * safe value (e.g., no sanitization is available or possible.) - * - * @param {string} type The context in which this value is to be used. - * @param {*} maybeTrusted The result of a prior {@link ng.$sce#trustAs - * `$sce.trustAs`} call, or anything else (which will not be considered trusted.) - * @return {*} A version of the value that's safe to use in the given context, or throws an - * exception if this is impossible. - */ - - /** - * @ngdoc method - * @name $sce#getTrustedHtml - * - * @description - * Shorthand method. `$sce.getTrustedHtml(value)` → - * {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.HTML, value)`} - * - * @param {*} value The value to pass to `$sce.getTrusted`. - * @return {*} The return value of `$sce.getTrusted($sce.HTML, value)` - */ - - /** - * @ngdoc method - * @name $sce#getTrustedCss - * - * @description - * Shorthand method. `$sce.getTrustedCss(value)` → - * {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.CSS, value)`} - * - * @param {*} value The value to pass to `$sce.getTrusted`. - * @return {*} The return value of `$sce.getTrusted($sce.CSS, value)` - */ - - /** - * @ngdoc method - * @name $sce#getTrustedUrl - * - * @description - * Shorthand method. `$sce.getTrustedUrl(value)` → - * {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.URL, value)`} - * - * @param {*} value The value to pass to `$sce.getTrusted`. - * @return {*} The return value of `$sce.getTrusted($sce.URL, value)` - */ - - /** - * @ngdoc method - * @name $sce#getTrustedResourceUrl - * - * @description - * Shorthand method. `$sce.getTrustedResourceUrl(value)` → - * {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.RESOURCE_URL, value)`} - * - * @param {*} value The value to pass to `$sceDelegate.getTrusted`. - * @return {*} The return value of `$sce.getTrusted($sce.RESOURCE_URL, value)` - */ - - /** - * @ngdoc method - * @name $sce#getTrustedJs - * - * @description - * Shorthand method. `$sce.getTrustedJs(value)` → - * {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.JS, value)`} - * - * @param {*} value The value to pass to `$sce.getTrusted`. - * @return {*} The return value of `$sce.getTrusted($sce.JS, value)` - */ - - /** - * @ngdoc method - * @name $sce#parseAsHtml - * - * @description - * Shorthand method. `$sce.parseAsHtml(expression string)` → - * {@link ng.$sce#parseAs `$sce.parseAs($sce.HTML, value)`} - * - * @param {string} expression String expression to compile. - * @return {function(context, locals)} A function which represents the compiled expression: - * - * * `context` – `{object}` – an object against which any expressions embedded in the - * strings are evaluated against (typically a scope object). - * * `locals` – `{object=}` – local variables context object, useful for overriding values - * in `context`. - */ - - /** - * @ngdoc method - * @name $sce#parseAsCss - * - * @description - * Shorthand method. `$sce.parseAsCss(value)` → - * {@link ng.$sce#parseAs `$sce.parseAs($sce.CSS, value)`} - * - * @param {string} expression String expression to compile. - * @return {function(context, locals)} A function which represents the compiled expression: - * - * * `context` – `{object}` – an object against which any expressions embedded in the - * strings are evaluated against (typically a scope object). - * * `locals` – `{object=}` – local variables context object, useful for overriding values - * in `context`. - */ - - /** - * @ngdoc method - * @name $sce#parseAsUrl - * - * @description - * Shorthand method. `$sce.parseAsUrl(value)` → - * {@link ng.$sce#parseAs `$sce.parseAs($sce.URL, value)`} - * - * @param {string} expression String expression to compile. - * @return {function(context, locals)} A function which represents the compiled expression: - * - * * `context` – `{object}` – an object against which any expressions embedded in the - * strings are evaluated against (typically a scope object). - * * `locals` – `{object=}` – local variables context object, useful for overriding values - * in `context`. - */ - - /** - * @ngdoc method - * @name $sce#parseAsResourceUrl - * - * @description - * Shorthand method. `$sce.parseAsResourceUrl(value)` → - * {@link ng.$sce#parseAs `$sce.parseAs($sce.RESOURCE_URL, value)`} - * - * @param {string} expression String expression to compile. - * @return {function(context, locals)} A function which represents the compiled expression: - * - * * `context` – `{object}` – an object against which any expressions embedded in the - * strings are evaluated against (typically a scope object). - * * `locals` – `{object=}` – local variables context object, useful for overriding values - * in `context`. - */ - - /** - * @ngdoc method - * @name $sce#parseAsJs - * - * @description - * Shorthand method. `$sce.parseAsJs(value)` → - * {@link ng.$sce#parseAs `$sce.parseAs($sce.JS, value)`} - * - * @param {string} expression String expression to compile. - * @return {function(context, locals)} A function which represents the compiled expression: - * - * * `context` – `{object}` – an object against which any expressions embedded in the - * strings are evaluated against (typically a scope object). - * * `locals` – `{object=}` – local variables context object, useful for overriding values - * in `context`. - */ - - // Shorthand delegations. - var parse = sce.parseAs, - getTrusted = sce.getTrusted, - trustAs = sce.trustAs; - - forEach(SCE_CONTEXTS, function(enumValue, name) { - var lName = lowercase(name); - sce[snakeToCamel('parse_as_' + lName)] = function(expr) { - return parse(enumValue, expr); - }; - sce[snakeToCamel('get_trusted_' + lName)] = function(value) { - return getTrusted(enumValue, value); - }; - sce[snakeToCamel('trust_as_' + lName)] = function(value) { - return trustAs(enumValue, value); - }; - }); - - return sce; - }]; -} - -/* exported $SnifferProvider */ - -/** - * !!! This is an undocumented "private" service !!! - * - * @name $sniffer - * @requires $window - * @requires $document - * @this - * - * @property {boolean} history Does the browser support html5 history api ? - * @property {boolean} transitions Does the browser support CSS transition events ? - * @property {boolean} animations Does the browser support CSS animation events ? - * - * @description - * This is very simple implementation of testing browser's features. - */ -function $SnifferProvider() { - this.$get = ['$window', '$document', function($window, $document) { - var eventSupport = {}, - // Chrome Packaged Apps are not allowed to access `history.pushState`. - // If not sandboxed, they can be detected by the presence of `chrome.app.runtime` - // (see https://developer.chrome.com/apps/api_index). If sandboxed, they can be detected by - // the presence of an extension runtime ID and the absence of other Chrome runtime APIs - // (see https://developer.chrome.com/apps/manifest/sandbox). - // (NW.js apps have access to Chrome APIs, but do support `history`.) - isNw = $window.nw && $window.nw.process, - isChromePackagedApp = - !isNw && - $window.chrome && - ($window.chrome.app && $window.chrome.app.runtime || - !$window.chrome.app && $window.chrome.runtime && $window.chrome.runtime.id), - hasHistoryPushState = !isChromePackagedApp && $window.history && $window.history.pushState, - android = - toInt((/android (\d+)/.exec(lowercase(($window.navigator || {}).userAgent)) || [])[1]), - boxee = /Boxee/i.test(($window.navigator || {}).userAgent), - document = $document[0] || {}, - bodyStyle = document.body && document.body.style, - transitions = false, - animations = false; - - if (bodyStyle) { - // Support: Android <5, Blackberry Browser 10, default Chrome in Android 4.4.x - // Mentioned browsers need a -webkit- prefix for transitions & animations. - transitions = !!('transition' in bodyStyle || 'webkitTransition' in bodyStyle); - animations = !!('animation' in bodyStyle || 'webkitAnimation' in bodyStyle); - } - - - return { - // Android has history.pushState, but it does not update location correctly - // so let's not use the history API at all. - // http://code.google.com/p/android/issues/detail?id=17471 - // https://github.com/angular/angular.js/issues/904 - - // older webkit browser (533.9) on Boxee box has exactly the same problem as Android has - // so let's not use the history API also - // We are purposefully using `!(android < 4)` to cover the case when `android` is undefined - history: !!(hasHistoryPushState && !(android < 4) && !boxee), - hasEvent: function(event) { - // Support: IE 9-11 only - // IE9 implements 'input' event it's so fubared that we rather pretend that it doesn't have - // it. In particular the event is not fired when backspace or delete key are pressed or - // when cut operation is performed. - // IE10+ implements 'input' event but it erroneously fires under various situations, - // e.g. when placeholder changes, or a form is focused. - if (event === 'input' && msie) return false; - - if (isUndefined(eventSupport[event])) { - var divElm = document.createElement('div'); - eventSupport[event] = 'on' + event in divElm; - } - - return eventSupport[event]; - }, - csp: csp(), - transitions: transitions, - animations: animations, - android: android - }; - }]; -} - -/** - * ! This is a private undocumented service ! - * - * @name $$taskTrackerFactory - * @description - * A function to create `TaskTracker` instances. - * - * A `TaskTracker` can keep track of pending tasks (grouped by type) and can notify interested - * parties when all pending tasks (or tasks of a specific type) have been completed. - * - * @param {$log} log - A logger instance (such as `$log`). Used to log error during callback - * execution. - * - * @this - */ -function $$TaskTrackerFactoryProvider() { - this.$get = valueFn(function(log) { return new TaskTracker(log); }); -} - -function TaskTracker(log) { - var self = this; - var taskCounts = {}; - var taskCallbacks = []; - - var ALL_TASKS_TYPE = self.ALL_TASKS_TYPE = '$$all$$'; - var DEFAULT_TASK_TYPE = self.DEFAULT_TASK_TYPE = '$$default$$'; - - /** - * Execute the specified function and decrement the appropriate `taskCounts` counter. - * If the counter reaches 0, all corresponding `taskCallbacks` are executed. - * - * @param {Function} fn - The function to execute. - * @param {string=} [taskType=DEFAULT_TASK_TYPE] - The type of task that is being completed. - */ - self.completeTask = completeTask; - - /** - * Increase the task count for the specified task type (or the default task type if non is - * specified). - * - * @param {string=} [taskType=DEFAULT_TASK_TYPE] - The type of task whose count will be increased. - */ - self.incTaskCount = incTaskCount; - - /** - * Execute the specified callback when all pending tasks have been completed. - * - * If there are no pending tasks, the callback is executed immediately. You can optionally limit - * the tasks that will be waited for to a specific type, by passing a `taskType`. - * - * @param {function} callback - The function to call when there are no pending tasks. - * @param {string=} [taskType=ALL_TASKS_TYPE] - The type of tasks that will be waited for. - */ - self.notifyWhenNoPendingTasks = notifyWhenNoPendingTasks; - - function completeTask(fn, taskType) { - taskType = taskType || DEFAULT_TASK_TYPE; - - try { - fn(); - } finally { - decTaskCount(taskType); - - var countForType = taskCounts[taskType]; - var countForAll = taskCounts[ALL_TASKS_TYPE]; - - // If at least one of the queues (`ALL_TASKS_TYPE` or `taskType`) is empty, run callbacks. - if (!countForAll || !countForType) { - var getNextCallback = !countForAll ? getLastCallback : getLastCallbackForType; - var nextCb; - - while ((nextCb = getNextCallback(taskType))) { - try { - nextCb(); - } catch (e) { - log.error(e); - } - } - } - } - } - - function decTaskCount(taskType) { - taskType = taskType || DEFAULT_TASK_TYPE; - if (taskCounts[taskType]) { - taskCounts[taskType]--; - taskCounts[ALL_TASKS_TYPE]--; - } - } - - function getLastCallback() { - var cbInfo = taskCallbacks.pop(); - return cbInfo && cbInfo.cb; - } - - function getLastCallbackForType(taskType) { - for (var i = taskCallbacks.length - 1; i >= 0; --i) { - var cbInfo = taskCallbacks[i]; - if (cbInfo.type === taskType) { - taskCallbacks.splice(i, 1); - return cbInfo.cb; - } - } - } - - function incTaskCount(taskType) { - taskType = taskType || DEFAULT_TASK_TYPE; - taskCounts[taskType] = (taskCounts[taskType] || 0) + 1; - taskCounts[ALL_TASKS_TYPE] = (taskCounts[ALL_TASKS_TYPE] || 0) + 1; - } - - function notifyWhenNoPendingTasks(callback, taskType) { - taskType = taskType || ALL_TASKS_TYPE; - if (!taskCounts[taskType]) { - callback(); - } else { - taskCallbacks.push({type: taskType, cb: callback}); - } - } -} - -var $templateRequestMinErr = minErr('$templateRequest'); - -/** - * @ngdoc provider - * @name $templateRequestProvider - * @this - * - * @description - * Used to configure the options passed to the {@link $http} service when making a template request. - * - * For example, it can be used for specifying the "Accept" header that is sent to the server, when - * requesting a template. - */ -function $TemplateRequestProvider() { - - var httpOptions; - - /** - * @ngdoc method - * @name $templateRequestProvider#httpOptions - * @description - * The options to be passed to the {@link $http} service when making the request. - * You can use this to override options such as the "Accept" header for template requests. - * - * The {@link $templateRequest} will set the `cache` and the `transformResponse` properties of the - * options if not overridden here. - * - * @param {string=} value new value for the {@link $http} options. - * @returns {string|self} Returns the {@link $http} options when used as getter and self if used as setter. - */ - this.httpOptions = function(val) { - if (val) { - httpOptions = val; - return this; - } - return httpOptions; - }; - - /** - * @ngdoc service - * @name $templateRequest - * - * @description - * The `$templateRequest` service runs security checks then downloads the provided template using - * `$http` and, upon success, stores the contents inside of `$templateCache`. If the HTTP request - * fails or the response data of the HTTP request is empty, a `$compile` error will be thrown (the - * exception can be thwarted by setting the 2nd parameter of the function to true). Note that the - * contents of `$templateCache` are trusted, so the call to `$sce.getTrustedUrl(tpl)` is omitted - * when `tpl` is of type string and `$templateCache` has the matching entry. - * - * If you want to pass custom options to the `$http` service, such as setting the Accept header you - * can configure this via {@link $templateRequestProvider#httpOptions}. - * - * `$templateRequest` is used internally by {@link $compile}, {@link ngRoute.$route}, and directives such - * as {@link ngInclude} to download and cache templates. - * - * 3rd party modules should use `$templateRequest` if their services or directives are loading - * templates. - * - * @param {string|TrustedResourceUrl} tpl The HTTP request template URL - * @param {boolean=} ignoreRequestError Whether or not to ignore the exception when the request fails or the template is empty - * - * @return {Promise} a promise for the HTTP response data of the given URL. - * - * @property {number} totalPendingRequests total amount of pending template requests being downloaded. - */ - this.$get = ['$exceptionHandler', '$templateCache', '$http', '$q', '$sce', - function($exceptionHandler, $templateCache, $http, $q, $sce) { - - function handleRequestFn(tpl, ignoreRequestError) { - handleRequestFn.totalPendingRequests++; - - // We consider the template cache holds only trusted templates, so - // there's no need to go through whitelisting again for keys that already - // are included in there. This also makes AngularJS accept any script - // directive, no matter its name. However, we still need to unwrap trusted - // types. - if (!isString(tpl) || isUndefined($templateCache.get(tpl))) { - tpl = $sce.getTrustedResourceUrl(tpl); - } - - var transformResponse = $http.defaults && $http.defaults.transformResponse; - - if (isArray(transformResponse)) { - transformResponse = transformResponse.filter(function(transformer) { - return transformer !== defaultHttpResponseTransform; - }); - } else if (transformResponse === defaultHttpResponseTransform) { - transformResponse = null; - } - - return $http.get(tpl, extend({ - cache: $templateCache, - transformResponse: transformResponse - }, httpOptions)) - .finally(function() { - handleRequestFn.totalPendingRequests--; - }) - .then(function(response) { - return $templateCache.put(tpl, response.data); - }, handleError); - - function handleError(resp) { - if (!ignoreRequestError) { - resp = $templateRequestMinErr('tpload', - 'Failed to load template: {0} (HTTP status: {1} {2})', - tpl, resp.status, resp.statusText); - - $exceptionHandler(resp); - } - - return $q.reject(resp); - } - } - - handleRequestFn.totalPendingRequests = 0; - - return handleRequestFn; - } - ]; -} - -/** @this */ -function $$TestabilityProvider() { - this.$get = ['$rootScope', '$browser', '$location', - function($rootScope, $browser, $location) { - - /** - * @name $testability - * - * @description - * The private $$testability service provides a collection of methods for use when debugging - * or by automated test and debugging tools. - */ - var testability = {}; - - /** - * @name $$testability#findBindings - * - * @description - * Returns an array of elements that are bound (via ng-bind or {{}}) - * to expressions matching the input. - * - * @param {Element} element The element root to search from. - * @param {string} expression The binding expression to match. - * @param {boolean} opt_exactMatch If true, only returns exact matches - * for the expression. Filters and whitespace are ignored. - */ - testability.findBindings = function(element, expression, opt_exactMatch) { - var bindings = element.getElementsByClassName('ng-binding'); - var matches = []; - forEach(bindings, function(binding) { - var dataBinding = angular.element(binding).data('$binding'); - if (dataBinding) { - forEach(dataBinding, function(bindingName) { - if (opt_exactMatch) { - var matcher = new RegExp('(^|\\s)' + escapeForRegexp(expression) + '(\\s|\\||$)'); - if (matcher.test(bindingName)) { - matches.push(binding); - } - } else { - if (bindingName.indexOf(expression) !== -1) { - matches.push(binding); - } - } - }); - } - }); - return matches; - }; - - /** - * @name $$testability#findModels - * - * @description - * Returns an array of elements that are two-way found via ng-model to - * expressions matching the input. - * - * @param {Element} element The element root to search from. - * @param {string} expression The model expression to match. - * @param {boolean} opt_exactMatch If true, only returns exact matches - * for the expression. - */ - testability.findModels = function(element, expression, opt_exactMatch) { - var prefixes = ['ng-', 'data-ng-', 'ng\\:']; - for (var p = 0; p < prefixes.length; ++p) { - var attributeEquals = opt_exactMatch ? '=' : '*='; - var selector = '[' + prefixes[p] + 'model' + attributeEquals + '"' + expression + '"]'; - var elements = element.querySelectorAll(selector); - if (elements.length) { - return elements; - } - } - }; - - /** - * @name $$testability#getLocation - * - * @description - * Shortcut for getting the location in a browser agnostic way. Returns - * the path, search, and hash. (e.g. /path?a=b#hash) - */ - testability.getLocation = function() { - return $location.url(); - }; - - /** - * @name $$testability#setLocation - * - * @description - * Shortcut for navigating to a location without doing a full page reload. - * - * @param {string} url The location url (path, search and hash, - * e.g. /path?a=b#hash) to go to. - */ - testability.setLocation = function(url) { - if (url !== $location.url()) { - $location.url(url); - $rootScope.$digest(); - } - }; - - /** - * @name $$testability#whenStable - * - * @description - * Calls the callback when all pending tasks are completed. - * - * Types of tasks waited for include: - * - Pending timeouts (via {@link $timeout}). - * - Pending HTTP requests (via {@link $http}). - * - In-progress route transitions (via {@link $route}). - * - Pending tasks scheduled via {@link $rootScope#$applyAsync}. - * - Pending tasks scheduled via {@link $rootScope#$evalAsync}. - * These include tasks scheduled via `$evalAsync()` indirectly (such as {@link $q} promises). - * - * @param {function} callback - */ - testability.whenStable = function(callback) { - $browser.notifyWhenNoOutstandingRequests(callback); - }; - - return testability; - }]; -} - -var $timeoutMinErr = minErr('$timeout'); - -/** @this */ -function $TimeoutProvider() { - this.$get = ['$rootScope', '$browser', '$q', '$$q', '$exceptionHandler', - function($rootScope, $browser, $q, $$q, $exceptionHandler) { - - var deferreds = {}; - - - /** - * @ngdoc service - * @name $timeout - * - * @description - * AngularJS's wrapper for `window.setTimeout`. The `fn` function is wrapped into a try/catch - * block and delegates any exceptions to - * {@link ng.$exceptionHandler $exceptionHandler} service. - * - * The return value of calling `$timeout` is a promise, which will be resolved when - * the delay has passed and the timeout function, if provided, is executed. - * - * To cancel a timeout request, call `$timeout.cancel(promise)`. - * - * In tests you can use {@link ngMock.$timeout `$timeout.flush()`} to - * synchronously flush the queue of deferred functions. - * - * If you only want a promise that will be resolved after some specified delay - * then you can call `$timeout` without the `fn` function. - * - * @param {function()=} fn A function, whose execution should be delayed. - * @param {number=} [delay=0] Delay in milliseconds. - * @param {boolean=} [invokeApply=true] If set to `false` skips model dirty checking, otherwise - * will invoke `fn` within the {@link ng.$rootScope.Scope#$apply $apply} block. - * @param {...*=} Pass additional parameters to the executed function. - * @returns {Promise} Promise that will be resolved when the timeout is reached. The promise - * will be resolved with the return value of the `fn` function. - * - */ - function timeout(fn, delay, invokeApply) { - if (!isFunction(fn)) { - invokeApply = delay; - delay = fn; - fn = noop; - } - - var args = sliceArgs(arguments, 3), - skipApply = (isDefined(invokeApply) && !invokeApply), - deferred = (skipApply ? $$q : $q).defer(), - promise = deferred.promise, - timeoutId; - - timeoutId = $browser.defer(function() { - try { - deferred.resolve(fn.apply(null, args)); - } catch (e) { - deferred.reject(e); - $exceptionHandler(e); - } finally { - delete deferreds[promise.$$timeoutId]; - } - - if (!skipApply) $rootScope.$apply(); - }, delay, '$timeout'); - - promise.$$timeoutId = timeoutId; - deferreds[timeoutId] = deferred; - - return promise; - } - - - /** - * @ngdoc method - * @name $timeout#cancel - * - * @description - * Cancels a task associated with the `promise`. As a result of this, the promise will be - * resolved with a rejection. - * - * @param {Promise=} promise Promise returned by the `$timeout` function. - * @returns {boolean} Returns `true` if the task hasn't executed yet and was successfully - * canceled. - */ - timeout.cancel = function(promise) { - if (!promise) return false; - - if (!promise.hasOwnProperty('$$timeoutId')) { - throw $timeoutMinErr('badprom', - '`$timeout.cancel()` called with a promise that was not generated by `$timeout()`.'); - } - - if (!deferreds.hasOwnProperty(promise.$$timeoutId)) return false; - - var id = promise.$$timeoutId; - var deferred = deferreds[id]; - - // Timeout cancels should not report an unhandled promise. - markQExceptionHandled(deferred.promise); - deferred.reject('canceled'); - delete deferreds[id]; - - return $browser.defer.cancel(id); - }; - - return timeout; - }]; -} - -// NOTE: The usage of window and document instead of $window and $document here is -// deliberate. This service depends on the specific behavior of anchor nodes created by the -// browser (resolving and parsing URLs) that is unlikely to be provided by mock objects and -// cause us to break tests. In addition, when the browser resolves a URL for XHR, it -// doesn't know about mocked locations and resolves URLs to the real document - which is -// exactly the behavior needed here. There is little value is mocking these out for this -// service. -var urlParsingNode = window.document.createElement('a'); -var originUrl = urlResolve(window.location.href); -var baseUrlParsingNode; - -urlParsingNode.href = 'http://[::1]'; - -// Support: IE 9-11 only, Edge 16-17 only (fixed in 18 Preview) -// IE/Edge don't wrap IPv6 addresses' hostnames in square brackets -// when parsed out of an anchor element. -var ipv6InBrackets = urlParsingNode.hostname === '[::1]'; - -/** - * - * Implementation Notes for non-IE browsers - * ---------------------------------------- - * Assigning a URL to the href property of an anchor DOM node, even one attached to the DOM, - * results both in the normalizing and parsing of the URL. Normalizing means that a relative - * URL will be resolved into an absolute URL in the context of the application document. - * Parsing means that the anchor node's host, hostname, protocol, port, pathname and related - * properties are all populated to reflect the normalized URL. This approach has wide - * compatibility - Safari 1+, Mozilla 1+ etc. See - * http://www.aptana.com/reference/html/api/HTMLAnchorElement.html - * - * Implementation Notes for IE - * --------------------------- - * IE <= 10 normalizes the URL when assigned to the anchor node similar to the other - * browsers. However, the parsed components will not be set if the URL assigned did not specify - * them. (e.g. if you assign a.href = "foo", then a.protocol, a.host, etc. will be empty.) We - * work around that by performing the parsing in a 2nd step by taking a previously normalized - * URL (e.g. by assigning to a.href) and assigning it a.href again. This correctly populates the - * properties such as protocol, hostname, port, etc. - * - * References: - * http://developer.mozilla.org/en-US/docs/Web/API/HTMLAnchorElement - * http://www.aptana.com/reference/html/api/HTMLAnchorElement.html - * http://url.spec.whatwg.org/#urlutils - * https://github.com/angular/angular.js/pull/2902 - * http://james.padolsey.com/javascript/parsing-urls-with-the-dom/ - * - * @kind function - * @param {string|object} url The URL to be parsed. If `url` is not a string, it will be returned - * unchanged. - * @description Normalizes and parses a URL. - * @returns {object} Returns the normalized URL as a dictionary. - * - * | member name | Description | - * |---------------|------------------------------------------------------------------------| - * | href | A normalized version of the provided URL if it was not an absolute URL | - * | protocol | The protocol without the trailing colon | - * | host | The host and port (if the port is non-default) of the normalizedUrl | - * | search | The search params, minus the question mark | - * | hash | The hash string, minus the hash symbol | - * | hostname | The hostname | - * | port | The port, without ":" | - * | pathname | The pathname, beginning with "/" | - * - */ -function urlResolve(url) { - if (!isString(url)) return url; - - var href = url; - - // Support: IE 9-11 only - if (msie) { - // Normalize before parse. Refer Implementation Notes on why this is - // done in two steps on IE. - urlParsingNode.setAttribute('href', href); - href = urlParsingNode.href; - } - - urlParsingNode.setAttribute('href', href); - - var hostname = urlParsingNode.hostname; - - if (!ipv6InBrackets && hostname.indexOf(':') > -1) { - hostname = '[' + hostname + ']'; - } - - return { - href: urlParsingNode.href, - protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '', - host: urlParsingNode.host, - search: urlParsingNode.search ? urlParsingNode.search.replace(/^\?/, '') : '', - hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '', - hostname: hostname, - port: urlParsingNode.port, - pathname: (urlParsingNode.pathname.charAt(0) === '/') - ? urlParsingNode.pathname - : '/' + urlParsingNode.pathname - }; -} - -/** - * Parse a request URL and determine whether this is a same-origin request as the application - * document. - * - * @param {string|object} requestUrl The url of the request as a string that will be resolved - * or a parsed URL object. - * @returns {boolean} Whether the request is for the same origin as the application document. - */ -function urlIsSameOrigin(requestUrl) { - return urlsAreSameOrigin(requestUrl, originUrl); -} - -/** - * Parse a request URL and determine whether it is same-origin as the current document base URL. - * - * Note: The base URL is usually the same as the document location (`location.href`) but can - * be overriden by using the `` tag. - * - * @param {string|object} requestUrl The url of the request as a string that will be resolved - * or a parsed URL object. - * @returns {boolean} Whether the URL is same-origin as the document base URL. - */ -function urlIsSameOriginAsBaseUrl(requestUrl) { - return urlsAreSameOrigin(requestUrl, getBaseUrl()); -} - -/** - * Create a function that can check a URL's origin against a list of allowed/whitelisted origins. - * The current location's origin is implicitly trusted. - * - * @param {string[]} whitelistedOriginUrls - A list of URLs (strings), whose origins are trusted. - * - * @returns {Function} - A function that receives a URL (string or parsed URL object) and returns - * whether it is of an allowed origin. - */ -function urlIsAllowedOriginFactory(whitelistedOriginUrls) { - var parsedAllowedOriginUrls = [originUrl].concat(whitelistedOriginUrls.map(urlResolve)); - - /** - * Check whether the specified URL (string or parsed URL object) has an origin that is allowed - * based on a list of whitelisted-origin URLs. The current location's origin is implicitly - * trusted. - * - * @param {string|Object} requestUrl - The URL to be checked (provided as a string that will be - * resolved or a parsed URL object). - * - * @returns {boolean} - Whether the specified URL is of an allowed origin. - */ - return function urlIsAllowedOrigin(requestUrl) { - var parsedUrl = urlResolve(requestUrl); - return parsedAllowedOriginUrls.some(urlsAreSameOrigin.bind(null, parsedUrl)); - }; -} - -/** - * Determine if two URLs share the same origin. - * - * @param {string|Object} url1 - First URL to compare as a string or a normalized URL in the form of - * a dictionary object returned by `urlResolve()`. - * @param {string|object} url2 - Second URL to compare as a string or a normalized URL in the form - * of a dictionary object returned by `urlResolve()`. - * - * @returns {boolean} - True if both URLs have the same origin, and false otherwise. - */ -function urlsAreSameOrigin(url1, url2) { - url1 = urlResolve(url1); - url2 = urlResolve(url2); - - return (url1.protocol === url2.protocol && - url1.host === url2.host); -} - -/** - * Returns the current document base URL. - * @returns {string} - */ -function getBaseUrl() { - if (window.document.baseURI) { - return window.document.baseURI; - } - - // `document.baseURI` is available everywhere except IE - if (!baseUrlParsingNode) { - baseUrlParsingNode = window.document.createElement('a'); - baseUrlParsingNode.href = '.'; - - // Work-around for IE bug described in Implementation Notes. The fix in `urlResolve()` is not - // suitable here because we need to track changes to the base URL. - baseUrlParsingNode = baseUrlParsingNode.cloneNode(false); - } - return baseUrlParsingNode.href; -} - -/** - * @ngdoc service - * @name $window - * @this - * - * @description - * A reference to the browser's `window` object. While `window` - * is globally available in JavaScript, it causes testability problems, because - * it is a global variable. In AngularJS we always refer to it through the - * `$window` service, so it may be overridden, removed or mocked for testing. - * - * Expressions, like the one defined for the `ngClick` directive in the example - * below, are evaluated with respect to the current scope. Therefore, there is - * no risk of inadvertently coding in a dependency on a global value in such an - * expression. - * - * @example - - - -
- - -
-
- - it('should display the greeting in the input box', function() { - element(by.model('greeting')).sendKeys('Hello, E2E Tests'); - // If we click the button it will block the test runner - // element(':button').click(); - }); - -
- */ -function $WindowProvider() { - this.$get = valueFn(window); -} - -/** - * @name $$cookieReader - * @requires $document - * - * @description - * This is a private service for reading cookies used by $http and ngCookies - * - * @return {Object} a key/value map of the current cookies - */ -function $$CookieReader($document) { - var rawDocument = $document[0] || {}; - var lastCookies = {}; - var lastCookieString = ''; - - function safeGetCookie(rawDocument) { - try { - return rawDocument.cookie || ''; - } catch (e) { - return ''; - } - } - - function safeDecodeURIComponent(str) { - try { - return decodeURIComponent(str); - } catch (e) { - return str; - } - } - - return function() { - var cookieArray, cookie, i, index, name; - var currentCookieString = safeGetCookie(rawDocument); - - if (currentCookieString !== lastCookieString) { - lastCookieString = currentCookieString; - cookieArray = lastCookieString.split('; '); - lastCookies = {}; - - for (i = 0; i < cookieArray.length; i++) { - cookie = cookieArray[i]; - index = cookie.indexOf('='); - if (index > 0) { //ignore nameless cookies - name = safeDecodeURIComponent(cookie.substring(0, index)); - // the first value that is seen for a cookie is the most - // specific one. values for the same cookie name that - // follow are for less specific paths. - if (isUndefined(lastCookies[name])) { - lastCookies[name] = safeDecodeURIComponent(cookie.substring(index + 1)); - } - } - } - } - return lastCookies; - }; -} - -$$CookieReader.$inject = ['$document']; - -/** @this */ -function $$CookieReaderProvider() { - this.$get = $$CookieReader; -} - -/* global currencyFilter: true, - dateFilter: true, - filterFilter: true, - jsonFilter: true, - limitToFilter: true, - lowercaseFilter: true, - numberFilter: true, - orderByFilter: true, - uppercaseFilter: true, - */ - -/** - * @ngdoc provider - * @name $filterProvider - * @description - * - * Filters are just functions which transform input to an output. However filters need to be - * Dependency Injected. To achieve this a filter definition consists of a factory function which is - * annotated with dependencies and is responsible for creating a filter function. - * - *
- * **Note:** Filter names must be valid AngularJS {@link expression} identifiers, such as `uppercase` or `orderBy`. - * Names with special characters, such as hyphens and dots, are not allowed. If you wish to namespace - * your filters, then you can use capitalization (`myappSubsectionFilterx`) or underscores - * (`myapp_subsection_filterx`). - *
- * - * ```js - * // Filter registration - * function MyModule($provide, $filterProvider) { - * // create a service to demonstrate injection (not always needed) - * $provide.value('greet', function(name){ - * return 'Hello ' + name + '!'; - * }); - * - * // register a filter factory which uses the - * // greet service to demonstrate DI. - * $filterProvider.register('greet', function(greet){ - * // return the filter function which uses the greet service - * // to generate salutation - * return function(text) { - * // filters need to be forgiving so check input validity - * return text && greet(text) || text; - * }; - * }); - * } - * ``` - * - * The filter function is registered with the `$injector` under the filter name suffix with - * `Filter`. - * - * ```js - * it('should be the same instance', inject( - * function($filterProvider) { - * $filterProvider.register('reverse', function(){ - * return ...; - * }); - * }, - * function($filter, reverseFilter) { - * expect($filter('reverse')).toBe(reverseFilter); - * }); - * ``` - * - * - * For more information about how AngularJS filters work, and how to create your own filters, see - * {@link guide/filter Filters} in the AngularJS Developer Guide. - */ - -/** - * @ngdoc service - * @name $filter - * @kind function - * @description - * Filters are used for formatting data displayed to the user. - * - * They can be used in view templates, controllers or services. AngularJS comes - * with a collection of [built-in filters](api/ng/filter), but it is easy to - * define your own as well. - * - * The general syntax in templates is as follows: - * - * ```html - * {{ expression [| filter_name[:parameter_value] ... ] }} - * ``` - * - * @param {String} name Name of the filter function to retrieve - * @return {Function} the filter function - * @example - - -
-

{{ originalText }}

-

{{ filteredText }}

-
-
- - - angular.module('filterExample', []) - .controller('MainCtrl', function($scope, $filter) { - $scope.originalText = 'hello'; - $scope.filteredText = $filter('uppercase')($scope.originalText); - }); - -
- */ -$FilterProvider.$inject = ['$provide']; -/** @this */ -function $FilterProvider($provide) { - var suffix = 'Filter'; - - /** - * @ngdoc method - * @name $filterProvider#register - * @param {string|Object} name Name of the filter function, or an object map of filters where - * the keys are the filter names and the values are the filter factories. - * - *
- * **Note:** Filter names must be valid AngularJS {@link expression} identifiers, such as `uppercase` or `orderBy`. - * Names with special characters, such as hyphens and dots, are not allowed. If you wish to namespace - * your filters, then you can use capitalization (`myappSubsectionFilterx`) or underscores - * (`myapp_subsection_filterx`). - *
- * @param {Function} factory If the first argument was a string, a factory function for the filter to be registered. - * @returns {Object} Registered filter instance, or if a map of filters was provided then a map - * of the registered filter instances. - */ - function register(name, factory) { - if (isObject(name)) { - var filters = {}; - forEach(name, function(filter, key) { - filters[key] = register(key, filter); - }); - return filters; - } else { - return $provide.factory(name + suffix, factory); - } - } - this.register = register; - - this.$get = ['$injector', function($injector) { - return function(name) { - return $injector.get(name + suffix); - }; - }]; - - //////////////////////////////////////// - - /* global - currencyFilter: false, - dateFilter: false, - filterFilter: false, - jsonFilter: false, - limitToFilter: false, - lowercaseFilter: false, - numberFilter: false, - orderByFilter: false, - uppercaseFilter: false - */ - - register('currency', currencyFilter); - register('date', dateFilter); - register('filter', filterFilter); - register('json', jsonFilter); - register('limitTo', limitToFilter); - register('lowercase', lowercaseFilter); - register('number', numberFilter); - register('orderBy', orderByFilter); - register('uppercase', uppercaseFilter); -} - -/** - * @ngdoc filter - * @name filter - * @kind function - * - * @description - * Selects a subset of items from `array` and returns it as a new array. - * - * @param {Array} array The source array. - *
- * **Note**: If the array contains objects that reference themselves, filtering is not possible. - *
- * @param {string|Object|function()} expression The predicate to be used for selecting items from - * `array`. - * - * Can be one of: - * - * - `string`: The string is used for matching against the contents of the `array`. All strings or - * objects with string properties in `array` that match this string will be returned. This also - * applies to nested object properties. - * The predicate can be negated by prefixing the string with `!`. - * - * - `Object`: A pattern object can be used to filter specific properties on objects contained - * by `array`. For example `{name:"M", phone:"1"}` predicate will return an array of items - * which have property `name` containing "M" and property `phone` containing "1". A special - * property name (`$` by default) can be used (e.g. as in `{$: "text"}`) to accept a match - * against any property of the object or its nested object properties. That's equivalent to the - * simple substring match with a `string` as described above. The special property name can be - * overwritten, using the `anyPropertyKey` parameter. - * The predicate can be negated by prefixing the string with `!`. - * For example `{name: "!M"}` predicate will return an array of items which have property `name` - * not containing "M". - * - * Note that a named property will match properties on the same level only, while the special - * `$` property will match properties on the same level or deeper. E.g. an array item like - * `{name: {first: 'John', last: 'Doe'}}` will **not** be matched by `{name: 'John'}`, but - * **will** be matched by `{$: 'John'}`. - * - * - `function(value, index, array)`: A predicate function can be used to write arbitrary filters. - * The function is called for each element of the array, with the element, its index, and - * the entire array itself as arguments. - * - * The final result is an array of those elements that the predicate returned true for. - * - * @param {function(actual, expected)|true|false} [comparator] Comparator which is used in - * determining if values retrieved using `expression` (when it is not a function) should be - * considered a match based on the expected value (from the filter expression) and actual - * value (from the object in the array). - * - * Can be one of: - * - * - `function(actual, expected)`: - * The function will be given the object value and the predicate value to compare and - * should return true if both values should be considered equal. - * - * - `true`: A shorthand for `function(actual, expected) { return angular.equals(actual, expected)}`. - * This is essentially strict comparison of expected and actual. - * - * - `false`: A short hand for a function which will look for a substring match in a case - * insensitive way. Primitive values are converted to strings. Objects are not compared against - * primitives, unless they have a custom `toString` method (e.g. `Date` objects). - * - * - * Defaults to `false`. - * - * @param {string} [anyPropertyKey] The special property name that matches against any property. - * By default `$`. - * - * @example - - -
- - - - - - - - -
NamePhone
{{friend.name}}{{friend.phone}}
-
-
-
-
-
- - - - - - -
NamePhone
{{friendObj.name}}{{friendObj.phone}}
-
- - var expectFriendNames = function(expectedNames, key) { - element.all(by.repeater(key + ' in friends').column(key + '.name')).then(function(arr) { - arr.forEach(function(wd, i) { - expect(wd.getText()).toMatch(expectedNames[i]); - }); - }); - }; - - it('should search across all fields when filtering with a string', function() { - var searchText = element(by.model('searchText')); - searchText.clear(); - searchText.sendKeys('m'); - expectFriendNames(['Mary', 'Mike', 'Adam'], 'friend'); - - searchText.clear(); - searchText.sendKeys('76'); - expectFriendNames(['John', 'Julie'], 'friend'); - }); - - it('should search in specific fields when filtering with a predicate object', function() { - var searchAny = element(by.model('search.$')); - searchAny.clear(); - searchAny.sendKeys('i'); - expectFriendNames(['Mary', 'Mike', 'Julie', 'Juliette'], 'friendObj'); - }); - it('should use a equal comparison when comparator is true', function() { - var searchName = element(by.model('search.name')); - var strict = element(by.model('strict')); - searchName.clear(); - searchName.sendKeys('Julie'); - strict.click(); - expectFriendNames(['Julie'], 'friendObj'); - }); - -
- */ - -function filterFilter() { - return function(array, expression, comparator, anyPropertyKey) { - if (!isArrayLike(array)) { - if (array == null) { - return array; - } else { - throw minErr('filter')('notarray', 'Expected array but received: {0}', array); - } - } - - anyPropertyKey = anyPropertyKey || '$'; - var expressionType = getTypeForFilter(expression); - var predicateFn; - var matchAgainstAnyProp; - - switch (expressionType) { - case 'function': - predicateFn = expression; - break; - case 'boolean': - case 'null': - case 'number': - case 'string': - matchAgainstAnyProp = true; - // falls through - case 'object': - predicateFn = createPredicateFn(expression, comparator, anyPropertyKey, matchAgainstAnyProp); - break; - default: - return array; - } - - return Array.prototype.filter.call(array, predicateFn); - }; -} - -// Helper functions for `filterFilter` -function createPredicateFn(expression, comparator, anyPropertyKey, matchAgainstAnyProp) { - var shouldMatchPrimitives = isObject(expression) && (anyPropertyKey in expression); - var predicateFn; - - if (comparator === true) { - comparator = equals; - } else if (!isFunction(comparator)) { - comparator = function(actual, expected) { - if (isUndefined(actual)) { - // No substring matching against `undefined` - return false; - } - if ((actual === null) || (expected === null)) { - // No substring matching against `null`; only match against `null` - return actual === expected; - } - if (isObject(expected) || (isObject(actual) && !hasCustomToString(actual))) { - // Should not compare primitives against objects, unless they have custom `toString` method - return false; - } - - actual = lowercase('' + actual); - expected = lowercase('' + expected); - return actual.indexOf(expected) !== -1; - }; - } - - predicateFn = function(item) { - if (shouldMatchPrimitives && !isObject(item)) { - return deepCompare(item, expression[anyPropertyKey], comparator, anyPropertyKey, false); - } - return deepCompare(item, expression, comparator, anyPropertyKey, matchAgainstAnyProp); - }; - - return predicateFn; -} - -function deepCompare(actual, expected, comparator, anyPropertyKey, matchAgainstAnyProp, dontMatchWholeObject) { - var actualType = getTypeForFilter(actual); - var expectedType = getTypeForFilter(expected); - - if ((expectedType === 'string') && (expected.charAt(0) === '!')) { - return !deepCompare(actual, expected.substring(1), comparator, anyPropertyKey, matchAgainstAnyProp); - } else if (isArray(actual)) { - // In case `actual` is an array, consider it a match - // if ANY of it's items matches `expected` - return actual.some(function(item) { - return deepCompare(item, expected, comparator, anyPropertyKey, matchAgainstAnyProp); - }); - } - - switch (actualType) { - case 'object': - var key; - if (matchAgainstAnyProp) { - for (key in actual) { - // Under certain, rare, circumstances, key may not be a string and `charAt` will be undefined - // See: https://github.com/angular/angular.js/issues/15644 - if (key.charAt && (key.charAt(0) !== '$') && - deepCompare(actual[key], expected, comparator, anyPropertyKey, true)) { - return true; - } - } - return dontMatchWholeObject ? false : deepCompare(actual, expected, comparator, anyPropertyKey, false); - } else if (expectedType === 'object') { - for (key in expected) { - var expectedVal = expected[key]; - if (isFunction(expectedVal) || isUndefined(expectedVal)) { - continue; - } - - var matchAnyProperty = key === anyPropertyKey; - var actualVal = matchAnyProperty ? actual : actual[key]; - if (!deepCompare(actualVal, expectedVal, comparator, anyPropertyKey, matchAnyProperty, matchAnyProperty)) { - return false; - } - } - return true; - } else { - return comparator(actual, expected); - } - case 'function': - return false; - default: - return comparator(actual, expected); - } -} - -// Used for easily differentiating between `null` and actual `object` -function getTypeForFilter(val) { - return (val === null) ? 'null' : typeof val; -} - -var MAX_DIGITS = 22; -var DECIMAL_SEP = '.'; -var ZERO_CHAR = '0'; - -/** - * @ngdoc filter - * @name currency - * @kind function - * - * @description - * Formats a number as a currency (ie $1,234.56). When no currency symbol is provided, default - * symbol for current locale is used. - * - * @param {number} amount Input to filter. - * @param {string=} symbol Currency symbol or identifier to be displayed. - * @param {number=} fractionSize Number of decimal places to round the amount to, defaults to default max fraction size for current locale - * @returns {string} Formatted number. - * - * - * @example - - - -
-
- default currency symbol ($): {{amount | currency}}
- custom currency identifier (USD$): {{amount | currency:"USD$"}}
- no fractions (0): {{amount | currency:"USD$":0}} -
-
- - it('should init with 1234.56', function() { - expect(element(by.id('currency-default')).getText()).toBe('$1,234.56'); - expect(element(by.id('currency-custom')).getText()).toBe('USD$1,234.56'); - expect(element(by.id('currency-no-fractions')).getText()).toBe('USD$1,235'); - }); - it('should update', function() { - if (browser.params.browser === 'safari') { - // Safari does not understand the minus key. See - // https://github.com/angular/protractor/issues/481 - return; - } - element(by.model('amount')).clear(); - element(by.model('amount')).sendKeys('-1234'); - expect(element(by.id('currency-default')).getText()).toBe('-$1,234.00'); - expect(element(by.id('currency-custom')).getText()).toBe('-USD$1,234.00'); - expect(element(by.id('currency-no-fractions')).getText()).toBe('-USD$1,234'); - }); - -
- */ -currencyFilter.$inject = ['$locale']; -function currencyFilter($locale) { - var formats = $locale.NUMBER_FORMATS; - return function(amount, currencySymbol, fractionSize) { - if (isUndefined(currencySymbol)) { - currencySymbol = formats.CURRENCY_SYM; - } - - if (isUndefined(fractionSize)) { - fractionSize = formats.PATTERNS[1].maxFrac; - } - - // If the currency symbol is empty, trim whitespace around the symbol - var currencySymbolRe = !currencySymbol ? /\s*\u00A4\s*/g : /\u00A4/g; - - // if null or undefined pass it through - return (amount == null) - ? amount - : formatNumber(amount, formats.PATTERNS[1], formats.GROUP_SEP, formats.DECIMAL_SEP, fractionSize). - replace(currencySymbolRe, currencySymbol); - }; -} - -/** - * @ngdoc filter - * @name number - * @kind function - * - * @description - * Formats a number as text. - * - * If the input is null or undefined, it will just be returned. - * If the input is infinite (Infinity or -Infinity), the Infinity symbol '∞' or '-∞' is returned, respectively. - * If the input is not a number an empty string is returned. - * - * - * @param {number|string} number Number to format. - * @param {(number|string)=} fractionSize Number of decimal places to round the number to. - * If this is not provided then the fraction size is computed from the current locale's number - * formatting pattern. In the case of the default locale, it will be 3. - * @returns {string} Number rounded to `fractionSize` appropriately formatted based on the current - * locale (e.g., in the en_US locale it will have "." as the decimal separator and - * include "," group separators after each third digit). - * - * @example - - - -
-
- Default formatting: {{val | number}}
- No fractions: {{val | number:0}}
- Negative number: {{-val | number:4}} -
-
- - it('should format numbers', function() { - expect(element(by.id('number-default')).getText()).toBe('1,234.568'); - expect(element(by.binding('val | number:0')).getText()).toBe('1,235'); - expect(element(by.binding('-val | number:4')).getText()).toBe('-1,234.5679'); - }); - - it('should update', function() { - element(by.model('val')).clear(); - element(by.model('val')).sendKeys('3374.333'); - expect(element(by.id('number-default')).getText()).toBe('3,374.333'); - expect(element(by.binding('val | number:0')).getText()).toBe('3,374'); - expect(element(by.binding('-val | number:4')).getText()).toBe('-3,374.3330'); - }); - -
- */ -numberFilter.$inject = ['$locale']; -function numberFilter($locale) { - var formats = $locale.NUMBER_FORMATS; - return function(number, fractionSize) { - - // if null or undefined pass it through - return (number == null) - ? number - : formatNumber(number, formats.PATTERNS[0], formats.GROUP_SEP, formats.DECIMAL_SEP, - fractionSize); - }; -} - -/** - * Parse a number (as a string) into three components that can be used - * for formatting the number. - * - * (Significant bits of this parse algorithm came from https://github.com/MikeMcl/big.js/) - * - * @param {string} numStr The number to parse - * @return {object} An object describing this number, containing the following keys: - * - d : an array of digits containing leading zeros as necessary - * - i : the number of the digits in `d` that are to the left of the decimal point - * - e : the exponent for numbers that would need more than `MAX_DIGITS` digits in `d` - * - */ -function parse(numStr) { - var exponent = 0, digits, numberOfIntegerDigits; - var i, j, zeros; - - // Decimal point? - if ((numberOfIntegerDigits = numStr.indexOf(DECIMAL_SEP)) > -1) { - numStr = numStr.replace(DECIMAL_SEP, ''); - } - - // Exponential form? - if ((i = numStr.search(/e/i)) > 0) { - // Work out the exponent. - if (numberOfIntegerDigits < 0) numberOfIntegerDigits = i; - numberOfIntegerDigits += +numStr.slice(i + 1); - numStr = numStr.substring(0, i); - } else if (numberOfIntegerDigits < 0) { - // There was no decimal point or exponent so it is an integer. - numberOfIntegerDigits = numStr.length; - } - - // Count the number of leading zeros. - for (i = 0; numStr.charAt(i) === ZERO_CHAR; i++) { /* empty */ } - - if (i === (zeros = numStr.length)) { - // The digits are all zero. - digits = [0]; - numberOfIntegerDigits = 1; - } else { - // Count the number of trailing zeros - zeros--; - while (numStr.charAt(zeros) === ZERO_CHAR) zeros--; - - // Trailing zeros are insignificant so ignore them - numberOfIntegerDigits -= i; - digits = []; - // Convert string to array of digits without leading/trailing zeros. - for (j = 0; i <= zeros; i++, j++) { - digits[j] = +numStr.charAt(i); - } - } - - // If the number overflows the maximum allowed digits then use an exponent. - if (numberOfIntegerDigits > MAX_DIGITS) { - digits = digits.splice(0, MAX_DIGITS - 1); - exponent = numberOfIntegerDigits - 1; - numberOfIntegerDigits = 1; - } - - return { d: digits, e: exponent, i: numberOfIntegerDigits }; -} - -/** - * Round the parsed number to the specified number of decimal places - * This function changed the parsedNumber in-place - */ -function roundNumber(parsedNumber, fractionSize, minFrac, maxFrac) { - var digits = parsedNumber.d; - var fractionLen = digits.length - parsedNumber.i; - - // determine fractionSize if it is not specified; `+fractionSize` converts it to a number - fractionSize = (isUndefined(fractionSize)) ? Math.min(Math.max(minFrac, fractionLen), maxFrac) : +fractionSize; - - // The index of the digit to where rounding is to occur - var roundAt = fractionSize + parsedNumber.i; - var digit = digits[roundAt]; - - if (roundAt > 0) { - // Drop fractional digits beyond `roundAt` - digits.splice(Math.max(parsedNumber.i, roundAt)); - - // Set non-fractional digits beyond `roundAt` to 0 - for (var j = roundAt; j < digits.length; j++) { - digits[j] = 0; - } - } else { - // We rounded to zero so reset the parsedNumber - fractionLen = Math.max(0, fractionLen); - parsedNumber.i = 1; - digits.length = Math.max(1, roundAt = fractionSize + 1); - digits[0] = 0; - for (var i = 1; i < roundAt; i++) digits[i] = 0; - } - - if (digit >= 5) { - if (roundAt - 1 < 0) { - for (var k = 0; k > roundAt; k--) { - digits.unshift(0); - parsedNumber.i++; - } - digits.unshift(1); - parsedNumber.i++; - } else { - digits[roundAt - 1]++; - } - } - - // Pad out with zeros to get the required fraction length - for (; fractionLen < Math.max(0, fractionSize); fractionLen++) digits.push(0); - - - // Do any carrying, e.g. a digit was rounded up to 10 - var carry = digits.reduceRight(function(carry, d, i, digits) { - d = d + carry; - digits[i] = d % 10; - return Math.floor(d / 10); - }, 0); - if (carry) { - digits.unshift(carry); - parsedNumber.i++; - } -} - -/** - * Format a number into a string - * @param {number} number The number to format - * @param {{ - * minFrac, // the minimum number of digits required in the fraction part of the number - * maxFrac, // the maximum number of digits required in the fraction part of the number - * gSize, // number of digits in each group of separated digits - * lgSize, // number of digits in the last group of digits before the decimal separator - * negPre, // the string to go in front of a negative number (e.g. `-` or `(`)) - * posPre, // the string to go in front of a positive number - * negSuf, // the string to go after a negative number (e.g. `)`) - * posSuf // the string to go after a positive number - * }} pattern - * @param {string} groupSep The string to separate groups of number (e.g. `,`) - * @param {string} decimalSep The string to act as the decimal separator (e.g. `.`) - * @param {[type]} fractionSize The size of the fractional part of the number - * @return {string} The number formatted as a string - */ -function formatNumber(number, pattern, groupSep, decimalSep, fractionSize) { - - if (!(isString(number) || isNumber(number)) || isNaN(number)) return ''; - - var isInfinity = !isFinite(number); - var isZero = false; - var numStr = Math.abs(number) + '', - formattedText = '', - parsedNumber; - - if (isInfinity) { - formattedText = '\u221e'; - } else { - parsedNumber = parse(numStr); - - roundNumber(parsedNumber, fractionSize, pattern.minFrac, pattern.maxFrac); - - var digits = parsedNumber.d; - var integerLen = parsedNumber.i; - var exponent = parsedNumber.e; - var decimals = []; - isZero = digits.reduce(function(isZero, d) { return isZero && !d; }, true); - - // pad zeros for small numbers - while (integerLen < 0) { - digits.unshift(0); - integerLen++; - } - - // extract decimals digits - if (integerLen > 0) { - decimals = digits.splice(integerLen, digits.length); - } else { - decimals = digits; - digits = [0]; - } - - // format the integer digits with grouping separators - var groups = []; - if (digits.length >= pattern.lgSize) { - groups.unshift(digits.splice(-pattern.lgSize, digits.length).join('')); - } - while (digits.length > pattern.gSize) { - groups.unshift(digits.splice(-pattern.gSize, digits.length).join('')); - } - if (digits.length) { - groups.unshift(digits.join('')); - } - formattedText = groups.join(groupSep); - - // append the decimal digits - if (decimals.length) { - formattedText += decimalSep + decimals.join(''); - } - - if (exponent) { - formattedText += 'e+' + exponent; - } - } - if (number < 0 && !isZero) { - return pattern.negPre + formattedText + pattern.negSuf; - } else { - return pattern.posPre + formattedText + pattern.posSuf; - } -} - -function padNumber(num, digits, trim, negWrap) { - var neg = ''; - if (num < 0 || (negWrap && num <= 0)) { - if (negWrap) { - num = -num + 1; - } else { - num = -num; - neg = '-'; - } - } - num = '' + num; - while (num.length < digits) num = ZERO_CHAR + num; - if (trim) { - num = num.substr(num.length - digits); - } - return neg + num; -} - - -function dateGetter(name, size, offset, trim, negWrap) { - offset = offset || 0; - return function(date) { - var value = date['get' + name](); - if (offset > 0 || value > -offset) { - value += offset; - } - if (value === 0 && offset === -12) value = 12; - return padNumber(value, size, trim, negWrap); - }; -} - -function dateStrGetter(name, shortForm, standAlone) { - return function(date, formats) { - var value = date['get' + name](); - var propPrefix = (standAlone ? 'STANDALONE' : '') + (shortForm ? 'SHORT' : ''); - var get = uppercase(propPrefix + name); - - return formats[get][value]; - }; -} - -function timeZoneGetter(date, formats, offset) { - var zone = -1 * offset; - var paddedZone = (zone >= 0) ? '+' : ''; - - paddedZone += padNumber(Math[zone > 0 ? 'floor' : 'ceil'](zone / 60), 2) + - padNumber(Math.abs(zone % 60), 2); - - return paddedZone; -} - -function getFirstThursdayOfYear(year) { - // 0 = index of January - var dayOfWeekOnFirst = (new Date(year, 0, 1)).getDay(); - // 4 = index of Thursday (+1 to account for 1st = 5) - // 11 = index of *next* Thursday (+1 account for 1st = 12) - return new Date(year, 0, ((dayOfWeekOnFirst <= 4) ? 5 : 12) - dayOfWeekOnFirst); -} - -function getThursdayThisWeek(datetime) { - return new Date(datetime.getFullYear(), datetime.getMonth(), - // 4 = index of Thursday - datetime.getDate() + (4 - datetime.getDay())); -} - -function weekGetter(size) { - return function(date) { - var firstThurs = getFirstThursdayOfYear(date.getFullYear()), - thisThurs = getThursdayThisWeek(date); - - var diff = +thisThurs - +firstThurs, - result = 1 + Math.round(diff / 6.048e8); // 6.048e8 ms per week - - return padNumber(result, size); - }; -} - -function ampmGetter(date, formats) { - return date.getHours() < 12 ? formats.AMPMS[0] : formats.AMPMS[1]; -} - -function eraGetter(date, formats) { - return date.getFullYear() <= 0 ? formats.ERAS[0] : formats.ERAS[1]; -} - -function longEraGetter(date, formats) { - return date.getFullYear() <= 0 ? formats.ERANAMES[0] : formats.ERANAMES[1]; -} - -var DATE_FORMATS = { - yyyy: dateGetter('FullYear', 4, 0, false, true), - yy: dateGetter('FullYear', 2, 0, true, true), - y: dateGetter('FullYear', 1, 0, false, true), - MMMM: dateStrGetter('Month'), - MMM: dateStrGetter('Month', true), - MM: dateGetter('Month', 2, 1), - M: dateGetter('Month', 1, 1), - LLLL: dateStrGetter('Month', false, true), - dd: dateGetter('Date', 2), - d: dateGetter('Date', 1), - HH: dateGetter('Hours', 2), - H: dateGetter('Hours', 1), - hh: dateGetter('Hours', 2, -12), - h: dateGetter('Hours', 1, -12), - mm: dateGetter('Minutes', 2), - m: dateGetter('Minutes', 1), - ss: dateGetter('Seconds', 2), - s: dateGetter('Seconds', 1), - // while ISO 8601 requires fractions to be prefixed with `.` or `,` - // we can be just safely rely on using `sss` since we currently don't support single or two digit fractions - sss: dateGetter('Milliseconds', 3), - EEEE: dateStrGetter('Day'), - EEE: dateStrGetter('Day', true), - a: ampmGetter, - Z: timeZoneGetter, - ww: weekGetter(2), - w: weekGetter(1), - G: eraGetter, - GG: eraGetter, - GGG: eraGetter, - GGGG: longEraGetter -}; - -var DATE_FORMATS_SPLIT = /((?:[^yMLdHhmsaZEwG']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|L+|d+|H+|h+|m+|s+|a|Z|G+|w+))([\s\S]*)/, - NUMBER_STRING = /^-?\d+$/; - -/** - * @ngdoc filter - * @name date - * @kind function - * - * @description - * Formats `date` to a string based on the requested `format`. - * - * `format` string can be composed of the following elements: - * - * * `'yyyy'`: 4 digit representation of year (e.g. AD 1 => 0001, AD 2010 => 2010) - * * `'yy'`: 2 digit representation of year, padded (00-99). (e.g. AD 2001 => 01, AD 2010 => 10) - * * `'y'`: 1 digit representation of year, e.g. (AD 1 => 1, AD 199 => 199) - * * `'MMMM'`: Month in year (January-December) - * * `'MMM'`: Month in year (Jan-Dec) - * * `'MM'`: Month in year, padded (01-12) - * * `'M'`: Month in year (1-12) - * * `'LLLL'`: Stand-alone month in year (January-December) - * * `'dd'`: Day in month, padded (01-31) - * * `'d'`: Day in month (1-31) - * * `'EEEE'`: Day in Week,(Sunday-Saturday) - * * `'EEE'`: Day in Week, (Sun-Sat) - * * `'HH'`: Hour in day, padded (00-23) - * * `'H'`: Hour in day (0-23) - * * `'hh'`: Hour in AM/PM, padded (01-12) - * * `'h'`: Hour in AM/PM, (1-12) - * * `'mm'`: Minute in hour, padded (00-59) - * * `'m'`: Minute in hour (0-59) - * * `'ss'`: Second in minute, padded (00-59) - * * `'s'`: Second in minute (0-59) - * * `'sss'`: Millisecond in second, padded (000-999) - * * `'a'`: AM/PM marker - * * `'Z'`: 4 digit (+sign) representation of the timezone offset (-1200-+1200) - * * `'ww'`: Week of year, padded (00-53). Week 01 is the week with the first Thursday of the year - * * `'w'`: Week of year (0-53). Week 1 is the week with the first Thursday of the year - * * `'G'`, `'GG'`, `'GGG'`: The abbreviated form of the era string (e.g. 'AD') - * * `'GGGG'`: The long form of the era string (e.g. 'Anno Domini') - * - * `format` string can also be one of the following predefined - * {@link guide/i18n localizable formats}: - * - * * `'medium'`: equivalent to `'MMM d, y h:mm:ss a'` for en_US locale - * (e.g. Sep 3, 2010 12:05:08 PM) - * * `'short'`: equivalent to `'M/d/yy h:mm a'` for en_US locale (e.g. 9/3/10 12:05 PM) - * * `'fullDate'`: equivalent to `'EEEE, MMMM d, y'` for en_US locale - * (e.g. Friday, September 3, 2010) - * * `'longDate'`: equivalent to `'MMMM d, y'` for en_US locale (e.g. September 3, 2010) - * * `'mediumDate'`: equivalent to `'MMM d, y'` for en_US locale (e.g. Sep 3, 2010) - * * `'shortDate'`: equivalent to `'M/d/yy'` for en_US locale (e.g. 9/3/10) - * * `'mediumTime'`: equivalent to `'h:mm:ss a'` for en_US locale (e.g. 12:05:08 PM) - * * `'shortTime'`: equivalent to `'h:mm a'` for en_US locale (e.g. 12:05 PM) - * - * `format` string can contain literal values. These need to be escaped by surrounding with single quotes (e.g. - * `"h 'in the morning'"`). In order to output a single quote, escape it - i.e., two single quotes in a sequence - * (e.g. `"h 'o''clock'"`). - * - * Any other characters in the `format` string will be output as-is. - * - * @param {(Date|number|string)} date Date to format either as Date object, milliseconds (string or - * number) or various ISO 8601 datetime string formats (e.g. yyyy-MM-ddTHH:mm:ss.sssZ and its - * shorter versions like yyyy-MM-ddTHH:mmZ, yyyy-MM-dd or yyyyMMddTHHmmssZ). If no timezone is - * specified in the string input, the time is considered to be in the local timezone. - * @param {string=} format Formatting rules (see Description). If not specified, - * `mediumDate` is used. - * @param {string=} timezone Timezone to be used for formatting. It understands UTC/GMT and the - * continental US time zone abbreviations, but for general use, use a time zone offset, for - * example, `'+0430'` (4 hours, 30 minutes east of the Greenwich meridian) - * If not specified, the timezone of the browser will be used. - * @returns {string} Formatted string or the input if input is not recognized as date/millis. - * - * @example - - - {{1288323623006 | date:'medium'}}: - {{1288323623006 | date:'medium'}}
- {{1288323623006 | date:'yyyy-MM-dd HH:mm:ss Z'}}: - {{1288323623006 | date:'yyyy-MM-dd HH:mm:ss Z'}}
- {{1288323623006 | date:'MM/dd/yyyy @ h:mma'}}: - {{'1288323623006' | date:'MM/dd/yyyy @ h:mma'}}
- {{1288323623006 | date:"MM/dd/yyyy 'at' h:mma"}}: - {{'1288323623006' | date:"MM/dd/yyyy 'at' h:mma"}}
-
- - it('should format date', function() { - expect(element(by.binding("1288323623006 | date:'medium'")).getText()). - toMatch(/Oct 2\d, 2010 \d{1,2}:\d{2}:\d{2} (AM|PM)/); - expect(element(by.binding("1288323623006 | date:'yyyy-MM-dd HH:mm:ss Z'")).getText()). - toMatch(/2010-10-2\d \d{2}:\d{2}:\d{2} (-|\+)?\d{4}/); - expect(element(by.binding("'1288323623006' | date:'MM/dd/yyyy @ h:mma'")).getText()). - toMatch(/10\/2\d\/2010 @ \d{1,2}:\d{2}(AM|PM)/); - expect(element(by.binding("'1288323623006' | date:\"MM/dd/yyyy 'at' h:mma\"")).getText()). - toMatch(/10\/2\d\/2010 at \d{1,2}:\d{2}(AM|PM)/); - }); - -
- */ -dateFilter.$inject = ['$locale']; -function dateFilter($locale) { - - - var R_ISO8601_STR = /^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/; - // 1 2 3 4 5 6 7 8 9 10 11 - function jsonStringToDate(string) { - var match; - if ((match = string.match(R_ISO8601_STR))) { - var date = new Date(0), - tzHour = 0, - tzMin = 0, - dateSetter = match[8] ? date.setUTCFullYear : date.setFullYear, - timeSetter = match[8] ? date.setUTCHours : date.setHours; - - if (match[9]) { - tzHour = toInt(match[9] + match[10]); - tzMin = toInt(match[9] + match[11]); - } - dateSetter.call(date, toInt(match[1]), toInt(match[2]) - 1, toInt(match[3])); - var h = toInt(match[4] || 0) - tzHour; - var m = toInt(match[5] || 0) - tzMin; - var s = toInt(match[6] || 0); - var ms = Math.round(parseFloat('0.' + (match[7] || 0)) * 1000); - timeSetter.call(date, h, m, s, ms); - return date; - } - return string; - } - - - return function(date, format, timezone) { - var text = '', - parts = [], - fn, match; - - format = format || 'mediumDate'; - format = $locale.DATETIME_FORMATS[format] || format; - if (isString(date)) { - date = NUMBER_STRING.test(date) ? toInt(date) : jsonStringToDate(date); - } - - if (isNumber(date)) { - date = new Date(date); - } - - if (!isDate(date) || !isFinite(date.getTime())) { - return date; - } - - while (format) { - match = DATE_FORMATS_SPLIT.exec(format); - if (match) { - parts = concat(parts, match, 1); - format = parts.pop(); - } else { - parts.push(format); - format = null; - } - } - - var dateTimezoneOffset = date.getTimezoneOffset(); - if (timezone) { - dateTimezoneOffset = timezoneToOffset(timezone, dateTimezoneOffset); - date = convertTimezoneToLocal(date, timezone, true); - } - forEach(parts, function(value) { - fn = DATE_FORMATS[value]; - text += fn ? fn(date, $locale.DATETIME_FORMATS, dateTimezoneOffset) - : value === '\'\'' ? '\'' : value.replace(/(^'|'$)/g, '').replace(/''/g, '\''); - }); - - return text; - }; -} - - -/** - * @ngdoc filter - * @name json - * @kind function - * - * @description - * Allows you to convert a JavaScript object into JSON string. - * - * This filter is mostly useful for debugging. When using the double curly {{value}} notation - * the binding is automatically converted to JSON. - * - * @param {*} object Any JavaScript object (including arrays and primitive types) to filter. - * @param {number=} spacing The number of spaces to use per indentation, defaults to 2. - * @returns {string} JSON string. - * - * - * @example - - -
{{ {'name':'value'} | json }}
-
{{ {'name':'value'} | json:4 }}
-
- - it('should jsonify filtered objects', function() { - expect(element(by.id('default-spacing')).getText()).toMatch(/\{\n {2}"name": ?"value"\n}/); - expect(element(by.id('custom-spacing')).getText()).toMatch(/\{\n {4}"name": ?"value"\n}/); - }); - -
- * - */ -function jsonFilter() { - return function(object, spacing) { - if (isUndefined(spacing)) { - spacing = 2; - } - return toJson(object, spacing); - }; -} - - -/** - * @ngdoc filter - * @name lowercase - * @kind function - * @description - * Converts string to lowercase. - * - * See the {@link ng.uppercase uppercase filter documentation} for a functionally identical example. - * - * @see angular.lowercase - */ -var lowercaseFilter = valueFn(lowercase); - - -/** - * @ngdoc filter - * @name uppercase - * @kind function - * @description - * Converts string to uppercase. - * @example - - - -
- -

{{title}}

- -

{{title | uppercase}}

-
-
-
- */ -var uppercaseFilter = valueFn(uppercase); - -/** - * @ngdoc filter - * @name limitTo - * @kind function - * - * @description - * Creates a new array or string containing only a specified number of elements. The elements are - * taken from either the beginning or the end of the source array, string or number, as specified by - * the value and sign (positive or negative) of `limit`. Other array-like objects are also supported - * (e.g. array subclasses, NodeLists, jqLite/jQuery collections etc). If a number is used as input, - * it is converted to a string. - * - * @param {Array|ArrayLike|string|number} input - Array/array-like, string or number to be limited. - * @param {string|number} limit - The length of the returned array or string. If the `limit` number - * is positive, `limit` number of items from the beginning of the source array/string are copied. - * If the number is negative, `limit` number of items from the end of the source array/string - * are copied. The `limit` will be trimmed if it exceeds `array.length`. If `limit` is undefined, - * the input will be returned unchanged. - * @param {(string|number)=} begin - Index at which to begin limitation. As a negative index, - * `begin` indicates an offset from the end of `input`. Defaults to `0`. - * @returns {Array|string} A new sub-array or substring of length `limit` or less if the input had - * less than `limit` elements. - * - * @example - - - -
- -

Output numbers: {{ numbers | limitTo:numLimit }}

- -

Output letters: {{ letters | limitTo:letterLimit }}

- -

Output long number: {{ longNumber | limitTo:longNumberLimit }}

-
-
- - var numLimitInput = element(by.model('numLimit')); - var letterLimitInput = element(by.model('letterLimit')); - var longNumberLimitInput = element(by.model('longNumberLimit')); - var limitedNumbers = element(by.binding('numbers | limitTo:numLimit')); - var limitedLetters = element(by.binding('letters | limitTo:letterLimit')); - var limitedLongNumber = element(by.binding('longNumber | limitTo:longNumberLimit')); - - it('should limit the number array to first three items', function() { - expect(numLimitInput.getAttribute('value')).toBe('3'); - expect(letterLimitInput.getAttribute('value')).toBe('3'); - expect(longNumberLimitInput.getAttribute('value')).toBe('3'); - expect(limitedNumbers.getText()).toEqual('Output numbers: [1,2,3]'); - expect(limitedLetters.getText()).toEqual('Output letters: abc'); - expect(limitedLongNumber.getText()).toEqual('Output long number: 234'); - }); - - // There is a bug in safari and protractor that doesn't like the minus key - // it('should update the output when -3 is entered', function() { - // numLimitInput.clear(); - // numLimitInput.sendKeys('-3'); - // letterLimitInput.clear(); - // letterLimitInput.sendKeys('-3'); - // longNumberLimitInput.clear(); - // longNumberLimitInput.sendKeys('-3'); - // expect(limitedNumbers.getText()).toEqual('Output numbers: [7,8,9]'); - // expect(limitedLetters.getText()).toEqual('Output letters: ghi'); - // expect(limitedLongNumber.getText()).toEqual('Output long number: 342'); - // }); - - it('should not exceed the maximum size of input array', function() { - numLimitInput.clear(); - numLimitInput.sendKeys('100'); - letterLimitInput.clear(); - letterLimitInput.sendKeys('100'); - longNumberLimitInput.clear(); - longNumberLimitInput.sendKeys('100'); - expect(limitedNumbers.getText()).toEqual('Output numbers: [1,2,3,4,5,6,7,8,9]'); - expect(limitedLetters.getText()).toEqual('Output letters: abcdefghi'); - expect(limitedLongNumber.getText()).toEqual('Output long number: 2345432342'); - }); - -
-*/ -function limitToFilter() { - return function(input, limit, begin) { - if (Math.abs(Number(limit)) === Infinity) { - limit = Number(limit); - } else { - limit = toInt(limit); - } - if (isNumberNaN(limit)) return input; - - if (isNumber(input)) input = input.toString(); - if (!isArrayLike(input)) return input; - - begin = (!begin || isNaN(begin)) ? 0 : toInt(begin); - begin = (begin < 0) ? Math.max(0, input.length + begin) : begin; - - if (limit >= 0) { - return sliceFn(input, begin, begin + limit); - } else { - if (begin === 0) { - return sliceFn(input, limit, input.length); - } else { - return sliceFn(input, Math.max(0, begin + limit), begin); - } - } - }; -} - -function sliceFn(input, begin, end) { - if (isString(input)) return input.slice(begin, end); - - return slice.call(input, begin, end); -} - -/** - * @ngdoc filter - * @name orderBy - * @kind function - * - * @description - * Returns an array containing the items from the specified `collection`, ordered by a `comparator` - * function based on the values computed using the `expression` predicate. - * - * For example, `[{id: 'foo'}, {id: 'bar'}] | orderBy:'id'` would result in - * `[{id: 'bar'}, {id: 'foo'}]`. - * - * The `collection` can be an Array or array-like object (e.g. NodeList, jQuery object, TypedArray, - * String, etc). - * - * The `expression` can be a single predicate, or a list of predicates each serving as a tie-breaker - * for the preceding one. The `expression` is evaluated against each item and the output is used - * for comparing with other items. - * - * You can change the sorting order by setting `reverse` to `true`. By default, items are sorted in - * ascending order. - * - * The comparison is done using the `comparator` function. If none is specified, a default, built-in - * comparator is used (see below for details - in a nutshell, it compares numbers numerically and - * strings alphabetically). - * - * ### Under the hood - * - * Ordering the specified `collection` happens in two phases: - * - * 1. All items are passed through the predicate (or predicates), and the returned values are saved - * along with their type (`string`, `number` etc). For example, an item `{label: 'foo'}`, passed - * through a predicate that extracts the value of the `label` property, would be transformed to: - * ``` - * { - * value: 'foo', - * type: 'string', - * index: ... - * } - * ``` - * **Note:** `null` values use `'null'` as their type. - * 2. The comparator function is used to sort the items, based on the derived values, types and - * indices. - * - * If you use a custom comparator, it will be called with pairs of objects of the form - * `{value: ..., type: '...', index: ...}` and is expected to return `0` if the objects are equal - * (as far as the comparator is concerned), `-1` if the 1st one should be ranked higher than the - * second, or `1` otherwise. - * - * In order to ensure that the sorting will be deterministic across platforms, if none of the - * specified predicates can distinguish between two items, `orderBy` will automatically introduce a - * dummy predicate that returns the item's index as `value`. - * (If you are using a custom comparator, make sure it can handle this predicate as well.) - * - * If a custom comparator still can't distinguish between two items, then they will be sorted based - * on their index using the built-in comparator. - * - * Finally, in an attempt to simplify things, if a predicate returns an object as the extracted - * value for an item, `orderBy` will try to convert that object to a primitive value, before passing - * it to the comparator. The following rules govern the conversion: - * - * 1. If the object has a `valueOf()` method that returns a primitive, its return value will be - * used instead.
- * (If the object has a `valueOf()` method that returns another object, then the returned object - * will be used in subsequent steps.) - * 2. If the object has a custom `toString()` method (i.e. not the one inherited from `Object`) that - * returns a primitive, its return value will be used instead.
- * (If the object has a `toString()` method that returns another object, then the returned object - * will be used in subsequent steps.) - * 3. No conversion; the object itself is used. - * - * ### The default comparator - * - * The default, built-in comparator should be sufficient for most usecases. In short, it compares - * numbers numerically, strings alphabetically (and case-insensitively), for objects falls back to - * using their index in the original collection, sorts values of different types by type and puts - * `undefined` and `null` values at the end of the sorted list. - * - * More specifically, it follows these steps to determine the relative order of items: - * - * 1. If the compared values are of different types: - * - If one of the values is undefined, consider it "greater than" the other. - * - Else if one of the values is null, consider it "greater than" the other. - * - Else compare the types themselves alphabetically. - * 2. If both values are of type `string`, compare them alphabetically in a case- and - * locale-insensitive way. - * 3. If both values are objects, compare their indices instead. - * 4. Otherwise, return: - * - `0`, if the values are equal (by strict equality comparison, i.e. using `===`). - * - `-1`, if the 1st value is "less than" the 2nd value (compared using the `<` operator). - * - `1`, otherwise. - * - * **Note:** If you notice numbers not being sorted as expected, make sure they are actually being - * saved as numbers and not strings. - * **Note:** For the purpose of sorting, `null` and `undefined` are considered "greater than" - * any other value (with undefined "greater than" null). This effectively means that `null` - * and `undefined` values end up at the end of a list sorted in ascending order. - * **Note:** `null` values use `'null'` as their type to be able to distinguish them from objects. - * - * @param {Array|ArrayLike} collection - The collection (array or array-like object) to sort. - * @param {(Function|string|Array.)=} expression - A predicate (or list of - * predicates) to be used by the comparator to determine the order of elements. - * - * Can be one of: - * - * - `Function`: A getter function. This function will be called with each item as argument and - * the return value will be used for sorting. - * - `string`: An AngularJS expression. This expression will be evaluated against each item and the - * result will be used for sorting. For example, use `'label'` to sort by a property called - * `label` or `'label.substring(0, 3)'` to sort by the first 3 characters of the `label` - * property.
- * (The result of a constant expression is interpreted as a property name to be used for - * comparison. For example, use `'"special name"'` (note the extra pair of quotes) to sort by a - * property called `special name`.)
- * An expression can be optionally prefixed with `+` or `-` to control the sorting direction, - * ascending or descending. For example, `'+label'` or `'-label'`. If no property is provided, - * (e.g. `'+'` or `'-'`), the collection element itself is used in comparisons. - * - `Array`: An array of function and/or string predicates. If a predicate cannot determine the - * relative order of two items, the next predicate is used as a tie-breaker. - * - * **Note:** If the predicate is missing or empty then it defaults to `'+'`. - * - * @param {boolean=} reverse - If `true`, reverse the sorting order. - * @param {(Function)=} comparator - The comparator function used to determine the relative order of - * value pairs. If omitted, the built-in comparator will be used. - * - * @returns {Array} - The sorted array. - * - * - * @example - * ### Ordering a table with `ngRepeat` - * - * The example below demonstrates a simple {@link ngRepeat ngRepeat}, where the data is sorted by - * age in descending order (expression is set to `'-age'`). The `comparator` is not set, which means - * it defaults to the built-in comparator. - * - - -
- - - - - - - - - - - -
NamePhone NumberAge
{{friend.name}}{{friend.phone}}{{friend.age}}
-
-
- - angular.module('orderByExample1', []) - .controller('ExampleController', ['$scope', function($scope) { - $scope.friends = [ - {name: 'John', phone: '555-1212', age: 10}, - {name: 'Mary', phone: '555-9876', age: 19}, - {name: 'Mike', phone: '555-4321', age: 21}, - {name: 'Adam', phone: '555-5678', age: 35}, - {name: 'Julie', phone: '555-8765', age: 29} - ]; - }]); - - - .friends { - border-collapse: collapse; - } - - .friends th { - border-bottom: 1px solid; - } - .friends td, .friends th { - border-left: 1px solid; - padding: 5px 10px; - } - .friends td:first-child, .friends th:first-child { - border-left: none; - } - - - // Element locators - var names = element.all(by.repeater('friends').column('friend.name')); - - it('should sort friends by age in reverse order', function() { - expect(names.get(0).getText()).toBe('Adam'); - expect(names.get(1).getText()).toBe('Julie'); - expect(names.get(2).getText()).toBe('Mike'); - expect(names.get(3).getText()).toBe('Mary'); - expect(names.get(4).getText()).toBe('John'); - }); - -
- *
- * - * @example - * ### Changing parameters dynamically - * - * All parameters can be changed dynamically. The next example shows how you can make the columns of - * a table sortable, by binding the `expression` and `reverse` parameters to scope properties. - * - - -
-
Sort by = {{propertyName}}; reverse = {{reverse}}
-
- -
- - - - - - - - - - - -
- - - - - - - - -
{{friend.name}}{{friend.phone}}{{friend.age}}
-
-
- - angular.module('orderByExample2', []) - .controller('ExampleController', ['$scope', function($scope) { - var friends = [ - {name: 'John', phone: '555-1212', age: 10}, - {name: 'Mary', phone: '555-9876', age: 19}, - {name: 'Mike', phone: '555-4321', age: 21}, - {name: 'Adam', phone: '555-5678', age: 35}, - {name: 'Julie', phone: '555-8765', age: 29} - ]; - - $scope.propertyName = 'age'; - $scope.reverse = true; - $scope.friends = friends; - - $scope.sortBy = function(propertyName) { - $scope.reverse = ($scope.propertyName === propertyName) ? !$scope.reverse : false; - $scope.propertyName = propertyName; - }; - }]); - - - .friends { - border-collapse: collapse; - } - - .friends th { - border-bottom: 1px solid; - } - .friends td, .friends th { - border-left: 1px solid; - padding: 5px 10px; - } - .friends td:first-child, .friends th:first-child { - border-left: none; - } - - .sortorder:after { - content: '\25b2'; // BLACK UP-POINTING TRIANGLE - } - .sortorder.reverse:after { - content: '\25bc'; // BLACK DOWN-POINTING TRIANGLE - } - - - // Element locators - var unsortButton = element(by.partialButtonText('unsorted')); - var nameHeader = element(by.partialButtonText('Name')); - var phoneHeader = element(by.partialButtonText('Phone')); - var ageHeader = element(by.partialButtonText('Age')); - var firstName = element(by.repeater('friends').column('friend.name').row(0)); - var lastName = element(by.repeater('friends').column('friend.name').row(4)); - - it('should sort friends by some property, when clicking on the column header', function() { - expect(firstName.getText()).toBe('Adam'); - expect(lastName.getText()).toBe('John'); - - phoneHeader.click(); - expect(firstName.getText()).toBe('John'); - expect(lastName.getText()).toBe('Mary'); - - nameHeader.click(); - expect(firstName.getText()).toBe('Adam'); - expect(lastName.getText()).toBe('Mike'); - - ageHeader.click(); - expect(firstName.getText()).toBe('John'); - expect(lastName.getText()).toBe('Adam'); - }); - - it('should sort friends in reverse order, when clicking on the same column', function() { - expect(firstName.getText()).toBe('Adam'); - expect(lastName.getText()).toBe('John'); - - ageHeader.click(); - expect(firstName.getText()).toBe('John'); - expect(lastName.getText()).toBe('Adam'); - - ageHeader.click(); - expect(firstName.getText()).toBe('Adam'); - expect(lastName.getText()).toBe('John'); - }); - - it('should restore the original order, when clicking "Set to unsorted"', function() { - expect(firstName.getText()).toBe('Adam'); - expect(lastName.getText()).toBe('John'); - - unsortButton.click(); - expect(firstName.getText()).toBe('John'); - expect(lastName.getText()).toBe('Julie'); - }); - -
- *
- * - * @example - * ### Using `orderBy` inside a controller - * - * It is also possible to call the `orderBy` filter manually, by injecting `orderByFilter`, and - * calling it with the desired parameters. (Alternatively, you could inject the `$filter` factory - * and retrieve the `orderBy` filter with `$filter('orderBy')`.) - * - - -
-
Sort by = {{propertyName}}; reverse = {{reverse}}
-
- -
- - - - - - - - - - - -
- - - - - - - - -
{{friend.name}}{{friend.phone}}{{friend.age}}
-
-
- - angular.module('orderByExample3', []) - .controller('ExampleController', ['$scope', 'orderByFilter', function($scope, orderBy) { - var friends = [ - {name: 'John', phone: '555-1212', age: 10}, - {name: 'Mary', phone: '555-9876', age: 19}, - {name: 'Mike', phone: '555-4321', age: 21}, - {name: 'Adam', phone: '555-5678', age: 35}, - {name: 'Julie', phone: '555-8765', age: 29} - ]; - - $scope.propertyName = 'age'; - $scope.reverse = true; - $scope.friends = orderBy(friends, $scope.propertyName, $scope.reverse); - - $scope.sortBy = function(propertyName) { - $scope.reverse = (propertyName !== null && $scope.propertyName === propertyName) - ? !$scope.reverse : false; - $scope.propertyName = propertyName; - $scope.friends = orderBy(friends, $scope.propertyName, $scope.reverse); - }; - }]); - - - .friends { - border-collapse: collapse; - } - - .friends th { - border-bottom: 1px solid; - } - .friends td, .friends th { - border-left: 1px solid; - padding: 5px 10px; - } - .friends td:first-child, .friends th:first-child { - border-left: none; - } - - .sortorder:after { - content: '\25b2'; // BLACK UP-POINTING TRIANGLE - } - .sortorder.reverse:after { - content: '\25bc'; // BLACK DOWN-POINTING TRIANGLE - } - - - // Element locators - var unsortButton = element(by.partialButtonText('unsorted')); - var nameHeader = element(by.partialButtonText('Name')); - var phoneHeader = element(by.partialButtonText('Phone')); - var ageHeader = element(by.partialButtonText('Age')); - var firstName = element(by.repeater('friends').column('friend.name').row(0)); - var lastName = element(by.repeater('friends').column('friend.name').row(4)); - - it('should sort friends by some property, when clicking on the column header', function() { - expect(firstName.getText()).toBe('Adam'); - expect(lastName.getText()).toBe('John'); - - phoneHeader.click(); - expect(firstName.getText()).toBe('John'); - expect(lastName.getText()).toBe('Mary'); - - nameHeader.click(); - expect(firstName.getText()).toBe('Adam'); - expect(lastName.getText()).toBe('Mike'); - - ageHeader.click(); - expect(firstName.getText()).toBe('John'); - expect(lastName.getText()).toBe('Adam'); - }); - - it('should sort friends in reverse order, when clicking on the same column', function() { - expect(firstName.getText()).toBe('Adam'); - expect(lastName.getText()).toBe('John'); - - ageHeader.click(); - expect(firstName.getText()).toBe('John'); - expect(lastName.getText()).toBe('Adam'); - - ageHeader.click(); - expect(firstName.getText()).toBe('Adam'); - expect(lastName.getText()).toBe('John'); - }); - - it('should restore the original order, when clicking "Set to unsorted"', function() { - expect(firstName.getText()).toBe('Adam'); - expect(lastName.getText()).toBe('John'); - - unsortButton.click(); - expect(firstName.getText()).toBe('John'); - expect(lastName.getText()).toBe('Julie'); - }); - -
- *
- * - * @example - * ### Using a custom comparator - * - * If you have very specific requirements about the way items are sorted, you can pass your own - * comparator function. For example, you might need to compare some strings in a locale-sensitive - * way. (When specifying a custom comparator, you also need to pass a value for the `reverse` - * argument - passing `false` retains the default sorting order, i.e. ascending.) - * - - -
-
-

Locale-sensitive Comparator

- - - - - - - - - -
NameFavorite Letter
{{friend.name}}{{friend.favoriteLetter}}
-
-
-

Default Comparator

- - - - - - - - - -
NameFavorite Letter
{{friend.name}}{{friend.favoriteLetter}}
-
-
-
- - angular.module('orderByExample4', []) - .controller('ExampleController', ['$scope', function($scope) { - $scope.friends = [ - {name: 'John', favoriteLetter: 'Ä'}, - {name: 'Mary', favoriteLetter: 'Ü'}, - {name: 'Mike', favoriteLetter: 'Ö'}, - {name: 'Adam', favoriteLetter: 'H'}, - {name: 'Julie', favoriteLetter: 'Z'} - ]; - - $scope.localeSensitiveComparator = function(v1, v2) { - // If we don't get strings, just compare by index - if (v1.type !== 'string' || v2.type !== 'string') { - return (v1.index < v2.index) ? -1 : 1; - } - - // Compare strings alphabetically, taking locale into account - return v1.value.localeCompare(v2.value); - }; - }]); - - - .friends-container { - display: inline-block; - margin: 0 30px; - } - - .friends { - border-collapse: collapse; - } - - .friends th { - border-bottom: 1px solid; - } - .friends td, .friends th { - border-left: 1px solid; - padding: 5px 10px; - } - .friends td:first-child, .friends th:first-child { - border-left: none; - } - - - // Element locators - var container = element(by.css('.custom-comparator')); - var names = container.all(by.repeater('friends').column('friend.name')); - - it('should sort friends by favorite letter (in correct alphabetical order)', function() { - expect(names.get(0).getText()).toBe('John'); - expect(names.get(1).getText()).toBe('Adam'); - expect(names.get(2).getText()).toBe('Mike'); - expect(names.get(3).getText()).toBe('Mary'); - expect(names.get(4).getText()).toBe('Julie'); - }); - -
- * - */ -orderByFilter.$inject = ['$parse']; -function orderByFilter($parse) { - return function(array, sortPredicate, reverseOrder, compareFn) { - - if (array == null) return array; - if (!isArrayLike(array)) { - throw minErr('orderBy')('notarray', 'Expected array but received: {0}', array); - } - - if (!isArray(sortPredicate)) { sortPredicate = [sortPredicate]; } - if (sortPredicate.length === 0) { sortPredicate = ['+']; } - - var predicates = processPredicates(sortPredicate); - - var descending = reverseOrder ? -1 : 1; - - // Define the `compare()` function. Use a default comparator if none is specified. - var compare = isFunction(compareFn) ? compareFn : defaultCompare; - - // The next three lines are a version of a Swartzian Transform idiom from Perl - // (sometimes called the Decorate-Sort-Undecorate idiom) - // See https://en.wikipedia.org/wiki/Schwartzian_transform - var compareValues = Array.prototype.map.call(array, getComparisonObject); - compareValues.sort(doComparison); - array = compareValues.map(function(item) { return item.value; }); - - return array; - - function getComparisonObject(value, index) { - // NOTE: We are adding an extra `tieBreaker` value based on the element's index. - // This will be used to keep the sort stable when none of the input predicates can - // distinguish between two elements. - return { - value: value, - tieBreaker: {value: index, type: 'number', index: index}, - predicateValues: predicates.map(function(predicate) { - return getPredicateValue(predicate.get(value), index); - }) - }; - } - - function doComparison(v1, v2) { - for (var i = 0, ii = predicates.length; i < ii; i++) { - var result = compare(v1.predicateValues[i], v2.predicateValues[i]); - if (result) { - return result * predicates[i].descending * descending; - } - } - - return (compare(v1.tieBreaker, v2.tieBreaker) || defaultCompare(v1.tieBreaker, v2.tieBreaker)) * descending; - } - }; - - function processPredicates(sortPredicates) { - return sortPredicates.map(function(predicate) { - var descending = 1, get = identity; - - if (isFunction(predicate)) { - get = predicate; - } else if (isString(predicate)) { - if ((predicate.charAt(0) === '+' || predicate.charAt(0) === '-')) { - descending = predicate.charAt(0) === '-' ? -1 : 1; - predicate = predicate.substring(1); - } - if (predicate !== '') { - get = $parse(predicate); - if (get.constant) { - var key = get(); - get = function(value) { return value[key]; }; - } - } - } - return {get: get, descending: descending}; - }); - } - - function isPrimitive(value) { - switch (typeof value) { - case 'number': /* falls through */ - case 'boolean': /* falls through */ - case 'string': - return true; - default: - return false; - } - } - - function objectValue(value) { - // If `valueOf` is a valid function use that - if (isFunction(value.valueOf)) { - value = value.valueOf(); - if (isPrimitive(value)) return value; - } - // If `toString` is a valid function and not the one from `Object.prototype` use that - if (hasCustomToString(value)) { - value = value.toString(); - if (isPrimitive(value)) return value; - } - - return value; - } - - function getPredicateValue(value, index) { - var type = typeof value; - if (value === null) { - type = 'null'; - } else if (type === 'object') { - value = objectValue(value); - } - return {value: value, type: type, index: index}; - } - - function defaultCompare(v1, v2) { - var result = 0; - var type1 = v1.type; - var type2 = v2.type; - - if (type1 === type2) { - var value1 = v1.value; - var value2 = v2.value; - - if (type1 === 'string') { - // Compare strings case-insensitively - value1 = value1.toLowerCase(); - value2 = value2.toLowerCase(); - } else if (type1 === 'object') { - // For basic objects, use the position of the object - // in the collection instead of the value - if (isObject(value1)) value1 = v1.index; - if (isObject(value2)) value2 = v2.index; - } - - if (value1 !== value2) { - result = value1 < value2 ? -1 : 1; - } - } else { - result = (type1 === 'undefined') ? 1 : - (type2 === 'undefined') ? -1 : - (type1 === 'null') ? 1 : - (type2 === 'null') ? -1 : - (type1 < type2) ? -1 : 1; - } - - return result; - } -} - -function ngDirective(directive) { - if (isFunction(directive)) { - directive = { - link: directive - }; - } - directive.restrict = directive.restrict || 'AC'; - return valueFn(directive); -} - -/** - * @ngdoc directive - * @name a - * @restrict E - * - * @description - * Modifies the default behavior of the html a tag so that the default action is prevented when - * the href attribute is empty. - * - * For dynamically creating `href` attributes for a tags, see the {@link ng.ngHref `ngHref`} directive. - */ -var htmlAnchorDirective = valueFn({ - restrict: 'E', - compile: function(element, attr) { - if (!attr.href && !attr.xlinkHref) { - return function(scope, element) { - // If the linked element is not an anchor tag anymore, do nothing - if (element[0].nodeName.toLowerCase() !== 'a') return; - - // SVGAElement does not use the href attribute, but rather the 'xlinkHref' attribute. - var href = toString.call(element.prop('href')) === '[object SVGAnimatedString]' ? - 'xlink:href' : 'href'; - element.on('click', function(event) { - // if we have no href url, then don't navigate anywhere. - if (!element.attr(href)) { - event.preventDefault(); - } - }); - }; - } - } -}); - -/** - * @ngdoc directive - * @name ngHref - * @restrict A - * @priority 99 - * - * @description - * Using AngularJS markup like `{{hash}}` in an href attribute will - * make the link go to the wrong URL if the user clicks it before - * AngularJS has a chance to replace the `{{hash}}` markup with its - * value. Until AngularJS replaces the markup the link will be broken - * and will most likely return a 404 error. The `ngHref` directive - * solves this problem. - * - * The wrong way to write it: - * ```html - * link1 - * ``` - * - * The correct way to write it: - * ```html - * link1 - * ``` - * - * @element A - * @param {template} ngHref any string which can contain `{{}}` markup. - * - * @example - * This example shows various combinations of `href`, `ng-href` and `ng-click` attributes - * in links and their different behaviors: - - -
- link 1 (link, don't reload)
- link 2 (link, don't reload)
- link 3 (link, reload!)
- anchor (link, don't reload)
- anchor (no link)
- link (link, change location) -
- - it('should execute ng-click but not reload when href without value', function() { - element(by.id('link-1')).click(); - expect(element(by.model('value')).getAttribute('value')).toEqual('1'); - expect(element(by.id('link-1')).getAttribute('href')).toBe(''); - }); - - it('should execute ng-click but not reload when href empty string', function() { - element(by.id('link-2')).click(); - expect(element(by.model('value')).getAttribute('value')).toEqual('2'); - expect(element(by.id('link-2')).getAttribute('href')).toBe(''); - }); - - it('should execute ng-click and change url when ng-href specified', function() { - expect(element(by.id('link-3')).getAttribute('href')).toMatch(/\/123$/); - - element(by.id('link-3')).click(); - - // At this point, we navigate away from an AngularJS page, so we need - // to use browser.driver to get the base webdriver. - - browser.wait(function() { - return browser.driver.getCurrentUrl().then(function(url) { - return url.match(/\/123$/); - }); - }, 5000, 'page should navigate to /123'); - }); - - it('should execute ng-click but not reload when href empty string and name specified', function() { - element(by.id('link-4')).click(); - expect(element(by.model('value')).getAttribute('value')).toEqual('4'); - expect(element(by.id('link-4')).getAttribute('href')).toBe(''); - }); - - it('should execute ng-click but not reload when no href but name specified', function() { - element(by.id('link-5')).click(); - expect(element(by.model('value')).getAttribute('value')).toEqual('5'); - expect(element(by.id('link-5')).getAttribute('href')).toBe(null); - }); - - it('should only change url when only ng-href', function() { - element(by.model('value')).clear(); - element(by.model('value')).sendKeys('6'); - expect(element(by.id('link-6')).getAttribute('href')).toMatch(/\/6$/); - - element(by.id('link-6')).click(); - - // At this point, we navigate away from an AngularJS page, so we need - // to use browser.driver to get the base webdriver. - browser.wait(function() { - return browser.driver.getCurrentUrl().then(function(url) { - return url.match(/\/6$/); - }); - }, 5000, 'page should navigate to /6'); - }); - -
- */ - -/** - * @ngdoc directive - * @name ngSrc - * @restrict A - * @priority 99 - * - * @description - * Using AngularJS markup like `{{hash}}` in a `src` attribute doesn't - * work right: The browser will fetch from the URL with the literal - * text `{{hash}}` until AngularJS replaces the expression inside - * `{{hash}}`. The `ngSrc` directive solves this problem. - * - * The buggy way to write it: - * ```html - * Description - * ``` - * - * The correct way to write it: - * ```html - * Description - * ``` - * - * @element IMG - * @param {template} ngSrc any string which can contain `{{}}` markup. - */ - -/** - * @ngdoc directive - * @name ngSrcset - * @restrict A - * @priority 99 - * - * @description - * Using AngularJS markup like `{{hash}}` in a `srcset` attribute doesn't - * work right: The browser will fetch from the URL with the literal - * text `{{hash}}` until AngularJS replaces the expression inside - * `{{hash}}`. The `ngSrcset` directive solves this problem. - * - * The buggy way to write it: - * ```html - * Description - * ``` - * - * The correct way to write it: - * ```html - * Description - * ``` - * - * @element IMG - * @param {template} ngSrcset any string which can contain `{{}}` markup. - */ - -/** - * @ngdoc directive - * @name ngDisabled - * @restrict A - * @priority 100 - * - * @description - * - * This directive sets the `disabled` attribute on the element (typically a form control, - * e.g. `input`, `button`, `select` etc.) if the - * {@link guide/expression expression} inside `ngDisabled` evaluates to truthy. - * - * A special directive is necessary because we cannot use interpolation inside the `disabled` - * attribute. See the {@link guide/interpolation interpolation guide} for more info. - * - * @example - - -
- -
- - it('should toggle button', function() { - expect(element(by.css('button')).getAttribute('disabled')).toBeFalsy(); - element(by.model('checked')).click(); - expect(element(by.css('button')).getAttribute('disabled')).toBeTruthy(); - }); - -
- * - * @param {expression} ngDisabled If the {@link guide/expression expression} is truthy, - * then the `disabled` attribute will be set on the element - */ - - -/** - * @ngdoc directive - * @name ngChecked - * @restrict A - * @priority 100 - * - * @description - * Sets the `checked` attribute on the element, if the expression inside `ngChecked` is truthy. - * - * Note that this directive should not be used together with {@link ngModel `ngModel`}, - * as this can lead to unexpected behavior. - * - * A special directive is necessary because we cannot use interpolation inside the `checked` - * attribute. See the {@link guide/interpolation interpolation guide} for more info. - * - * @example - - -
- -
- - it('should check both checkBoxes', function() { - expect(element(by.id('checkFollower')).getAttribute('checked')).toBeFalsy(); - element(by.model('leader')).click(); - expect(element(by.id('checkFollower')).getAttribute('checked')).toBeTruthy(); - }); - -
- * - * @element INPUT - * @param {expression} ngChecked If the {@link guide/expression expression} is truthy, - * then the `checked` attribute will be set on the element - */ - - -/** - * @ngdoc directive - * @name ngReadonly - * @restrict A - * @priority 100 - * - * @description - * - * Sets the `readonly` attribute on the element, if the expression inside `ngReadonly` is truthy. - * Note that `readonly` applies only to `input` elements with specific types. [See the input docs on - * MDN](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#attr-readonly) for more information. - * - * A special directive is necessary because we cannot use interpolation inside the `readonly` - * attribute. See the {@link guide/interpolation interpolation guide} for more info. - * - * @example - - -
- -
- - it('should toggle readonly attr', function() { - expect(element(by.css('[type="text"]')).getAttribute('readonly')).toBeFalsy(); - element(by.model('checked')).click(); - expect(element(by.css('[type="text"]')).getAttribute('readonly')).toBeTruthy(); - }); - -
- * - * @element INPUT - * @param {expression} ngReadonly If the {@link guide/expression expression} is truthy, - * then special attribute "readonly" will be set on the element - */ - - -/** - * @ngdoc directive - * @name ngSelected - * @restrict A - * @priority 100 - * - * @description - * - * Sets the `selected` attribute on the element, if the expression inside `ngSelected` is truthy. - * - * A special directive is necessary because we cannot use interpolation inside the `selected` - * attribute. See the {@link guide/interpolation interpolation guide} for more info. - * - *
- * **Note:** `ngSelected` does not interact with the `select` and `ngModel` directives, it only - * sets the `selected` attribute on the element. If you are using `ngModel` on the select, you - * should not use `ngSelected` on the options, as `ngModel` will set the select value and - * selected options. - *
- * - * @example - - -
- -
- - it('should select Greetings!', function() { - expect(element(by.id('greet')).getAttribute('selected')).toBeFalsy(); - element(by.model('selected')).click(); - expect(element(by.id('greet')).getAttribute('selected')).toBeTruthy(); - }); - -
- * - * @element OPTION - * @param {expression} ngSelected If the {@link guide/expression expression} is truthy, - * then special attribute "selected" will be set on the element - */ - -/** - * @ngdoc directive - * @name ngOpen - * @restrict A - * @priority 100 - * - * @description - * - * Sets the `open` attribute on the element, if the expression inside `ngOpen` is truthy. - * - * A special directive is necessary because we cannot use interpolation inside the `open` - * attribute. See the {@link guide/interpolation interpolation guide} for more info. - * - * ## A note about browser compatibility - * - * Internet Explorer and Edge do not support the `details` element, it is - * recommended to use {@link ng.ngShow} and {@link ng.ngHide} instead. - * - * @example - - -
-
- List -
    -
  • Apple
  • -
  • Orange
  • -
  • Durian
  • -
-
-
- - it('should toggle open', function() { - expect(element(by.id('details')).getAttribute('open')).toBeFalsy(); - element(by.model('open')).click(); - expect(element(by.id('details')).getAttribute('open')).toBeTruthy(); - }); - -
- * - * @element DETAILS - * @param {expression} ngOpen If the {@link guide/expression expression} is truthy, - * then special attribute "open" will be set on the element - */ - -var ngAttributeAliasDirectives = {}; - -// boolean attrs are evaluated -forEach(BOOLEAN_ATTR, function(propName, attrName) { - // binding to multiple is not supported - if (propName === 'multiple') return; - - function defaultLinkFn(scope, element, attr) { - scope.$watch(attr[normalized], function ngBooleanAttrWatchAction(value) { - attr.$set(attrName, !!value); - }); - } - - var normalized = directiveNormalize('ng-' + attrName); - var linkFn = defaultLinkFn; - - if (propName === 'checked') { - linkFn = function(scope, element, attr) { - // ensuring ngChecked doesn't interfere with ngModel when both are set on the same input - if (attr.ngModel !== attr[normalized]) { - defaultLinkFn(scope, element, attr); - } - }; - } - - ngAttributeAliasDirectives[normalized] = function() { - return { - restrict: 'A', - priority: 100, - link: linkFn - }; - }; -}); - -// aliased input attrs are evaluated -forEach(ALIASED_ATTR, function(htmlAttr, ngAttr) { - ngAttributeAliasDirectives[ngAttr] = function() { - return { - priority: 100, - link: function(scope, element, attr) { - //special case ngPattern when a literal regular expression value - //is used as the expression (this way we don't have to watch anything). - if (ngAttr === 'ngPattern' && attr.ngPattern.charAt(0) === '/') { - var match = attr.ngPattern.match(REGEX_STRING_REGEXP); - if (match) { - attr.$set('ngPattern', new RegExp(match[1], match[2])); - return; - } - } - - scope.$watch(attr[ngAttr], function ngAttrAliasWatchAction(value) { - attr.$set(ngAttr, value); - }); - } - }; - }; -}); - -// ng-src, ng-srcset, ng-href are interpolated -forEach(['src', 'srcset', 'href'], function(attrName) { - var normalized = directiveNormalize('ng-' + attrName); - ngAttributeAliasDirectives[normalized] = ['$sce', function($sce) { - return { - priority: 99, // it needs to run after the attributes are interpolated - link: function(scope, element, attr) { - var propName = attrName, - name = attrName; - - if (attrName === 'href' && - toString.call(element.prop('href')) === '[object SVGAnimatedString]') { - name = 'xlinkHref'; - attr.$attr[name] = 'xlink:href'; - propName = null; - } - - // We need to sanitize the url at least once, in case it is a constant - // non-interpolated attribute. - attr.$set(normalized, $sce.getTrustedMediaUrl(attr[normalized])); - - attr.$observe(normalized, function(value) { - if (!value) { - if (attrName === 'href') { - attr.$set(name, null); - } - return; - } - - attr.$set(name, value); - - // Support: IE 9-11 only - // On IE, if "ng:src" directive declaration is used and "src" attribute doesn't exist - // then calling element.setAttribute('src', 'foo') doesn't do anything, so we need - // to set the property as well to achieve the desired effect. - // We use attr[attrName] value since $set might have sanitized the url. - if (msie && propName) element.prop(propName, attr[name]); - }); - } - }; - }]; -}); - -/* global -nullFormCtrl, -PENDING_CLASS, -SUBMITTED_CLASS - */ -var nullFormCtrl = { - $addControl: noop, - $getControls: valueFn([]), - $$renameControl: nullFormRenameControl, - $removeControl: noop, - $setValidity: noop, - $setDirty: noop, - $setPristine: noop, - $setSubmitted: noop, - $$setSubmitted: noop -}, -PENDING_CLASS = 'ng-pending', -SUBMITTED_CLASS = 'ng-submitted'; - -function nullFormRenameControl(control, name) { - control.$name = name; -} - -/** - * @ngdoc type - * @name form.FormController - * - * @property {boolean} $pristine True if user has not interacted with the form yet. - * @property {boolean} $dirty True if user has already interacted with the form. - * @property {boolean} $valid True if all of the containing forms and controls are valid. - * @property {boolean} $invalid True if at least one containing control or form is invalid. - * @property {boolean} $submitted True if user has submitted the form even if its invalid. - * - * @property {Object} $pending An object hash, containing references to controls or forms with - * pending validators, where: - * - * - keys are validations tokens (error names). - * - values are arrays of controls or forms that have a pending validator for the given error name. - * - * See {@link form.FormController#$error $error} for a list of built-in validation tokens. - * - * @property {Object} $error An object hash, containing references to controls or forms with failing - * validators, where: - * - * - keys are validation tokens (error names), - * - values are arrays of controls or forms that have a failing validator for the given error name. - * - * Built-in validation tokens: - * - `email` - * - `max` - * - `maxlength` - * - `min` - * - `minlength` - * - `number` - * - `pattern` - * - `required` - * - `url` - * - `date` - * - `datetimelocal` - * - `time` - * - `week` - * - `month` - * - * @description - * `FormController` keeps track of all its controls and nested forms as well as the state of them, - * such as being valid/invalid or dirty/pristine. - * - * Each {@link ng.directive:form form} directive creates an instance - * of `FormController`. - * - */ -//asks for $scope to fool the BC controller module -FormController.$inject = ['$element', '$attrs', '$scope', '$animate', '$interpolate']; -function FormController($element, $attrs, $scope, $animate, $interpolate) { - this.$$controls = []; - - // init state - this.$error = {}; - this.$$success = {}; - this.$pending = undefined; - this.$name = $interpolate($attrs.name || $attrs.ngForm || '')($scope); - this.$dirty = false; - this.$pristine = true; - this.$valid = true; - this.$invalid = false; - this.$submitted = false; - this.$$parentForm = nullFormCtrl; - - this.$$element = $element; - this.$$animate = $animate; - - setupValidity(this); -} - -FormController.prototype = { - /** - * @ngdoc method - * @name form.FormController#$rollbackViewValue - * - * @description - * Rollback all form controls pending updates to the `$modelValue`. - * - * Updates may be pending by a debounced event or because the input is waiting for a some future - * event defined in `ng-model-options`. This method is typically needed by the reset button of - * a form that uses `ng-model-options` to pend updates. - */ - $rollbackViewValue: function() { - forEach(this.$$controls, function(control) { - control.$rollbackViewValue(); - }); - }, - - /** - * @ngdoc method - * @name form.FormController#$commitViewValue - * - * @description - * Commit all form controls pending updates to the `$modelValue`. - * - * Updates may be pending by a debounced event or because the input is waiting for a some future - * event defined in `ng-model-options`. This method is rarely needed as `NgModelController` - * usually handles calling this in response to input events. - */ - $commitViewValue: function() { - forEach(this.$$controls, function(control) { - control.$commitViewValue(); - }); - }, - - /** - * @ngdoc method - * @name form.FormController#$addControl - * @param {object} control control object, either a {@link form.FormController} or an - * {@link ngModel.NgModelController} - * - * @description - * Register a control with the form. Input elements using ngModelController do this automatically - * when they are linked. - * - * Note that the current state of the control will not be reflected on the new parent form. This - * is not an issue with normal use, as freshly compiled and linked controls are in a `$pristine` - * state. - * - * However, if the method is used programmatically, for example by adding dynamically created controls, - * or controls that have been previously removed without destroying their corresponding DOM element, - * it's the developers responsibility to make sure the current state propagates to the parent form. - * - * For example, if an input control is added that is already `$dirty` and has `$error` properties, - * calling `$setDirty()` and `$validate()` afterwards will propagate the state to the parent form. - */ - $addControl: function(control) { - // Breaking change - before, inputs whose name was "hasOwnProperty" were quietly ignored - // and not added to the scope. Now we throw an error. - assertNotHasOwnProperty(control.$name, 'input'); - this.$$controls.push(control); - - if (control.$name) { - this[control.$name] = control; - } - - control.$$parentForm = this; - }, - - /** - * @ngdoc method - * @name form.FormController#$getControls - * @returns {Array} the controls that are currently part of this form - * - * @description - * This method returns a **shallow copy** of the controls that are currently part of this form. - * The controls can be instances of {@link form.FormController `FormController`} - * ({@link ngForm "child-forms"}) and of {@link ngModel.NgModelController `NgModelController`}. - * If you need access to the controls of child-forms, you have to call `$getControls()` - * recursively on them. - * This can be used for example to iterate over all controls to validate them. - * - * The controls can be accessed normally, but adding to, or removing controls from the array has - * no effect on the form. Instead, use {@link form.FormController#$addControl `$addControl()`} and - * {@link form.FormController#$removeControl `$removeControl()`} for this use-case. - * Likewise, adding a control to, or removing a control from the form is not reflected - * in the shallow copy. That means you should get a fresh copy from `$getControls()` every time - * you need access to the controls. - */ - $getControls: function() { - return shallowCopy(this.$$controls); - }, - - // Private API: rename a form control - $$renameControl: function(control, newName) { - var oldName = control.$name; - - if (this[oldName] === control) { - delete this[oldName]; - } - this[newName] = control; - control.$name = newName; - }, - - /** - * @ngdoc method - * @name form.FormController#$removeControl - * @param {object} control control object, either a {@link form.FormController} or an - * {@link ngModel.NgModelController} - * - * @description - * Deregister a control from the form. - * - * Input elements using ngModelController do this automatically when they are destroyed. - * - * Note that only the removed control's validation state (`$errors`etc.) will be removed from the - * form. `$dirty`, `$submitted` states will not be changed, because the expected behavior can be - * different from case to case. For example, removing the only `$dirty` control from a form may or - * may not mean that the form is still `$dirty`. - */ - $removeControl: function(control) { - if (control.$name && this[control.$name] === control) { - delete this[control.$name]; - } - forEach(this.$pending, function(value, name) { - // eslint-disable-next-line no-invalid-this - this.$setValidity(name, null, control); - }, this); - forEach(this.$error, function(value, name) { - // eslint-disable-next-line no-invalid-this - this.$setValidity(name, null, control); - }, this); - forEach(this.$$success, function(value, name) { - // eslint-disable-next-line no-invalid-this - this.$setValidity(name, null, control); - }, this); - - arrayRemove(this.$$controls, control); - control.$$parentForm = nullFormCtrl; - }, - - /** - * @ngdoc method - * @name form.FormController#$setDirty - * - * @description - * Sets the form to a dirty state. - * - * This method can be called to add the 'ng-dirty' class and set the form to a dirty - * state (ng-dirty class). This method will also propagate to parent forms. - */ - $setDirty: function() { - this.$$animate.removeClass(this.$$element, PRISTINE_CLASS); - this.$$animate.addClass(this.$$element, DIRTY_CLASS); - this.$dirty = true; - this.$pristine = false; - this.$$parentForm.$setDirty(); - }, - - /** - * @ngdoc method - * @name form.FormController#$setPristine - * - * @description - * Sets the form to its pristine state. - * - * This method sets the form's `$pristine` state to true, the `$dirty` state to false, removes - * the `ng-dirty` class and adds the `ng-pristine` class. Additionally, it sets the `$submitted` - * state to false. - * - * This method will also propagate to all the controls contained in this form. - * - * Setting a form back to a pristine state is often useful when we want to 'reuse' a form after - * saving or resetting it. - */ - $setPristine: function() { - this.$$animate.setClass(this.$$element, PRISTINE_CLASS, DIRTY_CLASS + ' ' + SUBMITTED_CLASS); - this.$dirty = false; - this.$pristine = true; - this.$submitted = false; - forEach(this.$$controls, function(control) { - control.$setPristine(); - }); - }, - - /** - * @ngdoc method - * @name form.FormController#$setUntouched - * - * @description - * Sets the form to its untouched state. - * - * This method can be called to remove the 'ng-touched' class and set the form controls to their - * untouched state (ng-untouched class). - * - * Setting a form controls back to their untouched state is often useful when setting the form - * back to its pristine state. - */ - $setUntouched: function() { - forEach(this.$$controls, function(control) { - control.$setUntouched(); - }); - }, - - /** - * @ngdoc method - * @name form.FormController#$setSubmitted - * - * @description - * Sets the form to its `$submitted` state. This will also set `$submitted` on all child and - * parent forms of the form. - */ - $setSubmitted: function() { - var rootForm = this; - while (rootForm.$$parentForm && (rootForm.$$parentForm !== nullFormCtrl)) { - rootForm = rootForm.$$parentForm; - } - rootForm.$$setSubmitted(); - }, - - $$setSubmitted: function() { - this.$$animate.addClass(this.$$element, SUBMITTED_CLASS); - this.$submitted = true; - forEach(this.$$controls, function(control) { - if (control.$$setSubmitted) { - control.$$setSubmitted(); - } - }); - } -}; - -/** - * @ngdoc method - * @name form.FormController#$setValidity - * - * @description - * Change the validity state of the form, and notify the parent form (if any). - * - * Application developers will rarely need to call this method directly. It is used internally, by - * {@link ngModel.NgModelController#$setValidity NgModelController.$setValidity()}, to propagate a - * control's validity state to the parent `FormController`. - * - * @param {string} validationErrorKey Name of the validator. The `validationErrorKey` will be - * assigned to either `$error[validationErrorKey]` or `$pending[validationErrorKey]` (for - * unfulfilled `$asyncValidators`), so that it is available for data-binding. The - * `validationErrorKey` should be in camelCase and will get converted into dash-case for - * class name. Example: `myError` will result in `ng-valid-my-error` and - * `ng-invalid-my-error` classes and can be bound to as `{{ someForm.$error.myError }}`. - * @param {boolean} isValid Whether the current state is valid (true), invalid (false), pending - * (undefined), or skipped (null). Pending is used for unfulfilled `$asyncValidators`. - * Skipped is used by AngularJS when validators do not run because of parse errors and when - * `$asyncValidators` do not run because any of the `$validators` failed. - * @param {NgModelController | FormController} controller - The controller whose validity state is - * triggering the change. - */ -addSetValidityMethod({ - clazz: FormController, - set: function(object, property, controller) { - var list = object[property]; - if (!list) { - object[property] = [controller]; - } else { - var index = list.indexOf(controller); - if (index === -1) { - list.push(controller); - } - } - }, - unset: function(object, property, controller) { - var list = object[property]; - if (!list) { - return; - } - arrayRemove(list, controller); - if (list.length === 0) { - delete object[property]; - } - } -}); - -/** - * @ngdoc directive - * @name ngForm - * @restrict EAC - * - * @description - * Helper directive that makes it possible to create control groups inside a - * {@link ng.directive:form `form`} directive. - * These "child forms" can be used, for example, to determine the validity of a sub-group of - * controls. - * - *
- * **Note**: `ngForm` cannot be used as a replacement for `
`, because it lacks its - * [built-in HTML functionality](https://html.spec.whatwg.org/#the-form-element). - * Specifically, you cannot submit `ngForm` like a `` tag. That means, - * you cannot send data to the server with `ngForm`, or integrate it with - * {@link ng.directive:ngSubmit `ngSubmit`}. - *
- * - * @param {string=} ngForm|name Name of the form. If specified, the form controller will - * be published into the related scope, under this name. - * - */ - - /** - * @ngdoc directive - * @name form - * @restrict E - * - * @description - * Directive that instantiates - * {@link form.FormController FormController}. - * - * If the `name` attribute is specified, the form controller is published onto the current scope under - * this name. - * - * ## Alias: {@link ng.directive:ngForm `ngForm`} - * - * In AngularJS, forms can be nested. This means that the outer form is valid when all of the child - * forms are valid as well. However, browsers do not allow nesting of `` elements, so - * AngularJS provides the {@link ng.directive:ngForm `ngForm`} directive, which behaves identically to - * `form` but can be nested. Nested forms can be useful, for example, if the validity of a sub-group - * of controls needs to be determined. - * - * ## CSS classes - * - `ng-valid` is set if the form is valid. - * - `ng-invalid` is set if the form is invalid. - * - `ng-pending` is set if the form is pending. - * - `ng-pristine` is set if the form is pristine. - * - `ng-dirty` is set if the form is dirty. - * - `ng-submitted` is set if the form was submitted. - * - * Keep in mind that ngAnimate can detect each of these classes when added and removed. - * - * - * ## Submitting a form and preventing the default action - * - * Since the role of forms in client-side AngularJS applications is different than in classical - * roundtrip apps, it is desirable for the browser not to translate the form submission into a full - * page reload that sends the data to the server. Instead some javascript logic should be triggered - * to handle the form submission in an application-specific way. - * - * For this reason, AngularJS prevents the default action (form submission to the server) unless the - * `` element has an `action` attribute specified. - * - * You can use one of the following two ways to specify what javascript method should be called when - * a form is submitted: - * - * - {@link ng.directive:ngSubmit ngSubmit} directive on the form element - * - {@link ng.directive:ngClick ngClick} directive on the first - * button or input field of type submit (input[type=submit]) - * - * To prevent double execution of the handler, use only one of the {@link ng.directive:ngSubmit ngSubmit} - * or {@link ng.directive:ngClick ngClick} directives. - * This is because of the following form submission rules in the HTML specification: - * - * - If a form has only one input field then hitting enter in this field triggers form submit - * (`ngSubmit`) - * - if a form has 2+ input fields and no buttons or input[type=submit] then hitting enter - * doesn't trigger submit - * - if a form has one or more input fields and one or more buttons or input[type=submit] then - * hitting enter in any of the input fields will trigger the click handler on the *first* button or - * input[type=submit] (`ngClick`) *and* a submit handler on the enclosing form (`ngSubmit`) - * - * Any pending `ngModelOptions` changes will take place immediately when an enclosing form is - * submitted. Note that `ngClick` events will occur before the model is updated. Use `ngSubmit` - * to have access to the updated model. - * - * @animations - * Animations in ngForm are triggered when any of the associated CSS classes are added and removed. - * These classes are: `.ng-pristine`, `.ng-dirty`, `.ng-invalid` and `.ng-valid` as well as any - * other validations that are performed within the form. Animations in ngForm are similar to how - * they work in ngClass and animations can be hooked into using CSS transitions, keyframes as well - * as JS animations. - * - * The following example shows a simple way to utilize CSS transitions to style a form element - * that has been rendered as invalid after it has been validated: - * - *
- * //be sure to include ngAnimate as a module to hook into more
- * //advanced animations
- * .my-form {
- *   transition:0.5s linear all;
- *   background: white;
- * }
- * .my-form.ng-invalid {
- *   background: red;
- *   color:white;
- * }
- * 
- * - * @example - - - - - - userType: - Required!
- userType = {{userType}}
- myForm.input.$valid = {{myForm.input.$valid}}
- myForm.input.$error = {{myForm.input.$error}}
- myForm.$valid = {{myForm.$valid}}
- myForm.$error.required = {{!!myForm.$error.required}}
- -
- - it('should initialize to model', function() { - var userType = element(by.binding('userType')); - var valid = element(by.binding('myForm.input.$valid')); - - expect(userType.getText()).toContain('guest'); - expect(valid.getText()).toContain('true'); - }); - - it('should be invalid if empty', function() { - var userType = element(by.binding('userType')); - var valid = element(by.binding('myForm.input.$valid')); - var userInput = element(by.model('userType')); - - userInput.clear(); - userInput.sendKeys(''); - - expect(userType.getText()).toEqual('userType ='); - expect(valid.getText()).toContain('false'); - }); - -
- * - * @param {string=} name Name of the form. If specified, the form controller will be published into - * related scope, under this name. - */ -var formDirectiveFactory = function(isNgForm) { - return ['$timeout', '$parse', function($timeout, $parse) { - var formDirective = { - name: 'form', - restrict: isNgForm ? 'EAC' : 'E', - require: ['form', '^^?form'], //first is the form's own ctrl, second is an optional parent form - controller: FormController, - compile: function ngFormCompile(formElement, attr) { - // Setup initial state of the control - formElement.addClass(PRISTINE_CLASS).addClass(VALID_CLASS); - - var nameAttr = attr.name ? 'name' : (isNgForm && attr.ngForm ? 'ngForm' : false); - - return { - pre: function ngFormPreLink(scope, formElement, attr, ctrls) { - var controller = ctrls[0]; - - // if `action` attr is not present on the form, prevent the default action (submission) - if (!('action' in attr)) { - // we can't use jq events because if a form is destroyed during submission the default - // action is not prevented. see #1238 - // - // IE 9 is not affected because it doesn't fire a submit event and try to do a full - // page reload if the form was destroyed by submission of the form via a click handler - // on a button in the form. Looks like an IE9 specific bug. - var handleFormSubmission = function(event) { - scope.$apply(function() { - controller.$commitViewValue(); - controller.$setSubmitted(); - }); - - event.preventDefault(); - }; - - formElement[0].addEventListener('submit', handleFormSubmission); - - // unregister the preventDefault listener so that we don't not leak memory but in a - // way that will achieve the prevention of the default action. - formElement.on('$destroy', function() { - $timeout(function() { - formElement[0].removeEventListener('submit', handleFormSubmission); - }, 0, false); - }); - } - - var parentFormCtrl = ctrls[1] || controller.$$parentForm; - parentFormCtrl.$addControl(controller); - - var setter = nameAttr ? getSetter(controller.$name) : noop; - - if (nameAttr) { - setter(scope, controller); - attr.$observe(nameAttr, function(newValue) { - if (controller.$name === newValue) return; - setter(scope, undefined); - controller.$$parentForm.$$renameControl(controller, newValue); - setter = getSetter(controller.$name); - setter(scope, controller); - }); - } - formElement.on('$destroy', function() { - controller.$$parentForm.$removeControl(controller); - setter(scope, undefined); - extend(controller, nullFormCtrl); //stop propagating child destruction handlers upwards - }); - } - }; - } - }; - - return formDirective; - - function getSetter(expression) { - if (expression === '') { - //create an assignable expression, so forms with an empty name can be renamed later - return $parse('this[""]').assign; - } - return $parse(expression).assign || noop; - } - }]; -}; - -var formDirective = formDirectiveFactory(); -var ngFormDirective = formDirectiveFactory(true); - - - -// helper methods -function setupValidity(instance) { - instance.$$classCache = {}; - instance.$$classCache[INVALID_CLASS] = !(instance.$$classCache[VALID_CLASS] = instance.$$element.hasClass(VALID_CLASS)); -} -function addSetValidityMethod(context) { - var clazz = context.clazz, - set = context.set, - unset = context.unset; - - clazz.prototype.$setValidity = function(validationErrorKey, state, controller) { - if (isUndefined(state)) { - createAndSet(this, '$pending', validationErrorKey, controller); - } else { - unsetAndCleanup(this, '$pending', validationErrorKey, controller); - } - if (!isBoolean(state)) { - unset(this.$error, validationErrorKey, controller); - unset(this.$$success, validationErrorKey, controller); - } else { - if (state) { - unset(this.$error, validationErrorKey, controller); - set(this.$$success, validationErrorKey, controller); - } else { - set(this.$error, validationErrorKey, controller); - unset(this.$$success, validationErrorKey, controller); - } - } - if (this.$pending) { - cachedToggleClass(this, PENDING_CLASS, true); - this.$valid = this.$invalid = undefined; - toggleValidationCss(this, '', null); - } else { - cachedToggleClass(this, PENDING_CLASS, false); - this.$valid = isObjectEmpty(this.$error); - this.$invalid = !this.$valid; - toggleValidationCss(this, '', this.$valid); - } - - // re-read the state as the set/unset methods could have - // combined state in this.$error[validationError] (used for forms), - // where setting/unsetting only increments/decrements the value, - // and does not replace it. - var combinedState; - if (this.$pending && this.$pending[validationErrorKey]) { - combinedState = undefined; - } else if (this.$error[validationErrorKey]) { - combinedState = false; - } else if (this.$$success[validationErrorKey]) { - combinedState = true; - } else { - combinedState = null; - } - - toggleValidationCss(this, validationErrorKey, combinedState); - this.$$parentForm.$setValidity(validationErrorKey, combinedState, this); - }; - - function createAndSet(ctrl, name, value, controller) { - if (!ctrl[name]) { - ctrl[name] = {}; - } - set(ctrl[name], value, controller); - } - - function unsetAndCleanup(ctrl, name, value, controller) { - if (ctrl[name]) { - unset(ctrl[name], value, controller); - } - if (isObjectEmpty(ctrl[name])) { - ctrl[name] = undefined; - } - } - - function cachedToggleClass(ctrl, className, switchValue) { - if (switchValue && !ctrl.$$classCache[className]) { - ctrl.$$animate.addClass(ctrl.$$element, className); - ctrl.$$classCache[className] = true; - } else if (!switchValue && ctrl.$$classCache[className]) { - ctrl.$$animate.removeClass(ctrl.$$element, className); - ctrl.$$classCache[className] = false; - } - } - - function toggleValidationCss(ctrl, validationErrorKey, isValid) { - validationErrorKey = validationErrorKey ? '-' + snake_case(validationErrorKey, '-') : ''; - - cachedToggleClass(ctrl, VALID_CLASS + validationErrorKey, isValid === true); - cachedToggleClass(ctrl, INVALID_CLASS + validationErrorKey, isValid === false); - } -} - -function isObjectEmpty(obj) { - if (obj) { - for (var prop in obj) { - if (obj.hasOwnProperty(prop)) { - return false; - } - } - } - return true; -} - -/* global - VALID_CLASS: false, - INVALID_CLASS: false, - PRISTINE_CLASS: false, - DIRTY_CLASS: false, - ngModelMinErr: false -*/ - -// Regex code was initially obtained from SO prior to modification: https://stackoverflow.com/questions/3143070/javascript-regex-iso-datetime#answer-3143231 -var ISO_DATE_REGEXP = /^\d{4,}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+(?:[+-][0-2]\d:[0-5]\d|Z)$/; -// See valid URLs in RFC3987 (http://tools.ietf.org/html/rfc3987) -// Note: We are being more lenient, because browsers are too. -// 1. Scheme -// 2. Slashes -// 3. Username -// 4. Password -// 5. Hostname -// 6. Port -// 7. Path -// 8. Query -// 9. Fragment -// 1111111111111111 222 333333 44444 55555555555555555555555 666 77777777 8888888 999 -var URL_REGEXP = /^[a-z][a-z\d.+-]*:\/*(?:[^:@]+(?::[^@]+)?@)?(?:[^\s:/?#]+|\[[a-f\d:]+])(?::\d+)?(?:\/[^?#]*)?(?:\?[^#]*)?(?:#.*)?$/i; -// eslint-disable-next-line max-len -var EMAIL_REGEXP = /^(?=.{1,254}$)(?=.{1,64}@)[-!#$%&'*+/0-9=?A-Z^_`a-z{|}~]+(\.[-!#$%&'*+/0-9=?A-Z^_`a-z{|}~]+)*@[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?(\.[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?)*$/; -var NUMBER_REGEXP = /^\s*(-|\+)?(\d+|(\d*(\.\d*)))([eE][+-]?\d+)?\s*$/; -var DATE_REGEXP = /^(\d{4,})-(\d{2})-(\d{2})$/; -var DATETIMELOCAL_REGEXP = /^(\d{4,})-(\d\d)-(\d\d)T(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/; -var WEEK_REGEXP = /^(\d{4,})-W(\d\d)$/; -var MONTH_REGEXP = /^(\d{4,})-(\d\d)$/; -var TIME_REGEXP = /^(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/; - -var PARTIAL_VALIDATION_EVENTS = 'keydown wheel mousedown'; -var PARTIAL_VALIDATION_TYPES = createMap(); -forEach('date,datetime-local,month,time,week'.split(','), function(type) { - PARTIAL_VALIDATION_TYPES[type] = true; -}); - -var inputType = { - - /** - * @ngdoc input - * @name input[text] - * - * @description - * Standard HTML text input with AngularJS data binding, inherited by most of the `input` elements. - * - * - * @param {string} ngModel Assignable AngularJS expression to data-bind to. - * @param {string=} name Property name of the form under which the control is published. - * @param {string=} required Adds `required` validation error key if the value is not entered. - * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to - * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of - * `required` when you want to data-bind to the `required` attribute. - * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than - * minlength. - * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than - * maxlength. Setting the attribute to a negative or non-numeric value, allows view values of - * any length. - * @param {string=} pattern Similar to `ngPattern` except that the attribute value is the actual string - * that contains the regular expression body that will be converted to a regular expression - * as in the ngPattern directive. - * @param {string=} ngPattern Sets `pattern` validation error key if the ngModel {@link ngModel.NgModelController#$viewValue $viewValue} - * does not match a RegExp found by evaluating the AngularJS expression given in the attribute value. - * If the expression evaluates to a RegExp object, then this is used directly. - * If the expression evaluates to a string, then it will be converted to a RegExp - * after wrapping it in `^` and `$` characters. For instance, `"abc"` will be converted to - * `new RegExp('^abc$')`.
- * **Note:** Avoid using the `g` flag on the RegExp, as it will cause each successive search to - * start at the index of the last search's match, thus not taking the whole input value into - * account. - * @param {string=} ngChange AngularJS expression to be executed when input changes due to user - * interaction with the input element. - * @param {boolean=} [ngTrim=true] If set to false AngularJS will not automatically trim the input. - * This parameter is ignored for input[type=password] controls, which will never trim the - * input. - * - * @example - - - -
- -
- - Required! - - Single word only! -
- text = {{example.text}}
- myForm.input.$valid = {{myForm.input.$valid}}
- myForm.input.$error = {{myForm.input.$error}}
- myForm.$valid = {{myForm.$valid}}
- myForm.$error.required = {{!!myForm.$error.required}}
-
-
- - var text = element(by.binding('example.text')); - var valid = element(by.binding('myForm.input.$valid')); - var input = element(by.model('example.text')); - - it('should initialize to model', function() { - expect(text.getText()).toContain('guest'); - expect(valid.getText()).toContain('true'); - }); - - it('should be invalid if empty', function() { - input.clear(); - input.sendKeys(''); - - expect(text.getText()).toEqual('text ='); - expect(valid.getText()).toContain('false'); - }); - - it('should be invalid if multi word', function() { - input.clear(); - input.sendKeys('hello world'); - - expect(valid.getText()).toContain('false'); - }); - -
- */ - 'text': textInputType, - - /** - * @ngdoc input - * @name input[date] - * - * @description - * Input with date validation and transformation. In browsers that do not yet support - * the HTML5 date input, a text element will be used. In that case, text must be entered in a valid ISO-8601 - * date format (yyyy-MM-dd), for example: `2009-01-06`. Since many - * modern browsers do not yet support this input type, it is important to provide cues to users on the - * expected input format via a placeholder or label. - * - * The model must always be a Date object, otherwise AngularJS will throw an error. - * Invalid `Date` objects (dates whose `getTime()` is `NaN`) will be rendered as an empty string. - * - * The timezone to be used to read/write the `Date` instance in the model can be defined using - * {@link ng.directive:ngModelOptions ngModelOptions}. By default, this is the timezone of the browser. - * - * @param {string} ngModel Assignable AngularJS expression to data-bind to. - * @param {string=} name Property name of the form under which the control is published. - * @param {string=} min Sets the `min` validation error key if the value entered is less than `min`. This must be a - * valid ISO date string (yyyy-MM-dd). You can also use interpolation inside this attribute - * (e.g. `min="{{minDate | date:'yyyy-MM-dd'}}"`). Note that `min` will also add native HTML5 - * constraint validation. - * @param {string=} max Sets the `max` validation error key if the value entered is greater than `max`. This must be - * a valid ISO date string (yyyy-MM-dd). You can also use interpolation inside this attribute - * (e.g. `max="{{maxDate | date:'yyyy-MM-dd'}}"`). Note that `max` will also add native HTML5 - * constraint validation. - * @param {(date|string)=} ngMin Sets the `min` validation constraint to the Date / ISO date string - * the `ngMin` expression evaluates to. Note that it does not set the `min` attribute. - * @param {(date|string)=} ngMax Sets the `max` validation constraint to the Date / ISO date string - * the `ngMax` expression evaluates to. Note that it does not set the `max` attribute. - * @param {string=} required Sets `required` validation error key if the value is not entered. - * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to - * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of - * `required` when you want to data-bind to the `required` attribute. - * @param {string=} ngChange AngularJS expression to be executed when input changes due to user - * interaction with the input element. - * - * @example - - - -
- - -
- - Required! - - Not a valid date! -
- value = {{example.value | date: "yyyy-MM-dd"}}
- myForm.input.$valid = {{myForm.input.$valid}}
- myForm.input.$error = {{myForm.input.$error}}
- myForm.$valid = {{myForm.$valid}}
- myForm.$error.required = {{!!myForm.$error.required}}
-
-
- - var value = element(by.binding('example.value | date: "yyyy-MM-dd"')); - var valid = element(by.binding('myForm.input.$valid')); - - // currently protractor/webdriver does not support - // sending keys to all known HTML5 input controls - // for various browsers (see https://github.com/angular/protractor/issues/562). - function setInput(val) { - // set the value of the element and force validation. - var scr = "var ipt = document.getElementById('exampleInput'); " + - "ipt.value = '" + val + "';" + - "angular.element(ipt).scope().$apply(function(s) { s.myForm[ipt.name].$setViewValue('" + val + "'); });"; - browser.executeScript(scr); - } - - it('should initialize to model', function() { - expect(value.getText()).toContain('2013-10-22'); - expect(valid.getText()).toContain('myForm.input.$valid = true'); - }); - - it('should be invalid if empty', function() { - setInput(''); - expect(value.getText()).toEqual('value ='); - expect(valid.getText()).toContain('myForm.input.$valid = false'); - }); - - it('should be invalid if over max', function() { - setInput('2015-01-01'); - expect(value.getText()).toContain(''); - expect(valid.getText()).toContain('myForm.input.$valid = false'); - }); - -
- */ - 'date': createDateInputType('date', DATE_REGEXP, - createDateParser(DATE_REGEXP, ['yyyy', 'MM', 'dd']), - 'yyyy-MM-dd'), - - /** - * @ngdoc input - * @name input[datetime-local] - * - * @description - * Input with datetime validation and transformation. In browsers that do not yet support - * the HTML5 date input, a text element will be used. In that case, the text must be entered in a valid ISO-8601 - * local datetime format (yyyy-MM-ddTHH:mm:ss), for example: `2010-12-28T14:57:00`. - * - * The model must always be a Date object, otherwise AngularJS will throw an error. - * Invalid `Date` objects (dates whose `getTime()` is `NaN`) will be rendered as an empty string. - * - * The timezone to be used to read/write the `Date` instance in the model can be defined using - * {@link ng.directive:ngModelOptions ngModelOptions}. By default, this is the timezone of the browser. - * - * The format of the displayed time can be adjusted with the - * {@link ng.directive:ngModelOptions#ngModelOptions-arguments ngModelOptions} `timeSecondsFormat` - * and `timeStripZeroSeconds`. - * - * @param {string} ngModel Assignable AngularJS expression to data-bind to. - * @param {string=} name Property name of the form under which the control is published. - * @param {string=} min Sets the `min` validation error key if the value entered is less than `min`. - * This must be a valid ISO datetime format (yyyy-MM-ddTHH:mm:ss). You can also use interpolation - * inside this attribute (e.g. `min="{{minDatetimeLocal | date:'yyyy-MM-ddTHH:mm:ss'}}"`). - * Note that `min` will also add native HTML5 constraint validation. - * @param {string=} max Sets the `max` validation error key if the value entered is greater than `max`. - * This must be a valid ISO datetime format (yyyy-MM-ddTHH:mm:ss). You can also use interpolation - * inside this attribute (e.g. `max="{{maxDatetimeLocal | date:'yyyy-MM-ddTHH:mm:ss'}}"`). - * Note that `max` will also add native HTML5 constraint validation. - * @param {(date|string)=} ngMin Sets the `min` validation error key to the Date / ISO datetime string - * the `ngMin` expression evaluates to. Note that it does not set the `min` attribute. - * @param {(date|string)=} ngMax Sets the `max` validation error key to the Date / ISO datetime string - * the `ngMax` expression evaluates to. Note that it does not set the `max` attribute. - * @param {string=} required Sets `required` validation error key if the value is not entered. - * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to - * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of - * `required` when you want to data-bind to the `required` attribute. - * @param {string=} ngChange AngularJS expression to be executed when input changes due to user - * interaction with the input element. - * - * @example - - - -
- - -
- - Required! - - Not a valid date! -
- value = {{example.value | date: "yyyy-MM-ddTHH:mm:ss"}}
- myForm.input.$valid = {{myForm.input.$valid}}
- myForm.input.$error = {{myForm.input.$error}}
- myForm.$valid = {{myForm.$valid}}
- myForm.$error.required = {{!!myForm.$error.required}}
-
-
- - var value = element(by.binding('example.value | date: "yyyy-MM-ddTHH:mm:ss"')); - var valid = element(by.binding('myForm.input.$valid')); - - // currently protractor/webdriver does not support - // sending keys to all known HTML5 input controls - // for various browsers (https://github.com/angular/protractor/issues/562). - function setInput(val) { - // set the value of the element and force validation. - var scr = "var ipt = document.getElementById('exampleInput'); " + - "ipt.value = '" + val + "';" + - "angular.element(ipt).scope().$apply(function(s) { s.myForm[ipt.name].$setViewValue('" + val + "'); });"; - browser.executeScript(scr); - } - - it('should initialize to model', function() { - expect(value.getText()).toContain('2010-12-28T14:57:00'); - expect(valid.getText()).toContain('myForm.input.$valid = true'); - }); - - it('should be invalid if empty', function() { - setInput(''); - expect(value.getText()).toEqual('value ='); - expect(valid.getText()).toContain('myForm.input.$valid = false'); - }); - - it('should be invalid if over max', function() { - setInput('2015-01-01T23:59:00'); - expect(value.getText()).toContain(''); - expect(valid.getText()).toContain('myForm.input.$valid = false'); - }); - -
- */ - 'datetime-local': createDateInputType('datetimelocal', DATETIMELOCAL_REGEXP, - createDateParser(DATETIMELOCAL_REGEXP, ['yyyy', 'MM', 'dd', 'HH', 'mm', 'ss', 'sss']), - 'yyyy-MM-ddTHH:mm:ss.sss'), - - /** - * @ngdoc input - * @name input[time] - * - * @description - * Input with time validation and transformation. In browsers that do not yet support - * the HTML5 time input, a text element will be used. In that case, the text must be entered in a valid ISO-8601 - * local time format (HH:mm:ss), for example: `14:57:00`. Model must be a Date object. This binding will always output a - * Date object to the model of January 1, 1970, or local date `new Date(1970, 0, 1, HH, mm, ss)`. - * - * The model must always be a Date object, otherwise AngularJS will throw an error. - * Invalid `Date` objects (dates whose `getTime()` is `NaN`) will be rendered as an empty string. - * - * The timezone to be used to read/write the `Date` instance in the model can be defined using - * {@link ng.directive:ngModelOptions#ngModelOptions-arguments ngModelOptions}. By default, - * this is the timezone of the browser. - * - * The format of the displayed time can be adjusted with the - * {@link ng.directive:ngModelOptions#ngModelOptions-arguments ngModelOptions} `timeSecondsFormat` - * and `timeStripZeroSeconds`. - * - * @param {string} ngModel Assignable AngularJS expression to data-bind to. - * @param {string=} name Property name of the form under which the control is published. - * @param {string=} min Sets the `min` validation error key if the value entered is less than `min`. - * This must be a valid ISO time format (HH:mm:ss). You can also use interpolation inside this - * attribute (e.g. `min="{{minTime | date:'HH:mm:ss'}}"`). Note that `min` will also add - * native HTML5 constraint validation. - * @param {string=} max Sets the `max` validation error key if the value entered is greater than `max`. - * This must be a valid ISO time format (HH:mm:ss). You can also use interpolation inside this - * attribute (e.g. `max="{{maxTime | date:'HH:mm:ss'}}"`). Note that `max` will also add - * native HTML5 constraint validation. - * @param {(date|string)=} ngMin Sets the `min` validation constraint to the Date / ISO time string the - * `ngMin` expression evaluates to. Note that it does not set the `min` attribute. - * @param {(date|string)=} ngMax Sets the `max` validation constraint to the Date / ISO time string the - * `ngMax` expression evaluates to. Note that it does not set the `max` attribute. - * @param {string=} required Sets `required` validation error key if the value is not entered. - * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to - * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of - * `required` when you want to data-bind to the `required` attribute. - * @param {string=} ngChange AngularJS expression to be executed when input changes due to user - * interaction with the input element. - * - * @example - - - -
- - -
- - Required! - - Not a valid date! -
- value = {{example.value | date: "HH:mm:ss"}}
- myForm.input.$valid = {{myForm.input.$valid}}
- myForm.input.$error = {{myForm.input.$error}}
- myForm.$valid = {{myForm.$valid}}
- myForm.$error.required = {{!!myForm.$error.required}}
-
-
- - var value = element(by.binding('example.value | date: "HH:mm:ss"')); - var valid = element(by.binding('myForm.input.$valid')); - - // currently protractor/webdriver does not support - // sending keys to all known HTML5 input controls - // for various browsers (https://github.com/angular/protractor/issues/562). - function setInput(val) { - // set the value of the element and force validation. - var scr = "var ipt = document.getElementById('exampleInput'); " + - "ipt.value = '" + val + "';" + - "angular.element(ipt).scope().$apply(function(s) { s.myForm[ipt.name].$setViewValue('" + val + "'); });"; - browser.executeScript(scr); - } - - it('should initialize to model', function() { - expect(value.getText()).toContain('14:57:00'); - expect(valid.getText()).toContain('myForm.input.$valid = true'); - }); - - it('should be invalid if empty', function() { - setInput(''); - expect(value.getText()).toEqual('value ='); - expect(valid.getText()).toContain('myForm.input.$valid = false'); - }); - - it('should be invalid if over max', function() { - setInput('23:59:00'); - expect(value.getText()).toContain(''); - expect(valid.getText()).toContain('myForm.input.$valid = false'); - }); - -
- */ - 'time': createDateInputType('time', TIME_REGEXP, - createDateParser(TIME_REGEXP, ['HH', 'mm', 'ss', 'sss']), - 'HH:mm:ss.sss'), - - /** - * @ngdoc input - * @name input[week] - * - * @description - * Input with week-of-the-year validation and transformation to Date. In browsers that do not yet support - * the HTML5 week input, a text element will be used. In that case, the text must be entered in a valid ISO-8601 - * week format (yyyy-W##), for example: `2013-W02`. - * - * The model must always be a Date object, otherwise AngularJS will throw an error. - * Invalid `Date` objects (dates whose `getTime()` is `NaN`) will be rendered as an empty string. - * - * The value of the resulting Date object will be set to Thursday at 00:00:00 of the requested week, - * due to ISO-8601 week numbering standards. Information on ISO's system for numbering the weeks of the - * year can be found at: https://en.wikipedia.org/wiki/ISO_8601#Week_dates - * - * The timezone to be used to read/write the `Date` instance in the model can be defined using - * {@link ng.directive:ngModelOptions ngModelOptions}. By default, this is the timezone of the browser. - * - * @param {string} ngModel Assignable AngularJS expression to data-bind to. - * @param {string=} name Property name of the form under which the control is published. - * @param {string=} min Sets the `min` validation error key if the value entered is less than `min`. - * This must be a valid ISO week format (yyyy-W##). You can also use interpolation inside this - * attribute (e.g. `min="{{minWeek | date:'yyyy-Www'}}"`). Note that `min` will also add - * native HTML5 constraint validation. - * @param {string=} max Sets the `max` validation error key if the value entered is greater than `max`. - * This must be a valid ISO week format (yyyy-W##). You can also use interpolation inside this - * attribute (e.g. `max="{{maxWeek | date:'yyyy-Www'}}"`). Note that `max` will also add - * native HTML5 constraint validation. - * @param {(date|string)=} ngMin Sets the `min` validation constraint to the Date / ISO week string - * the `ngMin` expression evaluates to. Note that it does not set the `min` attribute. - * @param {(date|string)=} ngMax Sets the `max` validation constraint to the Date / ISO week string - * the `ngMax` expression evaluates to. Note that it does not set the `max` attribute. - * @param {string=} required Sets `required` validation error key if the value is not entered. - * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to - * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of - * `required` when you want to data-bind to the `required` attribute. - * @param {string=} ngChange AngularJS expression to be executed when input changes due to user - * interaction with the input element. - * - * @example - - - -
- -
- - Required! - - Not a valid date! -
- value = {{example.value | date: "yyyy-Www"}}
- myForm.input.$valid = {{myForm.input.$valid}}
- myForm.input.$error = {{myForm.input.$error}}
- myForm.$valid = {{myForm.$valid}}
- myForm.$error.required = {{!!myForm.$error.required}}
-
-
- - var value = element(by.binding('example.value | date: "yyyy-Www"')); - var valid = element(by.binding('myForm.input.$valid')); - - // currently protractor/webdriver does not support - // sending keys to all known HTML5 input controls - // for various browsers (https://github.com/angular/protractor/issues/562). - function setInput(val) { - // set the value of the element and force validation. - var scr = "var ipt = document.getElementById('exampleInput'); " + - "ipt.value = '" + val + "';" + - "angular.element(ipt).scope().$apply(function(s) { s.myForm[ipt.name].$setViewValue('" + val + "'); });"; - browser.executeScript(scr); - } - - it('should initialize to model', function() { - expect(value.getText()).toContain('2013-W01'); - expect(valid.getText()).toContain('myForm.input.$valid = true'); - }); - - it('should be invalid if empty', function() { - setInput(''); - expect(value.getText()).toEqual('value ='); - expect(valid.getText()).toContain('myForm.input.$valid = false'); - }); - - it('should be invalid if over max', function() { - setInput('2015-W01'); - expect(value.getText()).toContain(''); - expect(valid.getText()).toContain('myForm.input.$valid = false'); - }); - -
- */ - 'week': createDateInputType('week', WEEK_REGEXP, weekParser, 'yyyy-Www'), - - /** - * @ngdoc input - * @name input[month] - * - * @description - * Input with month validation and transformation. In browsers that do not yet support - * the HTML5 month input, a text element will be used. In that case, the text must be entered in a valid ISO-8601 - * month format (yyyy-MM), for example: `2009-01`. - * - * The model must always be a Date object, otherwise AngularJS will throw an error. - * Invalid `Date` objects (dates whose `getTime()` is `NaN`) will be rendered as an empty string. - * If the model is not set to the first of the month, the next view to model update will set it - * to the first of the month. - * - * The timezone to be used to read/write the `Date` instance in the model can be defined using - * {@link ng.directive:ngModelOptions ngModelOptions}. By default, this is the timezone of the browser. - * - * @param {string} ngModel Assignable AngularJS expression to data-bind to. - * @param {string=} name Property name of the form under which the control is published. - * @param {string=} min Sets the `min` validation error key if the value entered is less than `min`. - * This must be a valid ISO month format (yyyy-MM). You can also use interpolation inside this - * attribute (e.g. `min="{{minMonth | date:'yyyy-MM'}}"`). Note that `min` will also add - * native HTML5 constraint validation. - * @param {string=} max Sets the `max` validation error key if the value entered is greater than `max`. - * This must be a valid ISO month format (yyyy-MM). You can also use interpolation inside this - * attribute (e.g. `max="{{maxMonth | date:'yyyy-MM'}}"`). Note that `max` will also add - * native HTML5 constraint validation. - * @param {(date|string)=} ngMin Sets the `min` validation constraint to the Date / ISO week string - * the `ngMin` expression evaluates to. Note that it does not set the `min` attribute. - * @param {(date|string)=} ngMax Sets the `max` validation constraint to the Date / ISO week string - * the `ngMax` expression evaluates to. Note that it does not set the `max` attribute. - - * @param {string=} required Sets `required` validation error key if the value is not entered. - * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to - * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of - * `required` when you want to data-bind to the `required` attribute. - * @param {string=} ngChange AngularJS expression to be executed when input changes due to user - * interaction with the input element. - * - * @example - - - -
- - -
- - Required! - - Not a valid month! -
- value = {{example.value | date: "yyyy-MM"}}
- myForm.input.$valid = {{myForm.input.$valid}}
- myForm.input.$error = {{myForm.input.$error}}
- myForm.$valid = {{myForm.$valid}}
- myForm.$error.required = {{!!myForm.$error.required}}
-
-
- - var value = element(by.binding('example.value | date: "yyyy-MM"')); - var valid = element(by.binding('myForm.input.$valid')); - - // currently protractor/webdriver does not support - // sending keys to all known HTML5 input controls - // for various browsers (https://github.com/angular/protractor/issues/562). - function setInput(val) { - // set the value of the element and force validation. - var scr = "var ipt = document.getElementById('exampleInput'); " + - "ipt.value = '" + val + "';" + - "angular.element(ipt).scope().$apply(function(s) { s.myForm[ipt.name].$setViewValue('" + val + "'); });"; - browser.executeScript(scr); - } - - it('should initialize to model', function() { - expect(value.getText()).toContain('2013-10'); - expect(valid.getText()).toContain('myForm.input.$valid = true'); - }); - - it('should be invalid if empty', function() { - setInput(''); - expect(value.getText()).toEqual('value ='); - expect(valid.getText()).toContain('myForm.input.$valid = false'); - }); - - it('should be invalid if over max', function() { - setInput('2015-01'); - expect(value.getText()).toContain(''); - expect(valid.getText()).toContain('myForm.input.$valid = false'); - }); - -
- */ - 'month': createDateInputType('month', MONTH_REGEXP, - createDateParser(MONTH_REGEXP, ['yyyy', 'MM']), - 'yyyy-MM'), - - /** - * @ngdoc input - * @name input[number] - * - * @description - * Text input with number validation and transformation. Sets the `number` validation - * error if not a valid number. - * - *
- * The model must always be of type `number` otherwise AngularJS will throw an error. - * Be aware that a string containing a number is not enough. See the {@link ngModel:numfmt} - * error docs for more information and an example of how to convert your model if necessary. - *
- * - * - * - * @knownIssue - * - * ### HTML5 constraint validation and `allowInvalid` - * - * In browsers that follow the - * [HTML5 specification](https://html.spec.whatwg.org/multipage/forms.html#number-state-%28type=number%29), - * `input[number]` does not work as expected with {@link ngModelOptions `ngModelOptions.allowInvalid`}. - * If a non-number is entered in the input, the browser will report the value as an empty string, - * which means the view / model values in `ngModel` and subsequently the scope value - * will also be an empty string. - * - * @knownIssue - * - * ### Large numbers and `step` validation - * - * The `step` validation will not work correctly for very large numbers (e.g. 9999999999) due to - * Javascript's arithmetic limitations. If you need to handle large numbers, purpose-built - * libraries (e.g. https://github.com/MikeMcl/big.js/), can be included into AngularJS by - * {@link guide/forms#modifying-built-in-validators overwriting the validators} - * for `number` and / or `step`, or by {@link guide/forms#custom-validation applying custom validators} - * to an `input[text]` element. The source for `input[number]` type can be used as a starting - * point for both implementations. - * - * @param {string} ngModel Assignable AngularJS expression to data-bind to. - * @param {string=} name Property name of the form under which the control is published. - * @param {string=} min Sets the `min` validation error key if the value entered is less than `min`. - * Can be interpolated. - * @param {string=} max Sets the `max` validation error key if the value entered is greater than `max`. - * Can be interpolated. - * @param {string=} ngMin Like `min`, sets the `min` validation error key if the value entered is less than `ngMin`, - * but does not trigger HTML5 native validation. Takes an expression. - * @param {string=} ngMax Like `max`, sets the `max` validation error key if the value entered is greater than `ngMax`, - * but does not trigger HTML5 native validation. Takes an expression. - * @param {string=} step Sets the `step` validation error key if the value entered does not fit the `step` constraint. - * Can be interpolated. - * @param {string=} ngStep Like `step`, sets the `step` validation error key if the value entered does not fit the `ngStep` constraint, - * but does not trigger HTML5 native validation. Takes an expression. - * @param {string=} required Sets `required` validation error key if the value is not entered. - * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to - * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of - * `required` when you want to data-bind to the `required` attribute. - * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than - * minlength. - * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than - * maxlength. Setting the attribute to a negative or non-numeric value, allows view values of - * any length. - * @param {string=} pattern Similar to `ngPattern` except that the attribute value is the actual string - * that contains the regular expression body that will be converted to a regular expression - * as in the ngPattern directive. - * @param {string=} ngPattern Sets `pattern` validation error key if the ngModel {@link ngModel.NgModelController#$viewValue $viewValue} - * does not match a RegExp found by evaluating the AngularJS expression given in the attribute value. - * If the expression evaluates to a RegExp object, then this is used directly. - * If the expression evaluates to a string, then it will be converted to a RegExp - * after wrapping it in `^` and `$` characters. For instance, `"abc"` will be converted to - * `new RegExp('^abc$')`.
- * **Note:** Avoid using the `g` flag on the RegExp, as it will cause each successive search to - * start at the index of the last search's match, thus not taking the whole input value into - * account. - * @param {string=} ngChange AngularJS expression to be executed when input changes due to user - * interaction with the input element. - * - * @example - - - -
- -
- - Required! - - Not valid number! -
- value = {{example.value}}
- myForm.input.$valid = {{myForm.input.$valid}}
- myForm.input.$error = {{myForm.input.$error}}
- myForm.$valid = {{myForm.$valid}}
- myForm.$error.required = {{!!myForm.$error.required}}
-
-
- - var value = element(by.binding('example.value')); - var valid = element(by.binding('myForm.input.$valid')); - var input = element(by.model('example.value')); - - it('should initialize to model', function() { - expect(value.getText()).toContain('12'); - expect(valid.getText()).toContain('true'); - }); - - it('should be invalid if empty', function() { - input.clear(); - input.sendKeys(''); - expect(value.getText()).toEqual('value ='); - expect(valid.getText()).toContain('false'); - }); - - it('should be invalid if over max', function() { - input.clear(); - input.sendKeys('123'); - expect(value.getText()).toEqual('value ='); - expect(valid.getText()).toContain('false'); - }); - -
- */ - 'number': numberInputType, - - - /** - * @ngdoc input - * @name input[url] - * - * @description - * Text input with URL validation. Sets the `url` validation error key if the content is not a - * valid URL. - * - *
- * **Note:** `input[url]` uses a regex to validate urls that is derived from the regex - * used in Chromium. If you need stricter validation, you can use `ng-pattern` or modify - * the built-in validators (see the {@link guide/forms Forms guide}) - *
- * - * @param {string} ngModel Assignable AngularJS expression to data-bind to. - * @param {string=} name Property name of the form under which the control is published. - * @param {string=} required Sets `required` validation error key if the value is not entered. - * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to - * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of - * `required` when you want to data-bind to the `required` attribute. - * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than - * minlength. - * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than - * maxlength. Setting the attribute to a negative or non-numeric value, allows view values of - * any length. - * @param {string=} pattern Similar to `ngPattern` except that the attribute value is the actual string - * that contains the regular expression body that will be converted to a regular expression - * as in the ngPattern directive. - * @param {string=} ngPattern Sets `pattern` validation error key if the ngModel {@link ngModel.NgModelController#$viewValue $viewValue} - * does not match a RegExp found by evaluating the AngularJS expression given in the attribute value. - * If the expression evaluates to a RegExp object, then this is used directly. - * If the expression evaluates to a string, then it will be converted to a RegExp - * after wrapping it in `^` and `$` characters. For instance, `"abc"` will be converted to - * `new RegExp('^abc$')`.
- * **Note:** Avoid using the `g` flag on the RegExp, as it will cause each successive search to - * start at the index of the last search's match, thus not taking the whole input value into - * account. - * @param {string=} ngChange AngularJS expression to be executed when input changes due to user - * interaction with the input element. - * - * @example - - - -
-
- - var text = element(by.binding('url.text')); - var valid = element(by.binding('myForm.input.$valid')); - var input = element(by.model('url.text')); - - it('should initialize to model', function() { - expect(text.getText()).toContain('http://google.com'); - expect(valid.getText()).toContain('true'); - }); - - it('should be invalid if empty', function() { - input.clear(); - input.sendKeys(''); - - expect(text.getText()).toEqual('text ='); - expect(valid.getText()).toContain('false'); - }); - - it('should be invalid if not url', function() { - input.clear(); - input.sendKeys('box'); - - expect(valid.getText()).toContain('false'); - }); - -
- */ - 'url': urlInputType, - - - /** - * @ngdoc input - * @name input[email] - * - * @description - * Text input with email validation. Sets the `email` validation error key if not a valid email - * address. - * - *
- * **Note:** `input[email]` uses a regex to validate email addresses that is derived from the regex - * used in Chromium, which may not fulfill your app's requirements. - * If you need stricter (e.g. requiring a top-level domain), or more relaxed validation - * (e.g. allowing IPv6 address literals) you can use `ng-pattern` or - * modify the built-in validators (see the {@link guide/forms Forms guide}). - *
- * - * @param {string} ngModel Assignable AngularJS expression to data-bind to. - * @param {string=} name Property name of the form under which the control is published. - * @param {string=} required Sets `required` validation error key if the value is not entered. - * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to - * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of - * `required` when you want to data-bind to the `required` attribute. - * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than - * minlength. - * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than - * maxlength. Setting the attribute to a negative or non-numeric value, allows view values of - * any length. - * @param {string=} pattern Similar to `ngPattern` except that the attribute value is the actual string - * that contains the regular expression body that will be converted to a regular expression - * as in the ngPattern directive. - * @param {string=} ngPattern Sets `pattern` validation error key if the ngModel {@link ngModel.NgModelController#$viewValue $viewValue} - * does not match a RegExp found by evaluating the AngularJS expression given in the attribute value. - * If the expression evaluates to a RegExp object, then this is used directly. - * If the expression evaluates to a string, then it will be converted to a RegExp - * after wrapping it in `^` and `$` characters. For instance, `"abc"` will be converted to - * `new RegExp('^abc$')`.
- * **Note:** Avoid using the `g` flag on the RegExp, as it will cause each successive search to - * start at the index of the last search's match, thus not taking the whole input value into - * account. - * @param {string=} ngChange AngularJS expression to be executed when input changes due to user - * interaction with the input element. - * - * @example - - - -
- -
- - Required! - - Not valid email! -
- text = {{email.text}}
- myForm.input.$valid = {{myForm.input.$valid}}
- myForm.input.$error = {{myForm.input.$error}}
- myForm.$valid = {{myForm.$valid}}
- myForm.$error.required = {{!!myForm.$error.required}}
- myForm.$error.email = {{!!myForm.$error.email}}
-
-
- - var text = element(by.binding('email.text')); - var valid = element(by.binding('myForm.input.$valid')); - var input = element(by.model('email.text')); - - it('should initialize to model', function() { - expect(text.getText()).toContain('me@example.com'); - expect(valid.getText()).toContain('true'); - }); - - it('should be invalid if empty', function() { - input.clear(); - input.sendKeys(''); - expect(text.getText()).toEqual('text ='); - expect(valid.getText()).toContain('false'); - }); - - it('should be invalid if not email', function() { - input.clear(); - input.sendKeys('xxx'); - - expect(valid.getText()).toContain('false'); - }); - -
- */ - 'email': emailInputType, - - - /** - * @ngdoc input - * @name input[radio] - * - * @description - * HTML radio button. - * - * **Note:**
- * All inputs controlled by {@link ngModel ngModel} (including those of type `radio`) will use the - * value of their `name` attribute to determine the property under which their - * {@link ngModel.NgModelController NgModelController} will be published on the parent - * {@link form.FormController FormController}. Thus, if you use the same `name` for multiple - * inputs of a form (e.g. a group of radio inputs), only _one_ `NgModelController` will be - * published on the parent `FormController` under that name. The rest of the controllers will - * continue to work as expected, but you won't be able to access them as properties on the parent - * `FormController`. - * - *
- *

- * In plain HTML forms, the `name` attribute is used to identify groups of radio inputs, so - * that the browser can manage their state (checked/unchecked) based on the state of other - * inputs in the same group. - *

- *

- * In AngularJS forms, this is not necessary. The input's state will be updated based on the - * value of the underlying model data. - *

- *
- * - *
- * If you omit the `name` attribute on a radio input, `ngModel` will automatically assign it a - * unique name. - *
- * - * @param {string} ngModel Assignable AngularJS expression to data-bind to. - * @param {string} value The value to which the `ngModel` expression should be set when selected. - * Note that `value` only supports `string` values, i.e. the scope model needs to be a string, - * too. Use `ngValue` if you need complex models (`number`, `object`, ...). - * @param {string=} name Property name of the form under which the control is published. - * @param {string=} ngChange AngularJS expression to be executed when input changes due to user - * interaction with the input element. - * @param {string} ngValue AngularJS expression to which `ngModel` will be be set when the radio - * is selected. Should be used instead of the `value` attribute if you need - * a non-string `ngModel` (`boolean`, `array`, ...). - * - * @example - - - -
-
-
-
- color = {{color.name | json}}
-
- Note that `ng-value="specialValue"` sets radio item's value to be the value of `$scope.specialValue`. -
- - it('should change state', function() { - var inputs = element.all(by.model('color.name')); - var color = element(by.binding('color.name')); - - expect(color.getText()).toContain('blue'); - - inputs.get(0).click(); - expect(color.getText()).toContain('red'); - - inputs.get(1).click(); - expect(color.getText()).toContain('green'); - }); - -
- */ - 'radio': radioInputType, - - /** - * @ngdoc input - * @name input[range] - * - * @description - * Native range input with validation and transformation. - * - * The model for the range input must always be a `Number`. - * - * IE9 and other browsers that do not support the `range` type fall back - * to a text input without any default values for `min`, `max` and `step`. Model binding, - * validation and number parsing are nevertheless supported. - * - * Browsers that support range (latest Chrome, Safari, Firefox, Edge) treat `input[range]` - * in a way that never allows the input to hold an invalid value. That means: - * - any non-numerical value is set to `(max + min) / 2`. - * - any numerical value that is less than the current min val, or greater than the current max val - * is set to the min / max val respectively. - * - additionally, the current `step` is respected, so the nearest value that satisfies a step - * is used. - * - * See the [HTML Spec on input[type=range]](https://www.w3.org/TR/html5/forms.html#range-state-(type=range)) - * for more info. - * - * This has the following consequences for AngularJS: - * - * Since the element value should always reflect the current model value, a range input - * will set the bound ngModel expression to the value that the browser has set for the - * input element. For example, in the following input ``, - * if the application sets `model.value = null`, the browser will set the input to `'50'`. - * AngularJS will then set the model to `50`, to prevent input and model value being out of sync. - * - * That means the model for range will immediately be set to `50` after `ngModel` has been - * initialized. It also means a range input can never have the required error. - * - * This does not only affect changes to the model value, but also to the values of the `min`, - * `max`, and `step` attributes. When these change in a way that will cause the browser to modify - * the input value, AngularJS will also update the model value. - * - * Automatic value adjustment also means that a range input element can never have the `required`, - * `min`, or `max` errors. - * - * However, `step` is currently only fully implemented by Firefox. Other browsers have problems - * when the step value changes dynamically - they do not adjust the element value correctly, but - * instead may set the `stepMismatch` error. If that's the case, the AngularJS will set the `step` - * error on the input, and set the model to `undefined`. - * - * Note that `input[range]` is not compatible with`ngMax`, `ngMin`, and `ngStep`, because they do - * not set the `min` and `max` attributes, which means that the browser won't automatically adjust - * the input value based on their values, and will always assume min = 0, max = 100, and step = 1. - * - * @param {string} ngModel Assignable AngularJS expression to data-bind to. - * @param {string=} name Property name of the form under which the control is published. - * @param {string=} min Sets the `min` validation to ensure that the value entered is greater - * than `min`. Can be interpolated. - * @param {string=} max Sets the `max` validation to ensure that the value entered is less than `max`. - * Can be interpolated. - * @param {string=} step Sets the `step` validation to ensure that the value entered matches the `step` - * Can be interpolated. - * @param {expression=} ngChange AngularJS expression to be executed when the ngModel value changes due - * to user interaction with the input element. - * @param {expression=} ngChecked If the expression is truthy, then the `checked` attribute will be set on the - * element. **Note** : `ngChecked` should not be used alongside `ngModel`. - * Checkout {@link ng.directive:ngChecked ngChecked} for usage. - * - * @example - - - -
- - Model as range: -
- Model as number:
- Min:
- Max:
- value = {{value}}
- myForm.range.$valid = {{myForm.range.$valid}}
- myForm.range.$error = {{myForm.range.$error}} -
-
-
- - * ## Range Input with ngMin & ngMax attributes - - * @example - - - -
- Model as range: -
- Model as number:
- Min:
- Max:
- value = {{value}}
- myForm.range.$valid = {{myForm.range.$valid}}
- myForm.range.$error = {{myForm.range.$error}} -
-
-
- - */ - 'range': rangeInputType, - - /** - * @ngdoc input - * @name input[checkbox] - * - * @description - * HTML checkbox. - * - * @param {string} ngModel Assignable AngularJS expression to data-bind to. - * @param {string=} name Property name of the form under which the control is published. - * @param {expression=} ngTrueValue The value to which the expression should be set when selected. - * @param {expression=} ngFalseValue The value to which the expression should be set when not selected. - * @param {string=} ngChange AngularJS expression to be executed when input changes due to user - * interaction with the input element. - * - * @example - - - -
-
-
- value1 = {{checkboxModel.value1}}
- value2 = {{checkboxModel.value2}}
-
-
- - it('should change state', function() { - var value1 = element(by.binding('checkboxModel.value1')); - var value2 = element(by.binding('checkboxModel.value2')); - - expect(value1.getText()).toContain('true'); - expect(value2.getText()).toContain('YES'); - - element(by.model('checkboxModel.value1')).click(); - element(by.model('checkboxModel.value2')).click(); - - expect(value1.getText()).toContain('false'); - expect(value2.getText()).toContain('NO'); - }); - -
- */ - 'checkbox': checkboxInputType, - - 'hidden': noop, - 'button': noop, - 'submit': noop, - 'reset': noop, - 'file': noop -}; - -function stringBasedInputType(ctrl) { - ctrl.$formatters.push(function(value) { - return ctrl.$isEmpty(value) ? value : value.toString(); - }); -} - -function textInputType(scope, element, attr, ctrl, $sniffer, $browser) { - baseInputType(scope, element, attr, ctrl, $sniffer, $browser); - stringBasedInputType(ctrl); -} - -function baseInputType(scope, element, attr, ctrl, $sniffer, $browser) { - var type = lowercase(element[0].type); - - // In composition mode, users are still inputting intermediate text buffer, - // hold the listener until composition is done. - // More about composition events: https://developer.mozilla.org/en-US/docs/Web/API/CompositionEvent - if (!$sniffer.android) { - var composing = false; - - element.on('compositionstart', function() { - composing = true; - }); - - // Support: IE9+ - element.on('compositionupdate', function(ev) { - // End composition when ev.data is empty string on 'compositionupdate' event. - // When the input de-focusses (e.g. by clicking away), IE triggers 'compositionupdate' - // instead of 'compositionend'. - if (isUndefined(ev.data) || ev.data === '') { - composing = false; - } - }); - - element.on('compositionend', function() { - composing = false; - listener(); - }); - } - - var timeout; - - var listener = function(ev) { - if (timeout) { - $browser.defer.cancel(timeout); - timeout = null; - } - if (composing) return; - var value = element.val(), - event = ev && ev.type; - - // By default we will trim the value - // If the attribute ng-trim exists we will avoid trimming - // If input type is 'password', the value is never trimmed - if (type !== 'password' && (!attr.ngTrim || attr.ngTrim !== 'false')) { - value = trim(value); - } - - // If a control is suffering from bad input (due to native validators), browsers discard its - // value, so it may be necessary to revalidate (by calling $setViewValue again) even if the - // control's value is the same empty value twice in a row. - if (ctrl.$viewValue !== value || (value === '' && ctrl.$$hasNativeValidators)) { - ctrl.$setViewValue(value, event); - } - }; - - // if the browser does support "input" event, we are fine - except on IE9 which doesn't fire the - // input event on backspace, delete or cut - if ($sniffer.hasEvent('input')) { - element.on('input', listener); - } else { - var deferListener = function(ev, input, origValue) { - if (!timeout) { - timeout = $browser.defer(function() { - timeout = null; - if (!input || input.value !== origValue) { - listener(ev); - } - }); - } - }; - - element.on('keydown', /** @this */ function(event) { - var key = event.keyCode; - - // ignore - // command modifiers arrows - if (key === 91 || (15 < key && key < 19) || (37 <= key && key <= 40)) return; - - deferListener(event, this, this.value); - }); - - // if user modifies input value using context menu in IE, we need "paste", "cut" and "drop" events to catch it - if ($sniffer.hasEvent('paste')) { - element.on('paste cut drop', deferListener); - } - } - - // if user paste into input using mouse on older browser - // or form autocomplete on newer browser, we need "change" event to catch it - element.on('change', listener); - - // Some native input types (date-family) have the ability to change validity without - // firing any input/change events. - // For these event types, when native validators are present and the browser supports the type, - // check for validity changes on various DOM events. - if (PARTIAL_VALIDATION_TYPES[type] && ctrl.$$hasNativeValidators && type === attr.type) { - element.on(PARTIAL_VALIDATION_EVENTS, /** @this */ function(ev) { - if (!timeout) { - var validity = this[VALIDITY_STATE_PROPERTY]; - var origBadInput = validity.badInput; - var origTypeMismatch = validity.typeMismatch; - timeout = $browser.defer(function() { - timeout = null; - if (validity.badInput !== origBadInput || validity.typeMismatch !== origTypeMismatch) { - listener(ev); - } - }); - } - }); - } - - ctrl.$render = function() { - // Workaround for Firefox validation #12102. - var value = ctrl.$isEmpty(ctrl.$viewValue) ? '' : ctrl.$viewValue; - if (element.val() !== value) { - element.val(value); - } - }; -} - -function weekParser(isoWeek, existingDate) { - if (isDate(isoWeek)) { - return isoWeek; - } - - if (isString(isoWeek)) { - WEEK_REGEXP.lastIndex = 0; - var parts = WEEK_REGEXP.exec(isoWeek); - if (parts) { - var year = +parts[1], - week = +parts[2], - hours = 0, - minutes = 0, - seconds = 0, - milliseconds = 0, - firstThurs = getFirstThursdayOfYear(year), - addDays = (week - 1) * 7; - - if (existingDate) { - hours = existingDate.getHours(); - minutes = existingDate.getMinutes(); - seconds = existingDate.getSeconds(); - milliseconds = existingDate.getMilliseconds(); - } - - return new Date(year, 0, firstThurs.getDate() + addDays, hours, minutes, seconds, milliseconds); - } - } - - return NaN; -} - -function createDateParser(regexp, mapping) { - return function(iso, previousDate) { - var parts, map; - - if (isDate(iso)) { - return iso; - } - - if (isString(iso)) { - // When a date is JSON'ified to wraps itself inside of an extra - // set of double quotes. This makes the date parsing code unable - // to match the date string and parse it as a date. - if (iso.charAt(0) === '"' && iso.charAt(iso.length - 1) === '"') { - iso = iso.substring(1, iso.length - 1); - } - if (ISO_DATE_REGEXP.test(iso)) { - return new Date(iso); - } - regexp.lastIndex = 0; - parts = regexp.exec(iso); - - if (parts) { - parts.shift(); - if (previousDate) { - map = { - yyyy: previousDate.getFullYear(), - MM: previousDate.getMonth() + 1, - dd: previousDate.getDate(), - HH: previousDate.getHours(), - mm: previousDate.getMinutes(), - ss: previousDate.getSeconds(), - sss: previousDate.getMilliseconds() / 1000 - }; - } else { - map = { yyyy: 1970, MM: 1, dd: 1, HH: 0, mm: 0, ss: 0, sss: 0 }; - } - - forEach(parts, function(part, index) { - if (index < mapping.length) { - map[mapping[index]] = +part; - } - }); - - var date = new Date(map.yyyy, map.MM - 1, map.dd, map.HH, map.mm, map.ss || 0, map.sss * 1000 || 0); - if (map.yyyy < 100) { - // In the constructor, 2-digit years map to 1900-1999. - // Use `setFullYear()` to set the correct year. - date.setFullYear(map.yyyy); - } - - return date; - } - } - - return NaN; - }; -} - -function createDateInputType(type, regexp, parseDate, format) { - return function dynamicDateInputType(scope, element, attr, ctrl, $sniffer, $browser, $filter, $parse) { - badInputChecker(scope, element, attr, ctrl, type); - baseInputType(scope, element, attr, ctrl, $sniffer, $browser); - - var isTimeType = type === 'time' || type === 'datetimelocal'; - var previousDate; - var previousTimezone; - - ctrl.$parsers.push(function(value) { - if (ctrl.$isEmpty(value)) return null; - - if (regexp.test(value)) { - // Note: We cannot read ctrl.$modelValue, as there might be a different - // parser/formatter in the processing chain so that the model - // contains some different data format! - return parseDateAndConvertTimeZoneToLocal(value, previousDate); - } - ctrl.$$parserName = type; - return undefined; - }); - - ctrl.$formatters.push(function(value) { - if (value && !isDate(value)) { - throw ngModelMinErr('datefmt', 'Expected `{0}` to be a date', value); - } - if (isValidDate(value)) { - previousDate = value; - var timezone = ctrl.$options.getOption('timezone'); - - if (timezone) { - previousTimezone = timezone; - previousDate = convertTimezoneToLocal(previousDate, timezone, true); - } - - return formatter(value, timezone); - } else { - previousDate = null; - previousTimezone = null; - return ''; - } - }); - - if (isDefined(attr.min) || attr.ngMin) { - var minVal = attr.min || $parse(attr.ngMin)(scope); - var parsedMinVal = parseObservedDateValue(minVal); - - ctrl.$validators.min = function(value) { - return !isValidDate(value) || isUndefined(parsedMinVal) || parseDate(value) >= parsedMinVal; - }; - attr.$observe('min', function(val) { - if (val !== minVal) { - parsedMinVal = parseObservedDateValue(val); - minVal = val; - ctrl.$validate(); - } - }); - } - - if (isDefined(attr.max) || attr.ngMax) { - var maxVal = attr.max || $parse(attr.ngMax)(scope); - var parsedMaxVal = parseObservedDateValue(maxVal); - - ctrl.$validators.max = function(value) { - return !isValidDate(value) || isUndefined(parsedMaxVal) || parseDate(value) <= parsedMaxVal; - }; - attr.$observe('max', function(val) { - if (val !== maxVal) { - parsedMaxVal = parseObservedDateValue(val); - maxVal = val; - ctrl.$validate(); - } - }); - } - - function isValidDate(value) { - // Invalid Date: getTime() returns NaN - return value && !(value.getTime && value.getTime() !== value.getTime()); - } - - function parseObservedDateValue(val) { - return isDefined(val) && !isDate(val) ? parseDateAndConvertTimeZoneToLocal(val) || undefined : val; - } - - function parseDateAndConvertTimeZoneToLocal(value, previousDate) { - var timezone = ctrl.$options.getOption('timezone'); - - if (previousTimezone && previousTimezone !== timezone) { - // If the timezone has changed, adjust the previousDate to the default timezone - // so that the new date is converted with the correct timezone offset - previousDate = addDateMinutes(previousDate, timezoneToOffset(previousTimezone)); - } - - var parsedDate = parseDate(value, previousDate); - - if (!isNaN(parsedDate) && timezone) { - parsedDate = convertTimezoneToLocal(parsedDate, timezone); - } - return parsedDate; - } - - function formatter(value, timezone) { - var targetFormat = format; - - if (isTimeType && isString(ctrl.$options.getOption('timeSecondsFormat'))) { - targetFormat = format - .replace('ss.sss', ctrl.$options.getOption('timeSecondsFormat')) - .replace(/:$/, ''); - } - - var formatted = $filter('date')(value, targetFormat, timezone); - - if (isTimeType && ctrl.$options.getOption('timeStripZeroSeconds')) { - formatted = formatted.replace(/(?::00)?(?:\.000)?$/, ''); - } - - return formatted; - } - }; -} - -function badInputChecker(scope, element, attr, ctrl, parserName) { - var node = element[0]; - var nativeValidation = ctrl.$$hasNativeValidators = isObject(node.validity); - if (nativeValidation) { - ctrl.$parsers.push(function(value) { - var validity = element.prop(VALIDITY_STATE_PROPERTY) || {}; - if (validity.badInput || validity.typeMismatch) { - ctrl.$$parserName = parserName; - return undefined; - } - - return value; - }); - } -} - -function numberFormatterParser(ctrl) { - ctrl.$parsers.push(function(value) { - if (ctrl.$isEmpty(value)) return null; - if (NUMBER_REGEXP.test(value)) return parseFloat(value); - - ctrl.$$parserName = 'number'; - return undefined; - }); - - ctrl.$formatters.push(function(value) { - if (!ctrl.$isEmpty(value)) { - if (!isNumber(value)) { - throw ngModelMinErr('numfmt', 'Expected `{0}` to be a number', value); - } - value = value.toString(); - } - return value; - }); -} - -function parseNumberAttrVal(val) { - if (isDefined(val) && !isNumber(val)) { - val = parseFloat(val); - } - return !isNumberNaN(val) ? val : undefined; -} - -function isNumberInteger(num) { - // See http://stackoverflow.com/questions/14636536/how-to-check-if-a-variable-is-an-integer-in-javascript#14794066 - // (minus the assumption that `num` is a number) - - // eslint-disable-next-line no-bitwise - return (num | 0) === num; -} - -function countDecimals(num) { - var numString = num.toString(); - var decimalSymbolIndex = numString.indexOf('.'); - - if (decimalSymbolIndex === -1) { - if (-1 < num && num < 1) { - // It may be in the exponential notation format (`1e-X`) - var match = /e-(\d+)$/.exec(numString); - - if (match) { - return Number(match[1]); - } - } - - return 0; - } - - return numString.length - decimalSymbolIndex - 1; -} - -function isValidForStep(viewValue, stepBase, step) { - // At this point `stepBase` and `step` are expected to be non-NaN values - // and `viewValue` is expected to be a valid stringified number. - var value = Number(viewValue); - - var isNonIntegerValue = !isNumberInteger(value); - var isNonIntegerStepBase = !isNumberInteger(stepBase); - var isNonIntegerStep = !isNumberInteger(step); - - // Due to limitations in Floating Point Arithmetic (e.g. `0.3 - 0.2 !== 0.1` or - // `0.5 % 0.1 !== 0`), we need to convert all numbers to integers. - if (isNonIntegerValue || isNonIntegerStepBase || isNonIntegerStep) { - var valueDecimals = isNonIntegerValue ? countDecimals(value) : 0; - var stepBaseDecimals = isNonIntegerStepBase ? countDecimals(stepBase) : 0; - var stepDecimals = isNonIntegerStep ? countDecimals(step) : 0; - - var decimalCount = Math.max(valueDecimals, stepBaseDecimals, stepDecimals); - var multiplier = Math.pow(10, decimalCount); - - value = value * multiplier; - stepBase = stepBase * multiplier; - step = step * multiplier; - - if (isNonIntegerValue) value = Math.round(value); - if (isNonIntegerStepBase) stepBase = Math.round(stepBase); - if (isNonIntegerStep) step = Math.round(step); - } - - return (value - stepBase) % step === 0; -} - -function numberInputType(scope, element, attr, ctrl, $sniffer, $browser, $filter, $parse) { - badInputChecker(scope, element, attr, ctrl, 'number'); - numberFormatterParser(ctrl); - baseInputType(scope, element, attr, ctrl, $sniffer, $browser); - - var parsedMinVal; - - if (isDefined(attr.min) || attr.ngMin) { - var minVal = attr.min || $parse(attr.ngMin)(scope); - parsedMinVal = parseNumberAttrVal(minVal); - - ctrl.$validators.min = function(modelValue, viewValue) { - return ctrl.$isEmpty(viewValue) || isUndefined(parsedMinVal) || viewValue >= parsedMinVal; - }; - - attr.$observe('min', function(val) { - if (val !== minVal) { - parsedMinVal = parseNumberAttrVal(val); - minVal = val; - // TODO(matsko): implement validateLater to reduce number of validations - ctrl.$validate(); - } - }); - } - - if (isDefined(attr.max) || attr.ngMax) { - var maxVal = attr.max || $parse(attr.ngMax)(scope); - var parsedMaxVal = parseNumberAttrVal(maxVal); - - ctrl.$validators.max = function(modelValue, viewValue) { - return ctrl.$isEmpty(viewValue) || isUndefined(parsedMaxVal) || viewValue <= parsedMaxVal; - }; - - attr.$observe('max', function(val) { - if (val !== maxVal) { - parsedMaxVal = parseNumberAttrVal(val); - maxVal = val; - // TODO(matsko): implement validateLater to reduce number of validations - ctrl.$validate(); - } - }); - } - - if (isDefined(attr.step) || attr.ngStep) { - var stepVal = attr.step || $parse(attr.ngStep)(scope); - var parsedStepVal = parseNumberAttrVal(stepVal); - - ctrl.$validators.step = function(modelValue, viewValue) { - return ctrl.$isEmpty(viewValue) || isUndefined(parsedStepVal) || - isValidForStep(viewValue, parsedMinVal || 0, parsedStepVal); - }; - - attr.$observe('step', function(val) { - // TODO(matsko): implement validateLater to reduce number of validations - if (val !== stepVal) { - parsedStepVal = parseNumberAttrVal(val); - stepVal = val; - ctrl.$validate(); - } - - }); - - } -} - -function rangeInputType(scope, element, attr, ctrl, $sniffer, $browser) { - badInputChecker(scope, element, attr, ctrl, 'range'); - numberFormatterParser(ctrl); - baseInputType(scope, element, attr, ctrl, $sniffer, $browser); - - var supportsRange = ctrl.$$hasNativeValidators && element[0].type === 'range', - minVal = supportsRange ? 0 : undefined, - maxVal = supportsRange ? 100 : undefined, - stepVal = supportsRange ? 1 : undefined, - validity = element[0].validity, - hasMinAttr = isDefined(attr.min), - hasMaxAttr = isDefined(attr.max), - hasStepAttr = isDefined(attr.step); - - var originalRender = ctrl.$render; - - ctrl.$render = supportsRange && isDefined(validity.rangeUnderflow) && isDefined(validity.rangeOverflow) ? - //Browsers that implement range will set these values automatically, but reading the adjusted values after - //$render would cause the min / max validators to be applied with the wrong value - function rangeRender() { - originalRender(); - ctrl.$setViewValue(element.val()); - } : - originalRender; - - if (hasMinAttr) { - minVal = parseNumberAttrVal(attr.min); - - ctrl.$validators.min = supportsRange ? - // Since all browsers set the input to a valid value, we don't need to check validity - function noopMinValidator() { return true; } : - // non-support browsers validate the min val - function minValidator(modelValue, viewValue) { - return ctrl.$isEmpty(viewValue) || isUndefined(minVal) || viewValue >= minVal; - }; - - setInitialValueAndObserver('min', minChange); - } - - if (hasMaxAttr) { - maxVal = parseNumberAttrVal(attr.max); - - ctrl.$validators.max = supportsRange ? - // Since all browsers set the input to a valid value, we don't need to check validity - function noopMaxValidator() { return true; } : - // non-support browsers validate the max val - function maxValidator(modelValue, viewValue) { - return ctrl.$isEmpty(viewValue) || isUndefined(maxVal) || viewValue <= maxVal; - }; - - setInitialValueAndObserver('max', maxChange); - } - - if (hasStepAttr) { - stepVal = parseNumberAttrVal(attr.step); - - ctrl.$validators.step = supportsRange ? - function nativeStepValidator() { - // Currently, only FF implements the spec on step change correctly (i.e. adjusting the - // input element value to a valid value). It's possible that other browsers set the stepMismatch - // validity error instead, so we can at least report an error in that case. - return !validity.stepMismatch; - } : - // ngStep doesn't set the setp attr, so the browser doesn't adjust the input value as setting step would - function stepValidator(modelValue, viewValue) { - return ctrl.$isEmpty(viewValue) || isUndefined(stepVal) || - isValidForStep(viewValue, minVal || 0, stepVal); - }; - - setInitialValueAndObserver('step', stepChange); - } - - function setInitialValueAndObserver(htmlAttrName, changeFn) { - // interpolated attributes set the attribute value only after a digest, but we need the - // attribute value when the input is first rendered, so that the browser can adjust the - // input value based on the min/max value - element.attr(htmlAttrName, attr[htmlAttrName]); - var oldVal = attr[htmlAttrName]; - attr.$observe(htmlAttrName, function wrappedObserver(val) { - if (val !== oldVal) { - oldVal = val; - changeFn(val); - } - }); - } - - function minChange(val) { - minVal = parseNumberAttrVal(val); - // ignore changes before model is initialized - if (isNumberNaN(ctrl.$modelValue)) { - return; - } - - if (supportsRange) { - var elVal = element.val(); - // IE11 doesn't set the el val correctly if the minVal is greater than the element value - if (minVal > elVal) { - elVal = minVal; - element.val(elVal); - } - ctrl.$setViewValue(elVal); - } else { - // TODO(matsko): implement validateLater to reduce number of validations - ctrl.$validate(); - } - } - - function maxChange(val) { - maxVal = parseNumberAttrVal(val); - // ignore changes before model is initialized - if (isNumberNaN(ctrl.$modelValue)) { - return; - } - - if (supportsRange) { - var elVal = element.val(); - // IE11 doesn't set the el val correctly if the maxVal is less than the element value - if (maxVal < elVal) { - element.val(maxVal); - // IE11 and Chrome don't set the value to the minVal when max < min - elVal = maxVal < minVal ? minVal : maxVal; - } - ctrl.$setViewValue(elVal); - } else { - // TODO(matsko): implement validateLater to reduce number of validations - ctrl.$validate(); - } - } - - function stepChange(val) { - stepVal = parseNumberAttrVal(val); - // ignore changes before model is initialized - if (isNumberNaN(ctrl.$modelValue)) { - return; - } - - // Some browsers don't adjust the input value correctly, but set the stepMismatch error - if (!supportsRange) { - // TODO(matsko): implement validateLater to reduce number of validations - ctrl.$validate(); - } else if (ctrl.$viewValue !== element.val()) { - ctrl.$setViewValue(element.val()); - } - } -} - -function urlInputType(scope, element, attr, ctrl, $sniffer, $browser) { - // Note: no badInputChecker here by purpose as `url` is only a validation - // in browsers, i.e. we can always read out input.value even if it is not valid! - baseInputType(scope, element, attr, ctrl, $sniffer, $browser); - stringBasedInputType(ctrl); - - ctrl.$validators.url = function(modelValue, viewValue) { - var value = modelValue || viewValue; - return ctrl.$isEmpty(value) || URL_REGEXP.test(value); - }; -} - -function emailInputType(scope, element, attr, ctrl, $sniffer, $browser) { - // Note: no badInputChecker here by purpose as `url` is only a validation - // in browsers, i.e. we can always read out input.value even if it is not valid! - baseInputType(scope, element, attr, ctrl, $sniffer, $browser); - stringBasedInputType(ctrl); - - ctrl.$validators.email = function(modelValue, viewValue) { - var value = modelValue || viewValue; - return ctrl.$isEmpty(value) || EMAIL_REGEXP.test(value); - }; -} - -function radioInputType(scope, element, attr, ctrl) { - var doTrim = !attr.ngTrim || trim(attr.ngTrim) !== 'false'; - // make the name unique, if not defined - if (isUndefined(attr.name)) { - element.attr('name', nextUid()); - } - - var listener = function(ev) { - var value; - if (element[0].checked) { - value = attr.value; - if (doTrim) { - value = trim(value); - } - ctrl.$setViewValue(value, ev && ev.type); - } - }; - - element.on('change', listener); - - ctrl.$render = function() { - var value = attr.value; - if (doTrim) { - value = trim(value); - } - element[0].checked = (value === ctrl.$viewValue); - }; - - attr.$observe('value', ctrl.$render); -} - -function parseConstantExpr($parse, context, name, expression, fallback) { - var parseFn; - if (isDefined(expression)) { - parseFn = $parse(expression); - if (!parseFn.constant) { - throw ngModelMinErr('constexpr', 'Expected constant expression for `{0}`, but saw ' + - '`{1}`.', name, expression); - } - return parseFn(context); - } - return fallback; -} - -function checkboxInputType(scope, element, attr, ctrl, $sniffer, $browser, $filter, $parse) { - var trueValue = parseConstantExpr($parse, scope, 'ngTrueValue', attr.ngTrueValue, true); - var falseValue = parseConstantExpr($parse, scope, 'ngFalseValue', attr.ngFalseValue, false); - - var listener = function(ev) { - ctrl.$setViewValue(element[0].checked, ev && ev.type); - }; - - element.on('change', listener); - - ctrl.$render = function() { - element[0].checked = ctrl.$viewValue; - }; - - // Override the standard `$isEmpty` because the $viewValue of an empty checkbox is always set to `false` - // This is because of the parser below, which compares the `$modelValue` with `trueValue` to convert - // it to a boolean. - ctrl.$isEmpty = function(value) { - return value === false; - }; - - ctrl.$formatters.push(function(value) { - return equals(value, trueValue); - }); - - ctrl.$parsers.push(function(value) { - return value ? trueValue : falseValue; - }); -} - - -/** - * @ngdoc directive - * @name textarea - * @restrict E - * - * @description - * HTML textarea element control with AngularJS data-binding. The data-binding and validation - * properties of this element are exactly the same as those of the - * {@link ng.directive:input input element}. - * - * @param {string} ngModel Assignable AngularJS expression to data-bind to. - * @param {string=} name Property name of the form under which the control is published. - * @param {string=} required Sets `required` validation error key if the value is not entered. - * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to - * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of - * `required` when you want to data-bind to the `required` attribute. - * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than - * minlength. - * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than - * maxlength. Setting the attribute to a negative or non-numeric value, allows view values of any - * length. - * @param {string=} ngPattern Sets `pattern` validation error key if the ngModel {@link ngModel.NgModelController#$viewValue $viewValue} - * does not match a RegExp found by evaluating the AngularJS expression given in the attribute value. - * If the expression evaluates to a RegExp object, then this is used directly. - * If the expression evaluates to a string, then it will be converted to a RegExp - * after wrapping it in `^` and `$` characters. For instance, `"abc"` will be converted to - * `new RegExp('^abc$')`.
- * **Note:** Avoid using the `g` flag on the RegExp, as it will cause each successive search to - * start at the index of the last search's match, thus not taking the whole input value into - * account. - * @param {string=} ngChange AngularJS expression to be executed when input changes due to user - * interaction with the input element. - * @param {boolean=} [ngTrim=true] If set to false AngularJS will not automatically trim the input. - * - * @knownIssue - * - * When specifying the `placeholder` attribute of ` - *
{{ list | json }}
- * - * - * it("should split the text by newlines", function() { - * var listInput = element(by.model('list')); - * var output = element(by.binding('list | json')); - * listInput.sendKeys('abc\ndef\nghi'); - * expect(output.getText()).toContain('[\n "abc",\n "def",\n "ghi"\n]'); - * }); - * - * - * - */ -var ngListDirective = function() { - return { - restrict: 'A', - priority: 100, - require: 'ngModel', - link: function(scope, element, attr, ctrl) { - var ngList = attr.ngList || ', '; - var trimValues = attr.ngTrim !== 'false'; - var separator = trimValues ? trim(ngList) : ngList; - - var parse = function(viewValue) { - // If the viewValue is invalid (say required but empty) it will be `undefined` - if (isUndefined(viewValue)) return; - - var list = []; - - if (viewValue) { - forEach(viewValue.split(separator), function(value) { - if (value) list.push(trimValues ? trim(value) : value); - }); - } - - return list; - }; - - ctrl.$parsers.push(parse); - ctrl.$formatters.push(function(value) { - if (isArray(value)) { - return value.join(ngList); - } - - return undefined; - }); - - // Override the standard $isEmpty because an empty array means the input is empty. - ctrl.$isEmpty = function(value) { - return !value || !value.length; - }; - } - }; -}; - -/* global VALID_CLASS: true, - INVALID_CLASS: true, - PRISTINE_CLASS: true, - DIRTY_CLASS: true, - UNTOUCHED_CLASS: true, - TOUCHED_CLASS: true, - PENDING_CLASS: true, - addSetValidityMethod: true, - setupValidity: true, - defaultModelOptions: false -*/ - - -var VALID_CLASS = 'ng-valid', - INVALID_CLASS = 'ng-invalid', - PRISTINE_CLASS = 'ng-pristine', - DIRTY_CLASS = 'ng-dirty', - UNTOUCHED_CLASS = 'ng-untouched', - TOUCHED_CLASS = 'ng-touched', - EMPTY_CLASS = 'ng-empty', - NOT_EMPTY_CLASS = 'ng-not-empty'; - -var ngModelMinErr = minErr('ngModel'); - -/** - * @ngdoc type - * @name ngModel.NgModelController - * @property {*} $viewValue The actual value from the control's view. For `input` elements, this is a - * String. See {@link ngModel.NgModelController#$setViewValue} for information about when the $viewValue - * is set. - * - * @property {*} $modelValue The value in the model that the control is bound to. - * - * @property {Array.} $parsers Array of functions to execute, as a pipeline, whenever - * the control updates the ngModelController with a new {@link ngModel.NgModelController#$viewValue - `$viewValue`} from the DOM, usually via user input. - See {@link ngModel.NgModelController#$setViewValue `$setViewValue()`} for a detailed lifecycle explanation. - Note that the `$parsers` are not called when the bound ngModel expression changes programmatically. - - The functions are called in array order, each passing - its return value through to the next. The last return value is forwarded to the - {@link ngModel.NgModelController#$validators `$validators`} collection. - - Parsers are used to sanitize / convert the {@link ngModel.NgModelController#$viewValue - `$viewValue`}. - - Returning `undefined` from a parser means a parse error occurred. In that case, - no {@link ngModel.NgModelController#$validators `$validators`} will run and the `ngModel` - will be set to `undefined` unless {@link ngModelOptions `ngModelOptions.allowInvalid`} - is set to `true`. The parse error is stored in `ngModel.$error.parse`. - - This simple example shows a parser that would convert text input value to lowercase: - * ```js - * function parse(value) { - * if (value) { - * return value.toLowerCase(); - * } - * } - * ngModelController.$parsers.push(parse); - * ``` - - * - * @property {Array.} $formatters Array of functions to execute, as a pipeline, whenever - the bound ngModel expression changes programmatically. The `$formatters` are not called when the - value of the control is changed by user interaction. - - Formatters are used to format / convert the {@link ngModel.NgModelController#$modelValue - `$modelValue`} for display in the control. - - The functions are called in reverse array order, each passing the value through to the - next. The last return value is used as the actual DOM value. - - This simple example shows a formatter that would convert the model value to uppercase: - - * ```js - * function format(value) { - * if (value) { - * return value.toUpperCase(); - * } - * } - * ngModel.$formatters.push(format); - * ``` - * - * @property {Object.} $validators A collection of validators that are applied - * whenever the model value changes. The key value within the object refers to the name of the - * validator while the function refers to the validation operation. The validation operation is - * provided with the model value as an argument and must return a true or false value depending - * on the response of that validation. - * - * ```js - * ngModel.$validators.validCharacters = function(modelValue, viewValue) { - * var value = modelValue || viewValue; - * return /[0-9]+/.test(value) && - * /[a-z]+/.test(value) && - * /[A-Z]+/.test(value) && - * /\W+/.test(value); - * }; - * ``` - * - * @property {Object.} $asyncValidators A collection of validations that are expected to - * perform an asynchronous validation (e.g. a HTTP request). The validation function that is provided - * is expected to return a promise when it is run during the model validation process. Once the promise - * is delivered then the validation status will be set to true when fulfilled and false when rejected. - * When the asynchronous validators are triggered, each of the validators will run in parallel and the model - * value will only be updated once all validators have been fulfilled. As long as an asynchronous validator - * is unfulfilled, its key will be added to the controllers `$pending` property. Also, all asynchronous validators - * will only run once all synchronous validators have passed. - * - * Please note that if $http is used then it is important that the server returns a success HTTP response code - * in order to fulfill the validation and a status level of `4xx` in order to reject the validation. - * - * ```js - * ngModel.$asyncValidators.uniqueUsername = function(modelValue, viewValue) { - * var value = modelValue || viewValue; - * - * // Lookup user by username - * return $http.get('/api/users/' + value). - * then(function resolved() { - * //username exists, this means validation fails - * return $q.reject('exists'); - * }, function rejected() { - * //username does not exist, therefore this validation passes - * return true; - * }); - * }; - * ``` - * - * @property {Array.} $viewChangeListeners Array of functions to execute whenever - * a change to {@link ngModel.NgModelController#$viewValue `$viewValue`} has caused a change - * to {@link ngModel.NgModelController#$modelValue `$modelValue`}. - * It is called with no arguments, and its return value is ignored. - * This can be used in place of additional $watches against the model value. - * - * @property {Object} $error An object hash with all failing validator ids as keys. - * @property {Object} $pending An object hash with all pending validator ids as keys. - * - * @property {boolean} $untouched True if control has not lost focus yet. - * @property {boolean} $touched True if control has lost focus. - * @property {boolean} $pristine True if user has not interacted with the control yet. - * @property {boolean} $dirty True if user has already interacted with the control. - * @property {boolean} $valid True if there is no error. - * @property {boolean} $invalid True if at least one error on the control. - * @property {string} $name The name attribute of the control. - * - * @description - * - * `NgModelController` provides API for the {@link ngModel `ngModel`} directive. - * The controller contains services for data-binding, validation, CSS updates, and value formatting - * and parsing. It purposefully does not contain any logic which deals with DOM rendering or - * listening to DOM events. - * Such DOM related logic should be provided by other directives which make use of - * `NgModelController` for data-binding to control elements. - * AngularJS provides this DOM logic for most {@link input `input`} elements. - * At the end of this page you can find a {@link ngModel.NgModelController#custom-control-example - * custom control example} that uses `ngModelController` to bind to `contenteditable` elements. - * - * @example - * ### Custom Control Example - * This example shows how to use `NgModelController` with a custom control to achieve - * data-binding. Notice how different directives (`contenteditable`, `ng-model`, and `required`) - * collaborate together to achieve the desired result. - * - * `contenteditable` is an HTML5 attribute, which tells the browser to let the element - * contents be edited in place by the user. - * - * We are using the {@link ng.service:$sce $sce} service here and include the {@link ngSanitize $sanitize} - * module to automatically remove "bad" content like inline event listener (e.g. ``). - * However, as we are using `$sce` the model can still decide to provide unsafe content if it marks - * that content using the `$sce` service. - * - * - - [contenteditable] { - border: 1px solid black; - background-color: white; - min-height: 20px; - } - - .ng-invalid { - border: 1px solid red; - } - - - - angular.module('customControl', ['ngSanitize']). - directive('contenteditable', ['$sce', function($sce) { - return { - restrict: 'A', // only activate on element attribute - require: '?ngModel', // get a hold of NgModelController - link: function(scope, element, attrs, ngModel) { - if (!ngModel) return; // do nothing if no ng-model - - // Specify how UI should be updated - ngModel.$render = function() { - element.html($sce.getTrustedHtml(ngModel.$viewValue || '')); - }; - - // Listen for change events to enable binding - element.on('blur keyup change', function() { - scope.$evalAsync(read); - }); - read(); // initialize - - // Write data to the model - function read() { - var html = element.html(); - // When we clear the content editable the browser leaves a
behind - // If strip-br attribute is provided then we strip this out - if (attrs.stripBr && html === '
') { - html = ''; - } - ngModel.$setViewValue(html); - } - } - }; - }]); -
- -
-
Change me!
- Required! -
- -
-
- - it('should data-bind and become invalid', function() { - if (browser.params.browser === 'safari' || browser.params.browser === 'firefox') { - // SafariDriver can't handle contenteditable - // and Firefox driver can't clear contenteditables very well - return; - } - var contentEditable = element(by.css('[contenteditable]')); - var content = 'Change me!'; - - expect(contentEditable.getText()).toEqual(content); - - contentEditable.clear(); - contentEditable.sendKeys(protractor.Key.BACK_SPACE); - expect(contentEditable.getText()).toEqual(''); - expect(contentEditable.getAttribute('class')).toMatch(/ng-invalid-required/); - }); - - *
- * - * - */ -NgModelController.$inject = ['$scope', '$exceptionHandler', '$attrs', '$element', '$parse', '$animate', '$timeout', '$q', '$interpolate']; -function NgModelController($scope, $exceptionHandler, $attr, $element, $parse, $animate, $timeout, $q, $interpolate) { - this.$viewValue = Number.NaN; - this.$modelValue = Number.NaN; - this.$$rawModelValue = undefined; // stores the parsed modelValue / model set from scope regardless of validity. - this.$validators = {}; - this.$asyncValidators = {}; - this.$parsers = []; - this.$formatters = []; - this.$viewChangeListeners = []; - this.$untouched = true; - this.$touched = false; - this.$pristine = true; - this.$dirty = false; - this.$valid = true; - this.$invalid = false; - this.$error = {}; // keep invalid keys here - this.$$success = {}; // keep valid keys here - this.$pending = undefined; // keep pending keys here - this.$name = $interpolate($attr.name || '', false)($scope); - this.$$parentForm = nullFormCtrl; - this.$options = defaultModelOptions; - this.$$updateEvents = ''; - // Attach the correct context to the event handler function for updateOn - this.$$updateEventHandler = this.$$updateEventHandler.bind(this); - - this.$$parsedNgModel = $parse($attr.ngModel); - this.$$parsedNgModelAssign = this.$$parsedNgModel.assign; - this.$$ngModelGet = this.$$parsedNgModel; - this.$$ngModelSet = this.$$parsedNgModelAssign; - this.$$pendingDebounce = null; - this.$$parserValid = undefined; - this.$$parserName = 'parse'; - - this.$$currentValidationRunId = 0; - - this.$$scope = $scope; - this.$$rootScope = $scope.$root; - this.$$attr = $attr; - this.$$element = $element; - this.$$animate = $animate; - this.$$timeout = $timeout; - this.$$parse = $parse; - this.$$q = $q; - this.$$exceptionHandler = $exceptionHandler; - - setupValidity(this); - setupModelWatcher(this); -} - -NgModelController.prototype = { - $$initGetterSetters: function() { - if (this.$options.getOption('getterSetter')) { - var invokeModelGetter = this.$$parse(this.$$attr.ngModel + '()'), - invokeModelSetter = this.$$parse(this.$$attr.ngModel + '($$$p)'); - - this.$$ngModelGet = function($scope) { - var modelValue = this.$$parsedNgModel($scope); - if (isFunction(modelValue)) { - modelValue = invokeModelGetter($scope); - } - return modelValue; - }; - this.$$ngModelSet = function($scope, newValue) { - if (isFunction(this.$$parsedNgModel($scope))) { - invokeModelSetter($scope, {$$$p: newValue}); - } else { - this.$$parsedNgModelAssign($scope, newValue); - } - }; - } else if (!this.$$parsedNgModel.assign) { - throw ngModelMinErr('nonassign', 'Expression \'{0}\' is non-assignable. Element: {1}', - this.$$attr.ngModel, startingTag(this.$$element)); - } - }, - - - /** - * @ngdoc method - * @name ngModel.NgModelController#$render - * - * @description - * Called when the view needs to be updated. It is expected that the user of the ng-model - * directive will implement this method. - * - * The `$render()` method is invoked in the following situations: - * - * * `$rollbackViewValue()` is called. If we are rolling back the view value to the last - * committed value then `$render()` is called to update the input control. - * * The value referenced by `ng-model` is changed programmatically and both the `$modelValue` and - * the `$viewValue` are different from last time. - * - * Since `ng-model` does not do a deep watch, `$render()` is only invoked if the values of - * `$modelValue` and `$viewValue` are actually different from their previous values. If `$modelValue` - * or `$viewValue` are objects (rather than a string or number) then `$render()` will not be - * invoked if you only change a property on the objects. - */ - $render: noop, - - /** - * @ngdoc method - * @name ngModel.NgModelController#$isEmpty - * - * @description - * This is called when we need to determine if the value of an input is empty. - * - * For instance, the required directive does this to work out if the input has data or not. - * - * The default `$isEmpty` function checks whether the value is `undefined`, `''`, `null` or `NaN`. - * - * You can override this for input directives whose concept of being empty is different from the - * default. The `checkboxInputType` directive does this because in its case a value of `false` - * implies empty. - * - * @param {*} value The value of the input to check for emptiness. - * @returns {boolean} True if `value` is "empty". - */ - $isEmpty: function(value) { - // eslint-disable-next-line no-self-compare - return isUndefined(value) || value === '' || value === null || value !== value; - }, - - $$updateEmptyClasses: function(value) { - if (this.$isEmpty(value)) { - this.$$animate.removeClass(this.$$element, NOT_EMPTY_CLASS); - this.$$animate.addClass(this.$$element, EMPTY_CLASS); - } else { - this.$$animate.removeClass(this.$$element, EMPTY_CLASS); - this.$$animate.addClass(this.$$element, NOT_EMPTY_CLASS); - } - }, - - /** - * @ngdoc method - * @name ngModel.NgModelController#$setPristine - * - * @description - * Sets the control to its pristine state. - * - * This method can be called to remove the `ng-dirty` class and set the control to its pristine - * state (`ng-pristine` class). A model is considered to be pristine when the control - * has not been changed from when first compiled. - */ - $setPristine: function() { - this.$dirty = false; - this.$pristine = true; - this.$$animate.removeClass(this.$$element, DIRTY_CLASS); - this.$$animate.addClass(this.$$element, PRISTINE_CLASS); - }, - - /** - * @ngdoc method - * @name ngModel.NgModelController#$setDirty - * - * @description - * Sets the control to its dirty state. - * - * This method can be called to remove the `ng-pristine` class and set the control to its dirty - * state (`ng-dirty` class). A model is considered to be dirty when the control has been changed - * from when first compiled. - */ - $setDirty: function() { - this.$dirty = true; - this.$pristine = false; - this.$$animate.removeClass(this.$$element, PRISTINE_CLASS); - this.$$animate.addClass(this.$$element, DIRTY_CLASS); - this.$$parentForm.$setDirty(); - }, - - /** - * @ngdoc method - * @name ngModel.NgModelController#$setUntouched - * - * @description - * Sets the control to its untouched state. - * - * This method can be called to remove the `ng-touched` class and set the control to its - * untouched state (`ng-untouched` class). Upon compilation, a model is set as untouched - * by default, however this function can be used to restore that state if the model has - * already been touched by the user. - */ - $setUntouched: function() { - this.$touched = false; - this.$untouched = true; - this.$$animate.setClass(this.$$element, UNTOUCHED_CLASS, TOUCHED_CLASS); - }, - - /** - * @ngdoc method - * @name ngModel.NgModelController#$setTouched - * - * @description - * Sets the control to its touched state. - * - * This method can be called to remove the `ng-untouched` class and set the control to its - * touched state (`ng-touched` class). A model is considered to be touched when the user has - * first focused the control element and then shifted focus away from the control (blur event). - */ - $setTouched: function() { - this.$touched = true; - this.$untouched = false; - this.$$animate.setClass(this.$$element, TOUCHED_CLASS, UNTOUCHED_CLASS); - }, - - /** - * @ngdoc method - * @name ngModel.NgModelController#$rollbackViewValue - * - * @description - * Cancel an update and reset the input element's value to prevent an update to the `$modelValue`, - * which may be caused by a pending debounced event or because the input is waiting for some - * future event. - * - * If you have an input that uses `ng-model-options` to set up debounced updates or updates that - * depend on special events such as `blur`, there can be a period when the `$viewValue` is out of - * sync with the ngModel's `$modelValue`. - * - * In this case, you can use `$rollbackViewValue()` to manually cancel the debounced / future update - * and reset the input to the last committed view value. - * - * It is also possible that you run into difficulties if you try to update the ngModel's `$modelValue` - * programmatically before these debounced/future events have resolved/occurred, because AngularJS's - * dirty checking mechanism is not able to tell whether the model has actually changed or not. - * - * The `$rollbackViewValue()` method should be called before programmatically changing the model of an - * input which may have such events pending. This is important in order to make sure that the - * input field will be updated with the new model value and any pending operations are cancelled. - * - * @example - * - * - * angular.module('cancel-update-example', []) - * - * .controller('CancelUpdateController', ['$scope', function($scope) { - * $scope.model = {value1: '', value2: ''}; - * - * $scope.setEmpty = function(e, value, rollback) { - * if (e.keyCode === 27) { - * e.preventDefault(); - * if (rollback) { - * $scope.myForm[value].$rollbackViewValue(); - * } - * $scope.model[value] = ''; - * } - * }; - * }]); - * - * - *
- *

Both of these inputs are only updated if they are blurred. Hitting escape should - * empty them. Follow these steps and observe the difference:

- *
    - *
  1. Type something in the input. You will see that the model is not yet updated
  2. - *
  3. Press the Escape key. - *
      - *
    1. In the first example, nothing happens, because the model is already '', and no - * update is detected. If you blur the input, the model will be set to the current view. - *
    2. - *
    3. In the second example, the pending update is cancelled, and the input is set back - * to the last committed view value (''). Blurring the input does nothing. - *
    4. - *
    - *
  4. - *
- * - *
- *
- *

Without $rollbackViewValue():

- * - * value1: "{{ model.value1 }}" - *
- * - *
- *

With $rollbackViewValue():

- * - * value2: "{{ model.value2 }}" - *
- *
- *
- *
- - div { - display: table-cell; - } - div:nth-child(1) { - padding-right: 30px; - } - - - *
- */ - $rollbackViewValue: function() { - this.$$timeout.cancel(this.$$pendingDebounce); - this.$viewValue = this.$$lastCommittedViewValue; - this.$render(); - }, - - /** - * @ngdoc method - * @name ngModel.NgModelController#$validate - * - * @description - * Runs each of the registered validators (first synchronous validators and then - * asynchronous validators). - * If the validity changes to invalid, the model will be set to `undefined`, - * unless {@link ngModelOptions `ngModelOptions.allowInvalid`} is `true`. - * If the validity changes to valid, it will set the model to the last available valid - * `$modelValue`, i.e. either the last parsed value or the last value set from the scope. - */ - $validate: function() { - - // ignore $validate before model is initialized - if (isNumberNaN(this.$modelValue)) { - return; - } - - var viewValue = this.$$lastCommittedViewValue; - // Note: we use the $$rawModelValue as $modelValue might have been - // set to undefined during a view -> model update that found validation - // errors. We can't parse the view here, since that could change - // the model although neither viewValue nor the model on the scope changed - var modelValue = this.$$rawModelValue; - - var prevValid = this.$valid; - var prevModelValue = this.$modelValue; - - var allowInvalid = this.$options.getOption('allowInvalid'); - - var that = this; - this.$$runValidators(modelValue, viewValue, function(allValid) { - // If there was no change in validity, don't update the model - // This prevents changing an invalid modelValue to undefined - if (!allowInvalid && prevValid !== allValid) { - // Note: Don't check this.$valid here, as we could have - // external validators (e.g. calculated on the server), - // that just call $setValidity and need the model value - // to calculate their validity. - that.$modelValue = allValid ? modelValue : undefined; - - if (that.$modelValue !== prevModelValue) { - that.$$writeModelToScope(); - } - } - }); - }, - - $$runValidators: function(modelValue, viewValue, doneCallback) { - this.$$currentValidationRunId++; - var localValidationRunId = this.$$currentValidationRunId; - var that = this; - - // check parser error - if (!processParseErrors()) { - validationDone(false); - return; - } - if (!processSyncValidators()) { - validationDone(false); - return; - } - processAsyncValidators(); - - function processParseErrors() { - var errorKey = that.$$parserName; - - if (isUndefined(that.$$parserValid)) { - setValidity(errorKey, null); - } else { - if (!that.$$parserValid) { - forEach(that.$validators, function(v, name) { - setValidity(name, null); - }); - forEach(that.$asyncValidators, function(v, name) { - setValidity(name, null); - }); - } - - // Set the parse error last, to prevent unsetting it, should a $validators key == parserName - setValidity(errorKey, that.$$parserValid); - return that.$$parserValid; - } - return true; - } - - function processSyncValidators() { - var syncValidatorsValid = true; - forEach(that.$validators, function(validator, name) { - var result = Boolean(validator(modelValue, viewValue)); - syncValidatorsValid = syncValidatorsValid && result; - setValidity(name, result); - }); - if (!syncValidatorsValid) { - forEach(that.$asyncValidators, function(v, name) { - setValidity(name, null); - }); - return false; - } - return true; - } - - function processAsyncValidators() { - var validatorPromises = []; - var allValid = true; - forEach(that.$asyncValidators, function(validator, name) { - var promise = validator(modelValue, viewValue); - if (!isPromiseLike(promise)) { - throw ngModelMinErr('nopromise', - 'Expected asynchronous validator to return a promise but got \'{0}\' instead.', promise); - } - setValidity(name, undefined); - validatorPromises.push(promise.then(function() { - setValidity(name, true); - }, function() { - allValid = false; - setValidity(name, false); - })); - }); - if (!validatorPromises.length) { - validationDone(true); - } else { - that.$$q.all(validatorPromises).then(function() { - validationDone(allValid); - }, noop); - } - } - - function setValidity(name, isValid) { - if (localValidationRunId === that.$$currentValidationRunId) { - that.$setValidity(name, isValid); - } - } - - function validationDone(allValid) { - if (localValidationRunId === that.$$currentValidationRunId) { - - doneCallback(allValid); - } - } - }, - - /** - * @ngdoc method - * @name ngModel.NgModelController#$commitViewValue - * - * @description - * Commit a pending update to the `$modelValue`. - * - * Updates may be pending by a debounced event or because the input is waiting for a some future - * event defined in `ng-model-options`. this method is rarely needed as `NgModelController` - * usually handles calling this in response to input events. - */ - $commitViewValue: function() { - var viewValue = this.$viewValue; - - this.$$timeout.cancel(this.$$pendingDebounce); - - // If the view value has not changed then we should just exit, except in the case where there is - // a native validator on the element. In this case the validation state may have changed even though - // the viewValue has stayed empty. - if (this.$$lastCommittedViewValue === viewValue && (viewValue !== '' || !this.$$hasNativeValidators)) { - return; - } - this.$$updateEmptyClasses(viewValue); - this.$$lastCommittedViewValue = viewValue; - - // change to dirty - if (this.$pristine) { - this.$setDirty(); - } - this.$$parseAndValidate(); - }, - - $$parseAndValidate: function() { - var viewValue = this.$$lastCommittedViewValue; - var modelValue = viewValue; - var that = this; - - this.$$parserValid = isUndefined(modelValue) ? undefined : true; - - // Reset any previous parse error - this.$setValidity(this.$$parserName, null); - this.$$parserName = 'parse'; - - if (this.$$parserValid) { - for (var i = 0; i < this.$parsers.length; i++) { - modelValue = this.$parsers[i](modelValue); - if (isUndefined(modelValue)) { - this.$$parserValid = false; - break; - } - } - } - if (isNumberNaN(this.$modelValue)) { - // this.$modelValue has not been touched yet... - this.$modelValue = this.$$ngModelGet(this.$$scope); - } - var prevModelValue = this.$modelValue; - var allowInvalid = this.$options.getOption('allowInvalid'); - this.$$rawModelValue = modelValue; - - if (allowInvalid) { - this.$modelValue = modelValue; - writeToModelIfNeeded(); - } - - // Pass the $$lastCommittedViewValue here, because the cached viewValue might be out of date. - // This can happen if e.g. $setViewValue is called from inside a parser - this.$$runValidators(modelValue, this.$$lastCommittedViewValue, function(allValid) { - if (!allowInvalid) { - // Note: Don't check this.$valid here, as we could have - // external validators (e.g. calculated on the server), - // that just call $setValidity and need the model value - // to calculate their validity. - that.$modelValue = allValid ? modelValue : undefined; - writeToModelIfNeeded(); - } - }); - - function writeToModelIfNeeded() { - if (that.$modelValue !== prevModelValue) { - that.$$writeModelToScope(); - } - } - }, - - $$writeModelToScope: function() { - this.$$ngModelSet(this.$$scope, this.$modelValue); - forEach(this.$viewChangeListeners, function(listener) { - try { - listener(); - } catch (e) { - // eslint-disable-next-line no-invalid-this - this.$$exceptionHandler(e); - } - }, this); - }, - - /** - * @ngdoc method - * @name ngModel.NgModelController#$setViewValue - * - * @description - * Update the view value. - * - * This method should be called when a control wants to change the view value; typically, - * this is done from within a DOM event handler. For example, the {@link ng.directive:input input} - * directive calls it when the value of the input changes and {@link ng.directive:select select} - * calls it when an option is selected. - * - * When `$setViewValue` is called, the new `value` will be staged for committing through the `$parsers` - * and `$validators` pipelines. If there are no special {@link ngModelOptions} specified then the staged - * value is sent directly for processing through the `$parsers` pipeline. After this, the `$validators` and - * `$asyncValidators` are called and the value is applied to `$modelValue`. - * Finally, the value is set to the **expression** specified in the `ng-model` attribute and - * all the registered change listeners, in the `$viewChangeListeners` list are called. - * - * In case the {@link ng.directive:ngModelOptions ngModelOptions} directive is used with `updateOn` - * and the `default` trigger is not listed, all those actions will remain pending until one of the - * `updateOn` events is triggered on the DOM element. - * All these actions will be debounced if the {@link ng.directive:ngModelOptions ngModelOptions} - * directive is used with a custom debounce for this particular event. - * Note that a `$digest` is only triggered once the `updateOn` events are fired, or if `debounce` - * is specified, once the timer runs out. - * - * When used with standard inputs, the view value will always be a string (which is in some cases - * parsed into another type, such as a `Date` object for `input[date]`.) - * However, custom controls might also pass objects to this method. In this case, we should make - * a copy of the object before passing it to `$setViewValue`. This is because `ngModel` does not - * perform a deep watch of objects, it only looks for a change of identity. If you only change - * the property of the object then ngModel will not realize that the object has changed and - * will not invoke the `$parsers` and `$validators` pipelines. For this reason, you should - * not change properties of the copy once it has been passed to `$setViewValue`. - * Otherwise you may cause the model value on the scope to change incorrectly. - * - *
- * In any case, the value passed to the method should always reflect the current value - * of the control. For example, if you are calling `$setViewValue` for an input element, - * you should pass the input DOM value. Otherwise, the control and the scope model become - * out of sync. It's also important to note that `$setViewValue` does not call `$render` or change - * the control's DOM value in any way. If we want to change the control's DOM value - * programmatically, we should update the `ngModel` scope expression. Its new value will be - * picked up by the model controller, which will run it through the `$formatters`, `$render` it - * to update the DOM, and finally call `$validate` on it. - *
- * - * @param {*} value value from the view. - * @param {string} trigger Event that triggered the update. - */ - $setViewValue: function(value, trigger) { - this.$viewValue = value; - if (this.$options.getOption('updateOnDefault')) { - this.$$debounceViewValueCommit(trigger); - } - }, - - $$debounceViewValueCommit: function(trigger) { - var debounceDelay = this.$options.getOption('debounce'); - - if (isNumber(debounceDelay[trigger])) { - debounceDelay = debounceDelay[trigger]; - } else if (isNumber(debounceDelay['default']) && - this.$options.getOption('updateOn').indexOf(trigger) === -1 - ) { - debounceDelay = debounceDelay['default']; - } else if (isNumber(debounceDelay['*'])) { - debounceDelay = debounceDelay['*']; - } - - this.$$timeout.cancel(this.$$pendingDebounce); - var that = this; - if (debounceDelay > 0) { // this fails if debounceDelay is an object - this.$$pendingDebounce = this.$$timeout(function() { - that.$commitViewValue(); - }, debounceDelay); - } else if (this.$$rootScope.$$phase) { - this.$commitViewValue(); - } else { - this.$$scope.$apply(function() { - that.$commitViewValue(); - }); - } - }, - - /** - * @ngdoc method - * - * @name ngModel.NgModelController#$overrideModelOptions - * - * @description - * - * Override the current model options settings programmatically. - * - * The previous `ModelOptions` value will not be modified. Instead, a - * new `ModelOptions` object will inherit from the previous one overriding - * or inheriting settings that are defined in the given parameter. - * - * See {@link ngModelOptions} for information about what options can be specified - * and how model option inheritance works. - * - *
- * **Note:** this function only affects the options set on the `ngModelController`, - * and not the options on the {@link ngModelOptions} directive from which they might have been - * obtained initially. - *
- * - *
- * **Note:** it is not possible to override the `getterSetter` option. - *
- * - * @param {Object} options a hash of settings to override the previous options - * - */ - $overrideModelOptions: function(options) { - this.$options = this.$options.createChild(options); - this.$$setUpdateOnEvents(); - }, - - /** - * @ngdoc method - * - * @name ngModel.NgModelController#$processModelValue - - * @description - * - * Runs the model -> view pipeline on the current - * {@link ngModel.NgModelController#$modelValue $modelValue}. - * - * The following actions are performed by this method: - * - * - the `$modelValue` is run through the {@link ngModel.NgModelController#$formatters $formatters} - * and the result is set to the {@link ngModel.NgModelController#$viewValue $viewValue} - * - the `ng-empty` or `ng-not-empty` class is set on the element - * - if the `$viewValue` has changed: - * - {@link ngModel.NgModelController#$render $render} is called on the control - * - the {@link ngModel.NgModelController#$validators $validators} are run and - * the validation status is set. - * - * This method is called by ngModel internally when the bound scope value changes. - * Application developers usually do not have to call this function themselves. - * - * This function can be used when the `$viewValue` or the rendered DOM value are not correctly - * formatted and the `$modelValue` must be run through the `$formatters` again. - * - * @example - * Consider a text input with an autocomplete list (for fruit), where the items are - * objects with a name and an id. - * A user enters `ap` and then selects `Apricot` from the list. - * Based on this, the autocomplete widget will call `$setViewValue({name: 'Apricot', id: 443})`, - * but the rendered value will still be `ap`. - * The widget can then call `ctrl.$processModelValue()` to run the model -> view - * pipeline again, which formats the object to the string `Apricot`, - * then updates the `$viewValue`, and finally renders it in the DOM. - * - * - -
-
- Search Fruit: - -
-
- Model:
-
{{selectedFruit | json}}
-
-
-
- - angular.module('inputExample', []) - .controller('inputController', function($scope) { - $scope.items = [ - {name: 'Apricot', id: 443}, - {name: 'Clementine', id: 972}, - {name: 'Durian', id: 169}, - {name: 'Jackfruit', id: 982}, - {name: 'Strawberry', id: 863} - ]; - }) - .component('basicAutocomplete', { - bindings: { - items: '<', - onSelect: '&' - }, - templateUrl: 'autocomplete.html', - controller: function($element, $scope) { - var that = this; - var ngModel; - - that.$postLink = function() { - ngModel = $element.find('input').controller('ngModel'); - - ngModel.$formatters.push(function(value) { - return (value && value.name) || value; - }); - - ngModel.$parsers.push(function(value) { - var match = value; - for (var i = 0; i < that.items.length; i++) { - if (that.items[i].name === value) { - match = that.items[i]; - break; - } - } - - return match; - }); - }; - - that.selectItem = function(item) { - ngModel.$setViewValue(item); - ngModel.$processModelValue(); - that.onSelect({item: item}); - }; - } - }); - - -
- -
    -
  • - -
  • -
-
-
- *
- * - */ - $processModelValue: function() { - var viewValue = this.$$format(); - - if (this.$viewValue !== viewValue) { - this.$$updateEmptyClasses(viewValue); - this.$viewValue = this.$$lastCommittedViewValue = viewValue; - this.$render(); - // It is possible that model and view value have been updated during render - this.$$runValidators(this.$modelValue, this.$viewValue, noop); - } - }, - - /** - * This method is called internally to run the $formatters on the $modelValue - */ - $$format: function() { - var formatters = this.$formatters, - idx = formatters.length; - - var viewValue = this.$modelValue; - while (idx--) { - viewValue = formatters[idx](viewValue); - } - - return viewValue; - }, - - /** - * This method is called internally when the bound scope value changes. - */ - $$setModelValue: function(modelValue) { - this.$modelValue = this.$$rawModelValue = modelValue; - this.$$parserValid = undefined; - this.$processModelValue(); - }, - - $$setUpdateOnEvents: function() { - if (this.$$updateEvents) { - this.$$element.off(this.$$updateEvents, this.$$updateEventHandler); - } - - this.$$updateEvents = this.$options.getOption('updateOn'); - if (this.$$updateEvents) { - this.$$element.on(this.$$updateEvents, this.$$updateEventHandler); - } - }, - - $$updateEventHandler: function(ev) { - this.$$debounceViewValueCommit(ev && ev.type); - } -}; - -function setupModelWatcher(ctrl) { - // model -> value - // Note: we cannot use a normal scope.$watch as we want to detect the following: - // 1. scope value is 'a' - // 2. user enters 'b' - // 3. ng-change kicks in and reverts scope value to 'a' - // -> scope value did not change since the last digest as - // ng-change executes in apply phase - // 4. view should be changed back to 'a' - ctrl.$$scope.$watch(function ngModelWatch(scope) { - var modelValue = ctrl.$$ngModelGet(scope); - - // if scope model value and ngModel value are out of sync - // This cannot be moved to the action function, because it would not catch the - // case where the model is changed in the ngChange function or the model setter - if (modelValue !== ctrl.$modelValue && - // checks for NaN is needed to allow setting the model to NaN when there's an asyncValidator - // eslint-disable-next-line no-self-compare - (ctrl.$modelValue === ctrl.$modelValue || modelValue === modelValue) - ) { - ctrl.$$setModelValue(modelValue); - } - - return modelValue; - }); -} - -/** - * @ngdoc method - * @name ngModel.NgModelController#$setValidity - * - * @description - * Change the validity state, and notify the form. - * - * This method can be called within $parsers/$formatters or a custom validation implementation. - * However, in most cases it should be sufficient to use the `ngModel.$validators` and - * `ngModel.$asyncValidators` collections which will call `$setValidity` automatically. - * - * @param {string} validationErrorKey Name of the validator. The `validationErrorKey` will be assigned - * to either `$error[validationErrorKey]` or `$pending[validationErrorKey]` - * (for unfulfilled `$asyncValidators`), so that it is available for data-binding. - * The `validationErrorKey` should be in camelCase and will get converted into dash-case - * for class name. Example: `myError` will result in `ng-valid-my-error` and `ng-invalid-my-error` - * classes and can be bound to as `{{ someForm.someControl.$error.myError }}`. - * @param {boolean} isValid Whether the current state is valid (true), invalid (false), pending (undefined), - * or skipped (null). Pending is used for unfulfilled `$asyncValidators`. - * Skipped is used by AngularJS when validators do not run because of parse errors and - * when `$asyncValidators` do not run because any of the `$validators` failed. - */ -addSetValidityMethod({ - clazz: NgModelController, - set: function(object, property) { - object[property] = true; - }, - unset: function(object, property) { - delete object[property]; - } -}); - - -/** - * @ngdoc directive - * @name ngModel - * @restrict A - * @priority 1 - * @param {expression} ngModel assignable {@link guide/expression Expression} to bind to. - * - * @description - * The `ngModel` directive binds an `input`,`select`, `textarea` (or custom form control) to a - * property on the scope using {@link ngModel.NgModelController NgModelController}, - * which is created and exposed by this directive. - * - * `ngModel` is responsible for: - * - * - Binding the view into the model, which other directives such as `input`, `textarea` or `select` - * require. - * - Providing validation behavior (i.e. required, number, email, url). - * - Keeping the state of the control (valid/invalid, dirty/pristine, touched/untouched, validation errors). - * - Setting related css classes on the element (`ng-valid`, `ng-invalid`, `ng-dirty`, `ng-pristine`, `ng-touched`, - * `ng-untouched`, `ng-empty`, `ng-not-empty`) including animations. - * - Registering the control with its parent {@link ng.directive:form form}. - * - * Note: `ngModel` will try to bind to the property given by evaluating the expression on the - * current scope. If the property doesn't already exist on this scope, it will be created - * implicitly and added to the scope. - * - * For best practices on using `ngModel`, see: - * - * - [Understanding Scopes](https://github.com/angular/angular.js/wiki/Understanding-Scopes) - * - * For basic examples, how to use `ngModel`, see: - * - * - {@link ng.directive:input input} - * - {@link input[text] text} - * - {@link input[checkbox] checkbox} - * - {@link input[radio] radio} - * - {@link input[number] number} - * - {@link input[email] email} - * - {@link input[url] url} - * - {@link input[date] date} - * - {@link input[datetime-local] datetime-local} - * - {@link input[time] time} - * - {@link input[month] month} - * - {@link input[week] week} - * - {@link ng.directive:select select} - * - {@link ng.directive:textarea textarea} - * - * ## Complex Models (objects or collections) - * - * By default, `ngModel` watches the model by reference, not value. This is important to know when - * binding inputs to models that are objects (e.g. `Date`) or collections (e.g. arrays). If only properties of the - * object or collection change, `ngModel` will not be notified and so the input will not be re-rendered. - * - * The model must be assigned an entirely new object or collection before a re-rendering will occur. - * - * Some directives have options that will cause them to use a custom `$watchCollection` on the model expression - * - for example, `ngOptions` will do so when a `track by` clause is included in the comprehension expression or - * if the select is given the `multiple` attribute. - * - * The `$watchCollection()` method only does a shallow comparison, meaning that changing properties deeper than the - * first level of the object (or only changing the properties of an item in the collection if it's an array) will still - * not trigger a re-rendering of the model. - * - * ## CSS classes - * The following CSS classes are added and removed on the associated input/select/textarea element - * depending on the validity of the model. - * - * - `ng-valid`: the model is valid - * - `ng-invalid`: the model is invalid - * - `ng-valid-[key]`: for each valid key added by `$setValidity` - * - `ng-invalid-[key]`: for each invalid key added by `$setValidity` - * - `ng-pristine`: the control hasn't been interacted with yet - * - `ng-dirty`: the control has been interacted with - * - `ng-touched`: the control has been blurred - * - `ng-untouched`: the control hasn't been blurred - * - `ng-pending`: any `$asyncValidators` are unfulfilled - * - `ng-empty`: the view does not contain a value or the value is deemed "empty", as defined - * by the {@link ngModel.NgModelController#$isEmpty} method - * - `ng-not-empty`: the view contains a non-empty value - * - * Keep in mind that ngAnimate can detect each of these classes when added and removed. - * - * @animations - * Animations within models are triggered when any of the associated CSS classes are added and removed - * on the input element which is attached to the model. These classes include: `.ng-pristine`, `.ng-dirty`, - * `.ng-invalid` and `.ng-valid` as well as any other validations that are performed on the model itself. - * The animations that are triggered within ngModel are similar to how they work in ngClass and - * animations can be hooked into using CSS transitions, keyframes as well as JS animations. - * - * The following example shows a simple way to utilize CSS transitions to style an input element - * that has been rendered as invalid after it has been validated: - * - *
- * //be sure to include ngAnimate as a module to hook into more
- * //advanced animations
- * .my-input {
- *   transition:0.5s linear all;
- *   background: white;
- * }
- * .my-input.ng-invalid {
- *   background: red;
- *   color:white;
- * }
- * 
- * - * @example - * ### Basic Usage - * - - - -

- Update input to see transitions when valid/invalid. - Integer is a valid value. -

-
- -
-
- *
- * - * @example - * ### Binding to a getter/setter - * - * Sometimes it's helpful to bind `ngModel` to a getter/setter function. A getter/setter is a - * function that returns a representation of the model when called with zero arguments, and sets - * the internal state of a model when called with an argument. It's sometimes useful to use this - * for models that have an internal representation that's different from what the model exposes - * to the view. - * - *
- * **Best Practice:** It's best to keep getters fast because AngularJS is likely to call them more - * frequently than other parts of your code. - *
- * - * You use this behavior by adding `ng-model-options="{ getterSetter: true }"` to an element that - * has `ng-model` attached to it. You can also add `ng-model-options="{ getterSetter: true }"` to - * a `
`, which will enable this behavior for all ``s within it. See - * {@link ng.directive:ngModelOptions `ngModelOptions`} for more. - * - * The following example shows how to use `ngModel` with a getter/setter: - * - * @example - * - -
- - - -
user.name = 
-
-
- - angular.module('getterSetterExample', []) - .controller('ExampleController', ['$scope', function($scope) { - var _name = 'Brian'; - $scope.user = { - name: function(newName) { - // Note that newName can be undefined for two reasons: - // 1. Because it is called as a getter and thus called with no arguments - // 2. Because the property should actually be set to undefined. This happens e.g. if the - // input is invalid - return arguments.length ? (_name = newName) : _name; - } - }; - }]); - - *
- */ -var ngModelDirective = ['$rootScope', function($rootScope) { - return { - restrict: 'A', - require: ['ngModel', '^?form', '^?ngModelOptions'], - controller: NgModelController, - // Prelink needs to run before any input directive - // so that we can set the NgModelOptions in NgModelController - // before anyone else uses it. - priority: 1, - compile: function ngModelCompile(element) { - // Setup initial state of the control - element.addClass(PRISTINE_CLASS).addClass(UNTOUCHED_CLASS).addClass(VALID_CLASS); - - return { - pre: function ngModelPreLink(scope, element, attr, ctrls) { - var modelCtrl = ctrls[0], - formCtrl = ctrls[1] || modelCtrl.$$parentForm, - optionsCtrl = ctrls[2]; - - if (optionsCtrl) { - modelCtrl.$options = optionsCtrl.$options; - } - - modelCtrl.$$initGetterSetters(); - - // notify others, especially parent forms - formCtrl.$addControl(modelCtrl); - - attr.$observe('name', function(newValue) { - if (modelCtrl.$name !== newValue) { - modelCtrl.$$parentForm.$$renameControl(modelCtrl, newValue); - } - }); - - scope.$on('$destroy', function() { - modelCtrl.$$parentForm.$removeControl(modelCtrl); - }); - }, - post: function ngModelPostLink(scope, element, attr, ctrls) { - var modelCtrl = ctrls[0]; - modelCtrl.$$setUpdateOnEvents(); - - function setTouched() { - modelCtrl.$setTouched(); - } - - element.on('blur', function() { - if (modelCtrl.$touched) return; - - if ($rootScope.$$phase) { - scope.$evalAsync(setTouched); - } else { - scope.$apply(setTouched); - } - }); - } - }; - } - }; -}]; - -/* exported defaultModelOptions */ -var defaultModelOptions; -var DEFAULT_REGEXP = /(\s+|^)default(\s+|$)/; - -/** - * @ngdoc type - * @name ModelOptions - * @description - * A container for the options set by the {@link ngModelOptions} directive - */ -function ModelOptions(options) { - this.$$options = options; -} - -ModelOptions.prototype = { - - /** - * @ngdoc method - * @name ModelOptions#getOption - * @param {string} name the name of the option to retrieve - * @returns {*} the value of the option - * @description - * Returns the value of the given option - */ - getOption: function(name) { - return this.$$options[name]; - }, - - /** - * @ngdoc method - * @name ModelOptions#createChild - * @param {Object} options a hash of options for the new child that will override the parent's options - * @return {ModelOptions} a new `ModelOptions` object initialized with the given options. - */ - createChild: function(options) { - var inheritAll = false; - - // make a shallow copy - options = extend({}, options); - - // Inherit options from the parent if specified by the value `"$inherit"` - forEach(options, /** @this */ function(option, key) { - if (option === '$inherit') { - if (key === '*') { - inheritAll = true; - } else { - options[key] = this.$$options[key]; - // `updateOn` is special so we must also inherit the `updateOnDefault` option - if (key === 'updateOn') { - options.updateOnDefault = this.$$options.updateOnDefault; - } - } - } else { - if (key === 'updateOn') { - // If the `updateOn` property contains the `default` event then we have to remove - // it from the event list and set the `updateOnDefault` flag. - options.updateOnDefault = false; - options[key] = trim(option.replace(DEFAULT_REGEXP, function() { - options.updateOnDefault = true; - return ' '; - })); - } - } - }, this); - - if (inheritAll) { - // We have a property of the form: `"*": "$inherit"` - delete options['*']; - defaults(options, this.$$options); - } - - // Finally add in any missing defaults - defaults(options, defaultModelOptions.$$options); - - return new ModelOptions(options); - } -}; - - -defaultModelOptions = new ModelOptions({ - updateOn: '', - updateOnDefault: true, - debounce: 0, - getterSetter: false, - allowInvalid: false, - timezone: null -}); - - -/** - * @ngdoc directive - * @name ngModelOptions - * @restrict A - * @priority 10 - * - * @description - * This directive allows you to modify the behaviour of {@link ngModel} directives within your - * application. You can specify an `ngModelOptions` directive on any element. All {@link ngModel} - * directives will use the options of their nearest `ngModelOptions` ancestor. - * - * The `ngModelOptions` settings are found by evaluating the value of the attribute directive as - * an AngularJS expression. This expression should evaluate to an object, whose properties contain - * the settings. For example: `
- *
- * - *
- *
- * ``` - * - * the `input` element will have the following settings - * - * ```js - * { allowInvalid: true, updateOn: 'default', debounce: 0 } - * ``` - * - * Notice that the `debounce` setting was not inherited and used the default value instead. - * - * You can specify that all undefined settings are automatically inherited from an ancestor by - * including a property with key of `"*"` and value of `"$inherit"`. - * - * For example given the following fragment of HTML - * - * - * ```html - *
- *
- * - *
- *
- * ``` - * - * the `input` element will have the following settings - * - * ```js - * { allowInvalid: true, updateOn: 'default', debounce: 200 } - * ``` - * - * Notice that the `debounce` setting now inherits the value from the outer `
` element. - * - * If you are creating a reusable component then you should be careful when using `"*": "$inherit"` - * since you may inadvertently inherit a setting in the future that changes the behavior of your component. - * - * - * ## Triggering and debouncing model updates - * - * The `updateOn` and `debounce` properties allow you to specify a custom list of events that will - * trigger a model update and/or a debouncing delay so that the actual update only takes place when - * a timer expires; this timer will be reset after another change takes place. - * - * Given the nature of `ngModelOptions`, the value displayed inside input fields in the view might - * be different from the value in the actual model. This means that if you update the model you - * should also invoke {@link ngModel.NgModelController#$rollbackViewValue} on the relevant input field in - * order to make sure it is synchronized with the model and that any debounced action is canceled. - * - * The easiest way to reference the control's {@link ngModel.NgModelController#$rollbackViewValue} - * method is by making sure the input is placed inside a form that has a `name` attribute. This is - * important because `form` controllers are published to the related scope under the name in their - * `name` attribute. - * - * Any pending changes will take place immediately when an enclosing form is submitted via the - * `submit` event. Note that `ngClick` events will occur before the model is updated. Use `ngSubmit` - * to have access to the updated model. - * - * ### Overriding immediate updates - * - * The following example shows how to override immediate updates. Changes on the inputs within the - * form will update the model only when the control loses focus (blur event). If `escape` key is - * pressed while the input field is focused, the value is reset to the value in the current model. - * - * - * - *
- *
- *
- *
- *
- *
user.name = 
- *
- *
- * - * angular.module('optionsExample', []) - * .controller('ExampleController', ['$scope', function($scope) { - * $scope.user = { name: 'say', data: '' }; - * - * $scope.cancel = function(e) { - * if (e.keyCode === 27) { - * $scope.userForm.userName.$rollbackViewValue(); - * } - * }; - * }]); - * - * - * var model = element(by.binding('user.name')); - * var input = element(by.model('user.name')); - * var other = element(by.model('user.data')); - * - * it('should allow custom events', function() { - * input.sendKeys(' hello'); - * input.click(); - * expect(model.getText()).toEqual('say'); - * other.click(); - * expect(model.getText()).toEqual('say hello'); - * }); - * - * it('should $rollbackViewValue when model changes', function() { - * input.sendKeys(' hello'); - * expect(input.getAttribute('value')).toEqual('say hello'); - * input.sendKeys(protractor.Key.ESCAPE); - * expect(input.getAttribute('value')).toEqual('say'); - * other.click(); - * expect(model.getText()).toEqual('say'); - * }); - * - *
- * - * ### Debouncing updates - * - * The next example shows how to debounce model changes. Model will be updated only 1 sec after last change. - * If the `Clear` button is pressed, any debounced action is canceled and the value becomes empty. - * - * - * - *
- *
- * Name: - * - *
- *
- *
user.name = 
- *
- *
- * - * angular.module('optionsExample', []) - * .controller('ExampleController', ['$scope', function($scope) { - * $scope.user = { name: 'say' }; - * }]); - * - *
- * - * ### Default events, extra triggers, and catch-all debounce values - * - * This example shows the relationship between "default" update events and - * additional `updateOn` triggers. - * - * `default` events are those that are bound to the control, and when fired, update the `$viewValue` - * via {@link ngModel.NgModelController#$setViewValue $setViewValue}. Every event that is not listed - * in `updateOn` is considered a "default" event, since different control types have different - * default events. - * - * The control in this example updates by "default", "click", and "blur", with different `debounce` - * values. You can see that "click" doesn't have an individual `debounce` value - - * therefore it uses the `*` debounce value. - * - * There is also a button that calls {@link ngModel.NgModelController#$setViewValue $setViewValue} - * directly with a "custom" event. Since "custom" is not defined in the `updateOn` list, - * it is considered a "default" event and will update the - * control if "default" is defined in `updateOn`, and will receive the "default" debounce value. - * Note that this is just to illustrate how custom controls would possibly call `$setViewValue`. - * - * You can change the `updateOn` and `debounce` configuration to test different scenarios. This - * is done with {@link ngModel.NgModelController#$overrideModelOptions $overrideModelOptions}. - * - - - - - - angular.module('optionsExample', []) - .component('modelUpdateDemo', { - templateUrl: 'template.html', - controller: function() { - this.name = 'Chinua'; - - this.options = { - updateOn: 'default blur click', - debounce: { - default: 2000, - blur: 0, - '*': 1000 - } - }; - - this.updateEvents = function() { - var eventList = this.options.updateOn.split(' '); - eventList.push('*'); - var events = {}; - - for (var i = 0; i < eventList.length; i++) { - events[eventList[i]] = this.options.debounce[eventList[i]]; - } - - this.events = events; - }; - - this.updateOptions = function() { - var options = angular.extend(this.options, { - updateOn: Object.keys(this.events).join(' ').replace('*', ''), - debounce: this.events - }); - - this.form.input.$overrideModelOptions(options); - }; - - // Initialize the event form - this.updateEvents(); - } - }); - - -
- Input: -
- Model: {{$ctrl.name}} -
- - -
-
- updateOn
- - - - - - - - - - - -
OptionDebounce value
{{key}}
- -
- -
-
-
- * - * - * ## Model updates and validation - * - * The default behaviour in `ngModel` is that the model value is set to `undefined` when the - * validation determines that the value is invalid. By setting the `allowInvalid` property to true, - * the model will still be updated even if the value is invalid. - * - * - * ## Connecting to the scope - * - * By setting the `getterSetter` property to true you are telling ngModel that the `ngModel` expression - * on the scope refers to a "getter/setter" function rather than the value itself. - * - * The following example shows how to bind to getter/setters: - * - * - * - *
- *
- * - *
- *
user.name = 
- *
- *
- * - * angular.module('getterSetterExample', []) - * .controller('ExampleController', ['$scope', function($scope) { - * var _name = 'Brian'; - * $scope.user = { - * name: function(newName) { - * return angular.isDefined(newName) ? (_name = newName) : _name; - * } - * }; - * }]); - * - *
- * - * - * ## Programmatically changing options - * - * The `ngModelOptions` expression is only evaluated once when the directive is linked; it is not - * watched for changes. However, it is possible to override the options on a single - * {@link ngModel.NgModelController} instance with - * {@link ngModel.NgModelController#$overrideModelOptions `NgModelController#$overrideModelOptions()`}. - * See also the example for - * {@link ngModelOptions#default-events-extra-triggers-and-catch-all-debounce-values - * Default events, extra triggers, and catch-all debounce values}. - * - * - * ## Specifying timezones - * - * You can specify the timezone that date/time input directives expect by providing its name in the - * `timezone` property. - * - * - * ## Formatting the value of `time` and `datetime-local` - * - * With the options `timeSecondsFormat` and `timeStripZeroSeconds` it is possible to adjust the value - * that is displayed in the control. Note that browsers may apply their own formatting - * in the user interface. - * - - - - - - angular.module('timeExample', []) - .component('timeExample', { - templateUrl: 'timeExample.html', - controller: function() { - this.time = new Date(1970, 0, 1, 14, 57, 0); - - this.options = { - timeSecondsFormat: 'ss', - timeStripZeroSeconds: true - }; - - this.optionChange = function() { - this.timeForm.timeFormatted.$overrideModelOptions(this.options); - this.time = new Date(this.time); - }; - } - }); - - -
- Default: -
- With options: - -
- - Options:
- timeSecondsFormat: - -
- timeStripZeroSeconds: - -
-
- *
- * - * @param {Object} ngModelOptions options to apply to {@link ngModel} directives on this element and - * and its descendents. - * - * **General options**: - * - * - `updateOn`: string specifying which event should the input be bound to. You can set several - * events using an space delimited list. There is a special event called `default` that - * matches the default events belonging to the control. These are the events that are bound to - * the control, and when fired, update the `$viewValue` via `$setViewValue`. - * - * `ngModelOptions` considers every event that is not listed in `updateOn` a "default" event, - * since different control types use different default events. - * - * See also the section {@link ngModelOptions#triggering-and-debouncing-model-updates - * Triggering and debouncing model updates}. - * - * - `debounce`: integer value which contains the debounce model update value in milliseconds. A - * value of 0 triggers an immediate update. If an object is supplied instead, you can specify a - * custom value for each event. For example: - * ``` - * ng-model-options="{ - * updateOn: 'default blur', - * debounce: { 'default': 500, 'blur': 0 } - * }" - * ``` - * You can use the `*` key to specify a debounce value that applies to all events that are not - * specifically listed. In the following example, `mouseup` would have a debounce delay of 1000: - * ``` - * ng-model-options="{ - * updateOn: 'default blur mouseup', - * debounce: { 'default': 500, 'blur': 0, '*': 1000 } - * }" - * ``` - * - `allowInvalid`: boolean value which indicates that the model can be set with values that did - * not validate correctly instead of the default behavior of setting the model to undefined. - * - `getterSetter`: boolean value which determines whether or not to treat functions bound to - * `ngModel` as getters/setters. - * - * - * **Input-type specific options**: - * - * - `timezone`: Defines the timezone to be used to read/write the `Date` instance in the model for - * ``, ``, ... . It understands UTC/GMT and the - * continental US time zone abbreviations, but for general use, use a time zone offset, for - * example, `'+0430'` (4 hours, 30 minutes east of the Greenwich meridian) - * If not specified, the timezone of the browser will be used. - * Note that changing the timezone will have no effect on the current date, and is only applied after - * the next input / model change. - * - * - `timeSecondsFormat`: Defines if the `time` and `datetime-local` types should show seconds and - * milliseconds. The option follows the format string of {@link date date filter}. - * By default, the options is `undefined` which is equal to `'ss.sss'` (seconds and milliseconds). - * The other options are `'ss'` (strips milliseconds), and `''` (empty string), which strips both - * seconds and milliseconds. - * Note that browsers that support `time` and `datetime-local` require the hour and minutes - * part of the time string, and may show the value differently in the user interface. - * {@link ngModelOptions#formatting-the-value-of-time-and-datetime-local- See the example}. - * - * - `timeStripZeroSeconds`: Defines if the `time` and `datetime-local` types should strip the - * seconds and milliseconds from the formatted value if they are zero. This option is applied - * after `timeSecondsFormat`. - * This option can be used to make the formatting consistent over different browsers, as some - * browsers with support for `time` will natively hide the milliseconds and - * seconds if they are zero, but others won't, and browsers that don't implement these input - * types will always show the full string. - * {@link ngModelOptions#formatting-the-value-of-time-and-datetime-local- See the example}. - * - */ -var ngModelOptionsDirective = function() { - NgModelOptionsController.$inject = ['$attrs', '$scope']; - function NgModelOptionsController($attrs, $scope) { - this.$$attrs = $attrs; - this.$$scope = $scope; - } - NgModelOptionsController.prototype = { - $onInit: function() { - var parentOptions = this.parentCtrl ? this.parentCtrl.$options : defaultModelOptions; - var modelOptionsDefinition = this.$$scope.$eval(this.$$attrs.ngModelOptions); - - this.$options = parentOptions.createChild(modelOptionsDefinition); - } - }; - - return { - restrict: 'A', - // ngModelOptions needs to run before ngModel and input directives - priority: 10, - require: {parentCtrl: '?^^ngModelOptions'}, - bindToController: true, - controller: NgModelOptionsController - }; -}; - - -// shallow copy over values from `src` that are not already specified on `dst` -function defaults(dst, src) { - forEach(src, function(value, key) { - if (!isDefined(dst[key])) { - dst[key] = value; - } - }); -} - -/** - * @ngdoc directive - * @name ngNonBindable - * @restrict AC - * @priority 1000 - * @element ANY - * - * @description - * The `ngNonBindable` directive tells AngularJS not to compile or bind the contents of the current - * DOM element, including directives on the element itself that have a lower priority than - * `ngNonBindable`. This is useful if the element contains what appears to be AngularJS directives - * and bindings but which should be ignored by AngularJS. This could be the case if you have a site - * that displays snippets of code, for instance. - * - * @example - * In this example there are two locations where a simple interpolation binding (`{{}}`) is present, - * but the one wrapped in `ngNonBindable` is left alone. - * - - -
Normal: {{1 + 2}}
-
Ignored: {{1 + 2}}
-
- - it('should check ng-non-bindable', function() { - expect(element(by.binding('1 + 2')).getText()).toContain('3'); - expect(element.all(by.css('div')).last().getText()).toMatch(/1 \+ 2/); - }); - -
- */ -var ngNonBindableDirective = ngDirective({ terminal: true, priority: 1000 }); - -/* exported ngOptionsDirective */ - -/* global jqLiteRemove */ - -var ngOptionsMinErr = minErr('ngOptions'); - -/** - * @ngdoc directive - * @name ngOptions - * @restrict A - * - * @description - * - * The `ngOptions` attribute can be used to dynamically generate a list of `` - * DOM element. - * * `disable`: The result of this expression will be used to disable the rendered `
").append(a).html();try{return a[0].nodeType===Pa?K(b):b.match(/^(<[^>]+>)/)[1].replace(/^<([\w-]+)/,function(a,b){return"<"+K(b)})}catch(d){return K(b)}}function Tc(a){try{return decodeURIComponent(a)}catch(b){}}function gc(a){var b={};r((a||"").split("&"), -function(a){var c,e,f;a&&(e=a=a.replace(/\+/g,"%20"),c=a.indexOf("="),-1!==c&&(e=a.substring(0,c),f=a.substring(c+1)),e=Tc(e),w(e)&&(f=w(f)?Tc(f):!0,ta.call(b,e)?H(b[e])?b[e].push(f):b[e]=[b[e],f]:b[e]=f))});return b}function ye(a){var b=[];r(a,function(a,c){H(a)?r(a,function(a){b.push(ba(c,!0)+(!0===a?"":"="+ba(a,!0)))}):b.push(ba(c,!0)+(!0===a?"":"="+ba(a,!0)))});return b.length?b.join("&"):""}function hc(a){return ba(a,!0).replace(/%26/gi,"&").replace(/%3D/gi,"=").replace(/%2B/gi,"+")}function ba(a, -b){return encodeURIComponent(a).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%3B/gi,";").replace(/%20/g,b?"%20":"+")}function ze(a,b){var d,c,e=Qa.length;for(c=0;c protocol indicates an extension, document.location.href does not match."))}function Uc(a,b,d){D(d)||(d={});d=S({strictDi:!1},d);var c=function(){a=x(a);if(a.injector()){var c=a[0]===C.document?"document":za(a);throw pa("btstrpd",c.replace(//,">"));}b=b||[];b.unshift(["$provide",function(b){b.value("$rootElement",a)}]);d.debugInfoEnabled&&b.push(["$compileProvider", -function(a){a.debugInfoEnabled(!0)}]);b.unshift("ng");c=fb(b,d.strictDi);c.invoke(["$rootScope","$rootElement","$compile","$injector",function(a,b,c,d){a.$apply(function(){b.data("$injector",d);c(b)(a)})}]);return c},e=/^NG_ENABLE_DEBUG_INFO!/,f=/^NG_DEFER_BOOTSTRAP!/;C&&e.test(C.name)&&(d.debugInfoEnabled=!0,C.name=C.name.replace(e,""));if(C&&!f.test(C.name))return c();C.name=C.name.replace(f,"");ca.resumeBootstrap=function(a){r(a,function(a){b.push(a)});return c()};B(ca.resumeDeferredBootstrap)&& -ca.resumeDeferredBootstrap()}function Ce(){C.name="NG_ENABLE_DEBUG_INFO!"+C.name;C.location.reload()}function De(a){a=ca.element(a).injector();if(!a)throw pa("test");return a.get("$$testability")}function Vc(a,b){b=b||"_";return a.replace(Ee,function(a,c){return(c?b:"")+a.toLowerCase()})}function Fe(){var a;if(!Wc){var b=qb();(rb=z(b)?C.jQuery:b?C[b]:void 0)&&rb.fn.on?(x=rb,S(rb.fn,{scope:Wa.scope,isolateScope:Wa.isolateScope,controller:Wa.controller,injector:Wa.injector,inheritedData:Wa.inheritedData})): -x=Y;a=x.cleanData;x.cleanData=function(b){for(var c,e=0,f;null!=(f=b[e]);e++)(c=(x._data(f)||{}).events)&&c.$destroy&&x(f).triggerHandler("$destroy");a(b)};ca.element=x;Wc=!0}}function gb(a,b,d){if(!a)throw pa("areq",b||"?",d||"required");return a}function sb(a,b,d){d&&H(a)&&(a=a[a.length-1]);gb(B(a),b,"not a function, got "+(a&&"object"===typeof a?a.constructor.name||"Object":typeof a));return a}function Ja(a,b){if("hasOwnProperty"===a)throw pa("badname",b);}function Ge(a,b,d){if(!b)return a;b=b.split("."); -for(var c,e=a,f=b.length,g=0;g")+c[2];for(c=c[0];c--;)d=d.lastChild;f=db(f,d.childNodes);d=e.firstChild;d.textContent=""}else f.push(b.createTextNode(a));e.textContent="";e.innerHTML="";r(f,function(a){e.appendChild(a)});return e}function Y(a){if(a instanceof Y)return a;var b;A(a)&&(a=U(a),b=!0);if(!(this instanceof Y)){if(b&&"<"!==a.charAt(0))throw nc("nosel");return new Y(a)}if(b){b= -C.document;var d;a=(d=og.exec(a))?[b.createElement(d[1])]:(d=ed(a,b))?d.childNodes:[];oc(this,a)}else B(a)?fd(a):oc(this,a)}function pc(a){return a.cloneNode(!0)}function yb(a,b){!b&&lc(a)&&x.cleanData([a]);a.querySelectorAll&&x.cleanData(a.querySelectorAll("*"))}function gd(a){for(var b in a)return!1;return!0}function hd(a){var b=a.ng339,d=b&&Ka[b],c=d&&d.events,d=d&&d.data;d&&!gd(d)||c&&!gd(c)||(delete Ka[b],a.ng339=void 0)}function id(a,b,d,c){if(w(c))throw nc("offargs");var e=(c=zb(a))&&c.events, -f=c&&c.handle;if(f){if(b){var g=function(b){var c=e[b];w(d)&&cb(c||[],d);w(d)&&c&&0l&&this.remove(n.key);return b}},get:function(a){if(l";b=Fa.firstChild.attributes;var d=b[0];b.removeNamedItem(d.name);d.value=c;a.attributes.setNamedItem(d)}function sa(a,b){try{a.addClass(b)}catch(c){}} -function da(a,b,c,d,e){a instanceof x||(a=x(a));var f=Xa(a,b,a,c,d,e);da.$$addScopeClass(a);var g=null;return function(b,c,d){if(!a)throw $("multilink");gb(b,"scope");e&&e.needsNewScope&&(b=b.$parent.$new());d=d||{};var h=d.parentBoundTranscludeFn,k=d.transcludeControllers;d=d.futureParentElement;h&&h.$$boundTransclude&&(h=h.$$boundTransclude);g||(g=(d=d&&d[0])?"foreignobject"!==ua(d)&&la.call(d).match(/SVG/)?"svg":"html":"html");d="html"!==g?x(ja(g,x("
").append(a).html())):c?Wa.clone.call(a): -a;if(k)for(var l in k)d.data("$"+l+"Controller",k[l].instance);da.$$addScopeInfo(d,b);c&&c(d,b);f&&f(b,d,d,h);c||(a=f=null);return d}}function Xa(a,b,c,d,e,f){function g(a,c,d,e){var f,k,l,m,p,I,t;if(n)for(t=Array(c.length),m=0;mu.priority)break;if(O=u.scope)u.templateUrl||(D(O)?(ba("new/isolated scope",s||t,u,y),s=u):ba("new/isolated scope",s,u,y)),t=t||u;Q=u.name;if(!ma&&(u.replace&&(u.templateUrl||u.template)||u.transclude&&!u.$$tlb)){for(O=sa+1;ma=a[O++];)if(ma.transclude&&!ma.$$tlb||ma.replace&&(ma.templateUrl||ma.template)){Ib=!0;break}ma=!0}!u.templateUrl&&u.controller&&(J=J||T(),ba("'"+Q+"' controller", -J[Q],u,y),J[Q]=u);if(O=u.transclude)if(G=!0,u.$$tlb||(ba("transclusion",L,u,y),L=u),"element"===O)N=!0,n=u.priority,M=y,y=d.$$element=x(da.$$createComment(Q,d[Q])),b=y[0],pa(f,Ha.call(M,0),b),R=Z(Ib,M,e,n,g&&g.name,{nonTlbTranscludeDirective:L});else{var ka=T();if(D(O)){M=C.document.createDocumentFragment();var Xa=T(),F=T();r(O,function(a,b){var c="?"===a.charAt(0);a=c?a.substring(1):a;Xa[a]=b;ka[b]=null;F[b]=c});r(y.contents(),function(a){var b=Xa[wa(ua(a))];b?(F[b]=!0,ka[b]=ka[b]||C.document.createDocumentFragment(), -ka[b].appendChild(a)):M.appendChild(a)});r(F,function(a,b){if(!a)throw $("reqslot",b);});for(var K in ka)ka[K]&&(R=x(ka[K].childNodes),ka[K]=Z(Ib,R,e));M=x(M.childNodes)}else M=x(pc(b)).contents();y.empty();R=Z(Ib,M,e,void 0,void 0,{needsNewScope:u.$$isolateScope||u.$$newScope});R.$$slots=ka}if(u.template)if(P=!0,ba("template",v,u,y),v=u,O=B(u.template)?u.template(y,d):u.template,O=Na(O),u.replace){g=u;M=mc.test(O)?rd(ja(u.templateNamespace,U(O))):[];b=M[0];if(1!==M.length||1!==b.nodeType)throw $("tplrt", -Q,"");pa(f,y,b);A={$attr:{}};O=sc(b,[],A);var Dg=a.splice(sa+1,a.length-(sa+1));(s||t)&&fa(O,s,t);a=a.concat(O).concat(Dg);ga(d,A);A=a.length}else y.html(O);if(u.templateUrl)P=!0,ba("template",v,u,y),v=u,u.replace&&(g=u),p=ha(a.splice(sa,a.length-sa),y,d,f,G&&R,h,k,{controllerDirectives:J,newScopeDirective:t!==u&&t,newIsolateScopeDirective:s,templateDirective:v,nonTlbTranscludeDirective:L}),A=a.length;else if(u.compile)try{q=u.compile(y,d,R);var X=u.$$originalDirective||u;B(q)?m(null,Va(X,q),E,ib): -q&&m(Va(X,q.pre),Va(X,q.post),E,ib)}catch(ca){c(ca,za(y))}u.terminal&&(p.terminal=!0,n=Math.max(n,u.priority))}p.scope=t&&!0===t.scope;p.transcludeOnThisElement=G;p.templateOnThisElement=P;p.transclude=R;l.hasElementTranscludeDirective=N;return p}function W(a,b,c,d){var e;if(A(b)){var f=b.match(l);b=b.substring(f[0].length);var g=f[1]||f[3],f="?"===f[2];"^^"===g?c=c.parent():e=(e=d&&d[b])&&e.instance;if(!e){var h="$"+b+"Controller";e="^^"===g&&c[0]&&9===c[0].nodeType?null:g?c.inheritedData(h):c.data(h)}if(!e&& -!f)throw $("ctreq",b,a);}else if(H(b))for(e=[],g=0,f=b.length;gc.priority)&&-1!==c.restrict.indexOf(e)){k&&(c=ac(c,{$$start:k,$$end:l}));if(!c.$$bindings){var I=m=c,t=c.name,u={isolateScope:null,bindToController:null};D(I.scope)&&(!0===I.bindToController?(u.bindToController=d(I.scope,t,!0),u.isolateScope={}):u.isolateScope=d(I.scope,t,!1));D(I.bindToController)&&(u.bindToController=d(I.bindToController, -t,!0));if(u.bindToController&&!I.controller)throw $("noctrl",t);m=m.$$bindings=u;D(m.isolateScope)&&(c.$$isolateBindings=m.isolateScope)}b.push(c);m=c}}return m}function ca(b){if(f.hasOwnProperty(b))for(var c=a.get(b+"Directive"),d=0,e=c.length;d"+b+"";return c.childNodes[0].childNodes;default:return b}}function oa(a,b){if("srcdoc"===b)return u.HTML;if("src"===b||"ngSrc"===b)return-1===["img","video","audio","source","track"].indexOf(a)?u.RESOURCE_URL:u.MEDIA_URL;if("xlinkHref"===b)return"image"===a?u.MEDIA_URL: -"a"===a?u.URL:u.RESOURCE_URL;if("form"===a&&"action"===b||"base"===a&&"href"===b||"link"===a&&"href"===b)return u.RESOURCE_URL;if("a"===a&&("href"===b||"ngHref"===b))return u.URL}function xa(a,b){var c=b.toLowerCase();return v[a+"|"+c]||v["*|"+c]}function ya(a){return ma(u.valueOf(a),"ng-prop-srcset")}function Ea(a,b,c,d){if(m.test(d))throw $("nodomevents");a=ua(a);var e=xa(a,d),f=Ta;"srcset"!==d||"img"!==a&&"source"!==a?e&&(f=u.getTrusted.bind(u,e)):f=ya;b.push({priority:100,compile:function(a,b){var e= -p(b[c]),g=p(b[c],function(a){return u.valueOf(a)});return{pre:function(a,b){function c(){var g=e(a);b[0][d]=f(g)}c();a.$watch(g,c)}}}})}function Ia(a,c,d,e,f){var g=ua(a),k=oa(g,e),l=h[e]||f,p=b(d,!f,k,l);if(p){if("multiple"===e&&"select"===g)throw $("selmulti",za(a));if(m.test(e))throw $("nodomevents");c.push({priority:100,compile:function(){return{pre:function(a,c,f){c=f.$$observers||(f.$$observers=T());var g=f[e];g!==d&&(p=g&&b(g,!0,k,l),d=g);p&&(f[e]=p(a),(c[e]||(c[e]=[])).$$inter=!0,(f.$$observers&& -f.$$observers[e].$$scope||a).$watch(p,function(a,b){"class"===e&&a!==b?f.$updateClass(a,b):f.$set(e,a)}))}}}})}}function pa(a,b,c){var d=b[0],e=b.length,f=d.parentNode,g,h;if(a)for(g=0,h=a.length;g=b)return a;for(;b--;){var d=a[b];(8===d.nodeType||d.nodeType===Pa&&""===d.nodeValue.trim())&&Fg.call(a,b,1)}return a}function Bg(a,b){if(b&&A(b))return b;if(A(a)){var d=ud.exec(a);if(d)return d[3]}}function Ff(){var a={};this.has=function(b){return a.hasOwnProperty(b)};this.register=function(b,d){Ja(b, -"controller");D(b)?S(a,b):a[b]=d};this.$get=["$injector",function(b){function d(a,b,d,g){if(!a||!D(a.$scope))throw F("$controller")("noscp",g,b);a.$scope[b]=d}return function(c,e,f,g){var k,h,l;f=!0===f;g&&A(g)&&(l=g);if(A(c)){g=c.match(ud);if(!g)throw vd("ctrlfmt",c);h=g[1];l=l||g[3];c=a.hasOwnProperty(h)?a[h]:Ge(e.$scope,h,!0);if(!c)throw vd("ctrlreg",h);sb(c,h,!0)}if(f)return f=(H(c)?c[c.length-1]:c).prototype,k=Object.create(f||null),l&&d(e,l,k,h||c.name),S(function(){var a=b.invoke(c,k,e,h); -a!==k&&(D(a)||B(a))&&(k=a,l&&d(e,l,k,h||c.name));return k},{instance:k,identifier:l});k=b.instantiate(c,e,h);l&&d(e,l,k,h||c.name);return k}}]}function Gf(){this.$get=["$window",function(a){return x(a.document)}]}function Hf(){this.$get=["$document","$rootScope",function(a,b){function d(){e=c.hidden}var c=a[0],e=c&&c.hidden;a.on("visibilitychange",d);b.$on("$destroy",function(){a.off("visibilitychange",d)});return function(){return e}}]}function If(){this.$get=["$log",function(a){return function(b, -d){a.error.apply(a,arguments)}}]}function uc(a){return D(a)?ha(a)?a.toISOString():eb(a):a}function Of(){this.$get=function(){return function(a){if(!a)return"";var b=[];Oc(a,function(a,c){null===a||z(a)||B(a)||(H(a)?r(a,function(a){b.push(ba(c)+"="+ba(uc(a)))}):b.push(ba(c)+"="+ba(uc(a))))});return b.join("&")}}}function Pf(){this.$get=function(){return function(a){function b(a,e,f){H(a)?r(a,function(a,c){b(a,e+"["+(D(a)?c:"")+"]")}):D(a)&&!ha(a)?Oc(a,function(a,c){b(a,e+(f?"":"[")+c+(f?"":"]"))}): -(B(a)&&(a=a()),d.push(ba(e)+"="+(null==a?"":ba(uc(a)))))}if(!a)return"";var d=[];b(a,"",!0);return d.join("&")}}}function vc(a,b){if(A(a)){var d=a.replace(Gg,"").trim();if(d){var c=b("Content-Type"),c=c&&0===c.indexOf(wd),e;(e=c)||(e=(e=d.match(Hg))&&Ig[e[0]].test(d));if(e)try{a=Rc(d)}catch(f){if(!c)return a;throw Kb("baddata",a,f);}}}return a}function xd(a){var b=T(),d;A(a)?r(a.split("\n"),function(a){d=a.indexOf(":");var e=K(U(a.substr(0,d)));a=U(a.substr(d+1));e&&(b[e]=b[e]?b[e]+", "+a:a)}):D(a)&& -r(a,function(a,d){var f=K(d),g=U(a);f&&(b[f]=b[f]?b[f]+", "+g:g)});return b}function yd(a){var b;return function(d){b||(b=xd(a));return d?(d=b[K(d)],void 0===d&&(d=null),d):b}}function zd(a,b,d,c){if(B(c))return c(a,b,d);r(c,function(c){a=c(a,b,d)});return a}function Nf(){var a=this.defaults={transformResponse:[vc],transformRequest:[function(a){return D(a)&&"[object File]"!==la.call(a)&&"[object Blob]"!==la.call(a)&&"[object FormData]"!==la.call(a)?eb(a):a}],headers:{common:{Accept:"application/json, text/plain, */*"}, -post:ja(wc),put:ja(wc),patch:ja(wc)},xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",paramSerializer:"$httpParamSerializer",jsonpCallbackParam:"callback"},b=!1;this.useApplyAsync=function(a){return w(a)?(b=!!a,this):b};var d=this.interceptors=[],c=this.xsrfWhitelistedOrigins=[];this.$get=["$browser","$httpBackend","$$cookieReader","$cacheFactory","$rootScope","$q","$injector","$sce",function(e,f,g,k,h,l,m,p){function n(b){function c(a,b){for(var d=0,e=b.length;da?b:l.reject(b)}if(!D(b))throw F("$http")("badreq",b);if(!A(p.valueOf(b.url)))throw F("$http")("badreq",b.url);var g=S({method:"get",transformRequest:a.transformRequest,transformResponse:a.transformResponse,paramSerializer:a.paramSerializer,jsonpCallbackParam:a.jsonpCallbackParam}, -b);g.headers=function(b){var c=a.headers,e=S({},b.headers),f,g,h,c=S({},c.common,c[K(b.method)]);a:for(f in c){g=K(f);for(h in e)if(K(h)===g)continue a;e[f]=c[f]}return d(e,ja(b))}(b);g.method=ub(g.method);g.paramSerializer=A(g.paramSerializer)?m.get(g.paramSerializer):g.paramSerializer;e.$$incOutstandingRequestCount("$http");var h=[],k=[];b=l.resolve(g);r(v,function(a){(a.request||a.requestError)&&h.unshift(a.request,a.requestError);(a.response||a.responseError)&&k.push(a.response,a.responseError)}); -b=c(b,h);b=b.then(function(b){var c=b.headers,d=zd(b.data,yd(c),void 0,b.transformRequest);z(d)&&r(c,function(a,b){"content-type"===K(b)&&delete c[b]});z(b.withCredentials)&&!z(a.withCredentials)&&(b.withCredentials=a.withCredentials);return s(b,d).then(f,f)});b=c(b,k);return b=b.finally(function(){e.$$completeOutstandingRequest(E,"$http")})}function s(c,d){function e(a){if(a){var c={};r(a,function(a,d){c[d]=function(c){function d(){a(c)}b?h.$applyAsync(d):h.$$phase?d():h.$apply(d)}});return c}}function k(a, -c,d,e,f){function g(){m(c,a,d,e,f)}R&&(200<=a&&300>a?R.put(O,[a,c,xd(d),e,f]):R.remove(O));b?h.$applyAsync(g):(g(),h.$$phase||h.$apply())}function m(a,b,d,e,f){b=-1<=b?b:0;(200<=b&&300>b?L.resolve:L.reject)({data:a,status:b,headers:yd(d),config:c,statusText:e,xhrStatus:f})}function s(a){m(a.data,a.status,ja(a.headers()),a.statusText,a.xhrStatus)}function v(){var a=n.pendingRequests.indexOf(c);-1!==a&&n.pendingRequests.splice(a,1)}var L=l.defer(),u=L.promise,R,q,ma=c.headers,x="jsonp"===K(c.method), -O=c.url;x?O=p.getTrustedResourceUrl(O):A(O)||(O=p.valueOf(O));O=G(O,c.paramSerializer(c.params));x&&(O=t(O,c.jsonpCallbackParam));n.pendingRequests.push(c);u.then(v,v);!c.cache&&!a.cache||!1===c.cache||"GET"!==c.method&&"JSONP"!==c.method||(R=D(c.cache)?c.cache:D(a.cache)?a.cache:N);R&&(q=R.get(O),w(q)?q&&B(q.then)?q.then(s,s):H(q)?m(q[1],q[0],ja(q[2]),q[3],q[4]):m(q,200,{},"OK","complete"):R.put(O,u));z(q)&&((q=jc(c.url)?g()[c.xsrfCookieName||a.xsrfCookieName]:void 0)&&(ma[c.xsrfHeaderName||a.xsrfHeaderName]= -q),f(c.method,O,d,k,ma,c.timeout,c.withCredentials,c.responseType,e(c.eventHandlers),e(c.uploadEventHandlers)));return u}function G(a,b){0=h&&(t.resolve(s),f(r.$$intervalId));G||c.$apply()},k,t,G);return r}}}]}function Ad(a,b){var d=ga(a);b.$$protocol=d.protocol;b.$$host=d.hostname;b.$$port=fa(d.port)||Mg[d.protocol]||null}function Bd(a,b,d){if(Ng.test(a))throw jb("badpath",a);var c="/"!==a.charAt(0);c&&(a="/"+a);a=ga(a);for(var c=(c&&"/"===a.pathname.charAt(0)?a.pathname.substring(1):a.pathname).split("/"),e=c.length;e--;)c[e]=decodeURIComponent(c[e]),d&&(c[e]=c[e].replace(/\//g,"%2F"));d=c.join("/");b.$$path=d;b.$$search=gc(a.search); -b.$$hash=decodeURIComponent(a.hash);b.$$path&&"/"!==b.$$path.charAt(0)&&(b.$$path="/"+b.$$path)}function xc(a,b){return a.slice(0,b.length)===b}function xa(a,b){if(xc(b,a))return b.substr(a.length)}function Da(a){var b=a.indexOf("#");return-1===b?a:a.substr(0,b)}function yc(a,b,d){this.$$html5=!0;d=d||"";Ad(a,this);this.$$parse=function(a){var d=xa(b,a);if(!A(d))throw jb("ipthprfx",a,b);Bd(d,this,!0);this.$$path||(this.$$path="/");this.$$compose()};this.$$normalizeUrl=function(a){return b+a.substr(1)}; -this.$$parseLinkUrl=function(c,e){if(e&&"#"===e[0])return this.hash(e.slice(1)),!0;var f,g;w(f=xa(a,c))?(g=f,g=d&&w(f=xa(d,f))?b+(xa("/",f)||f):a+g):w(f=xa(b,c))?g=b+f:b===c+"/"&&(g=b);g&&this.$$parse(g);return!!g}}function zc(a,b,d){Ad(a,this);this.$$parse=function(c){var e=xa(a,c)||xa(b,c),f;z(e)||"#"!==e.charAt(0)?this.$$html5?f=e:(f="",z(e)&&(a=c,this.replace())):(f=xa(d,e),z(f)&&(f=e));Bd(f,this,!1);c=this.$$path;var e=a,g=/^\/[A-Z]:(\/.*)/;xc(f,e)&&(f=f.replace(e,""));g.exec(f)||(c=(f=g.exec(c))? -f[1]:c);this.$$path=c;this.$$compose()};this.$$normalizeUrl=function(b){return a+(b?d+b:"")};this.$$parseLinkUrl=function(b,d){return Da(a)===Da(b)?(this.$$parse(b),!0):!1}}function Cd(a,b,d){this.$$html5=!0;zc.apply(this,arguments);this.$$parseLinkUrl=function(c,e){if(e&&"#"===e[0])return this.hash(e.slice(1)),!0;var f,g;a===Da(c)?f=c:(g=xa(b,c))?f=a+d+g:b===c+"/"&&(f=b);f&&this.$$parse(f);return!!f};this.$$normalizeUrl=function(b){return a+d+b}}function Lb(a){return function(){return this[a]}}function Dd(a, -b){return function(d){if(z(d))return this[a];this[a]=b(d);this.$$compose();return this}}function Tf(){var a="!",b={enabled:!1,requireBase:!0,rewriteLinks:!0};this.hashPrefix=function(b){return w(b)?(a=b,this):a};this.html5Mode=function(a){if(Ga(a))return b.enabled=a,this;if(D(a)){Ga(a.enabled)&&(b.enabled=a.enabled);Ga(a.requireBase)&&(b.requireBase=a.requireBase);if(Ga(a.rewriteLinks)||A(a.rewriteLinks))b.rewriteLinks=a.rewriteLinks;return this}return b};this.$get=["$rootScope","$browser","$sniffer", -"$rootElement","$window",function(d,c,e,f,g){function k(a,b){return a===b||ga(a).href===ga(b).href}function h(a,b,d){var e=m.url(),f=m.$$state;try{c.url(a,b,d),m.$$state=c.state()}catch(g){throw m.url(e),m.$$state=f,g;}}function l(a,b){d.$broadcast("$locationChangeSuccess",m.absUrl(),a,m.$$state,b)}var m,p;p=c.baseHref();var n=c.url(),s;if(b.enabled){if(!p&&b.requireBase)throw jb("nobase");s=n.substring(0,n.indexOf("/",n.indexOf("//")+2))+(p||"/");p=e.history?yc:Cd}else s=Da(n),p=zc;var r=s.substr(0, -Da(s).lastIndexOf("/")+1);m=new p(s,r,"#"+a);m.$$parseLinkUrl(n,n);m.$$state=c.state();var t=/^\s*(javascript|mailto):/i;f.on("click",function(a){var e=b.rewriteLinks;if(e&&!a.ctrlKey&&!a.metaKey&&!a.shiftKey&&2!==a.which&&2!==a.button){for(var g=x(a.target);"a"!==ua(g[0]);)if(g[0]===f[0]||!(g=g.parent())[0])return;if(!A(e)||!z(g.attr(e))){var e=g.prop("href"),h=g.attr("href")||g.attr("xlink:href");D(e)&&"[object SVGAnimatedString]"===e.toString()&&(e=ga(e.animVal).href);t.test(e)||!e||g.attr("target")|| -a.isDefaultPrevented()||!m.$$parseLinkUrl(e,h)||(a.preventDefault(),m.absUrl()!==c.url()&&d.$apply())}}});m.absUrl()!==n&&c.url(m.absUrl(),!0);var N=!0;c.onUrlChange(function(a,b){xc(a,r)?(d.$evalAsync(function(){var c=m.absUrl(),e=m.$$state,f;m.$$parse(a);m.$$state=b;f=d.$broadcast("$locationChangeStart",a,c,b,e).defaultPrevented;m.absUrl()===a&&(f?(m.$$parse(c),m.$$state=e,h(c,!1,e)):(N=!1,l(c,e)))}),d.$$phase||d.$digest()):g.location.href=a});d.$watch(function(){if(N||m.$$urlUpdatedByLocation){m.$$urlUpdatedByLocation= -!1;var a=c.url(),b=m.absUrl(),f=c.state(),g=m.$$replace,n=!k(a,b)||m.$$html5&&e.history&&f!==m.$$state;if(N||n)N=!1,d.$evalAsync(function(){var b=m.absUrl(),c=d.$broadcast("$locationChangeStart",b,a,m.$$state,f).defaultPrevented;m.absUrl()===b&&(c?(m.$$parse(a),m.$$state=f):(n&&h(b,g,f===m.$$state?null:m.$$state),l(a,f)))})}m.$$replace=!1});return m}]}function Uf(){var a=!0,b=this;this.debugEnabled=function(b){return w(b)?(a=b,this):a};this.$get=["$window",function(d){function c(a){cc(a)&&(a.stack&& -f?a=a.message&&-1===a.stack.indexOf(a.message)?"Error: "+a.message+"\n"+a.stack:a.stack:a.sourceURL&&(a=a.message+"\n"+a.sourceURL+":"+a.line));return a}function e(a){var b=d.console||{},e=b[a]||b.log||E;return function(){var a=[];r(arguments,function(b){a.push(c(b))});return Function.prototype.apply.call(e,b,a)}}var f=Ca||/\bEdge\//.test(d.navigator&&d.navigator.userAgent);return{log:e("log"),info:e("info"),warn:e("warn"),error:e("error"),debug:function(){var c=e("debug");return function(){a&&c.apply(b, -arguments)}}()}}]}function Og(a){return a+""}function Pg(a,b){return"undefined"!==typeof a?a:b}function Ed(a,b){return"undefined"===typeof a?b:"undefined"===typeof b?a:a+b}function Qg(a,b){switch(a.type){case q.MemberExpression:if(a.computed)return!1;break;case q.UnaryExpression:return 1;case q.BinaryExpression:return"+"!==a.operator?1:!1;case q.CallExpression:return!1}return void 0===b?Fd:b}function Z(a,b,d){var c,e,f=a.isPure=Qg(a,d);switch(a.type){case q.Program:c=!0;r(a.body,function(a){Z(a.expression, -b,f);c=c&&a.expression.constant});a.constant=c;break;case q.Literal:a.constant=!0;a.toWatch=[];break;case q.UnaryExpression:Z(a.argument,b,f);a.constant=a.argument.constant;a.toWatch=a.argument.toWatch;break;case q.BinaryExpression:Z(a.left,b,f);Z(a.right,b,f);a.constant=a.left.constant&&a.right.constant;a.toWatch=a.left.toWatch.concat(a.right.toWatch);break;case q.LogicalExpression:Z(a.left,b,f);Z(a.right,b,f);a.constant=a.left.constant&&a.right.constant;a.toWatch=a.constant?[]:[a];break;case q.ConditionalExpression:Z(a.test, -b,f);Z(a.alternate,b,f);Z(a.consequent,b,f);a.constant=a.test.constant&&a.alternate.constant&&a.consequent.constant;a.toWatch=a.constant?[]:[a];break;case q.Identifier:a.constant=!1;a.toWatch=[a];break;case q.MemberExpression:Z(a.object,b,f);a.computed&&Z(a.property,b,f);a.constant=a.object.constant&&(!a.computed||a.property.constant);a.toWatch=a.constant?[]:[a];break;case q.CallExpression:c=d=a.filter?!b(a.callee.name).$stateful:!1;e=[];r(a.arguments,function(a){Z(a,b,f);c=c&&a.constant;e.push.apply(e, -a.toWatch)});a.constant=c;a.toWatch=d?e:[a];break;case q.AssignmentExpression:Z(a.left,b,f);Z(a.right,b,f);a.constant=a.left.constant&&a.right.constant;a.toWatch=[a];break;case q.ArrayExpression:c=!0;e=[];r(a.elements,function(a){Z(a,b,f);c=c&&a.constant;e.push.apply(e,a.toWatch)});a.constant=c;a.toWatch=e;break;case q.ObjectExpression:c=!0;e=[];r(a.properties,function(a){Z(a.value,b,f);c=c&&a.value.constant;e.push.apply(e,a.value.toWatch);a.computed&&(Z(a.key,b,!1),c=c&&a.key.constant,e.push.apply(e, -a.key.toWatch))});a.constant=c;a.toWatch=e;break;case q.ThisExpression:a.constant=!1;a.toWatch=[];break;case q.LocalsExpression:a.constant=!1,a.toWatch=[]}}function Gd(a){if(1===a.length){a=a[0].expression;var b=a.toWatch;return 1!==b.length?b:b[0]!==a?b:void 0}}function Hd(a){return a.type===q.Identifier||a.type===q.MemberExpression}function Id(a){if(1===a.body.length&&Hd(a.body[0].expression))return{type:q.AssignmentExpression,left:a.body[0].expression,right:{type:q.NGValueParameter},operator:"="}} -function Jd(a){this.$filter=a}function Kd(a){this.$filter=a}function Mb(a,b,d){this.ast=new q(a,d);this.astCompiler=d.csp?new Kd(b):new Jd(b)}function Ac(a){return B(a.valueOf)?a.valueOf():Rg.call(a)}function Vf(){var a=T(),b={"true":!0,"false":!1,"null":null,undefined:void 0},d,c;this.addLiteral=function(a,c){b[a]=c};this.setIdentifierFns=function(a,b){d=a;c=b;return this};this.$get=["$filter",function(e){function f(b,c){var d,f;switch(typeof b){case "string":return f=b=b.trim(),d=a[f],d||(d=new Nb(G), -d=(new Mb(d,e,G)).parse(b),a[f]=p(d)),s(d,c);case "function":return s(b,c);default:return s(E,c)}}function g(a,b,c){return null==a||null==b?a===b:"object"!==typeof a||(a=Ac(a),"object"!==typeof a||c)?a===b||a!==a&&b!==b:!1}function k(a,b,c,d,e){var f=d.inputs,h;if(1===f.length){var k=g,f=f[0];return a.$watch(function(a){var b=f(a);g(b,k,f.isPure)||(h=d(a,void 0,void 0,[b]),k=b&&Ac(b));return h},b,c,e)}for(var l=[],m=[],n=0,p=f.length;n=c.$$state.status&&e&&e.length&&a(function(){for(var a,c,f=0,g=e.length;fa)for(b in l++,f)ta.call(e,b)||(t--,delete f[b])}else f!==e&&(f=e,l++);return l}}c.$$pure=g(a).literal;c.$stateful=!c.$$pure;var d=this,e,f,h,k=1r&&(z=4-r,N[z]|| -(N[z]=[]),N[z].push({msg:B(a.exp)?"fn: "+(a.exp.name||a.exp.toString()):a.exp,newVal:g,oldVal:h}));else if(a===c){s=!1;break a}}catch(E){f(E)}if(!(n=!q.$$suspended&&q.$$watchersCount&&q.$$childHead||q!==y&&q.$$nextSibling))for(;q!==y&&!(n=q.$$nextSibling);)q=q.$parent}while(q=n);if((s||w.length)&&!r--)throw v.$$phase=null,d("infdig",b,N);}while(s||w.length);for(v.$$phase=null;JCa)throw Ea("iequirks");var c=ja(V);c.isEnabled=function(){return a}; -c.trustAs=d.trustAs;c.getTrusted=d.getTrusted;c.valueOf=d.valueOf;a||(c.trustAs=c.getTrusted=function(a,b){return b},c.valueOf=Ta);c.parseAs=function(a,d){var e=b(d);return e.literal&&e.constant?e:b(d,function(b){return c.getTrusted(a,b)})};var e=c.parseAs,f=c.getTrusted,g=c.trustAs;r(V,function(a,b){var d=K(b);c[("parse_as_"+d).replace(Cc,wb)]=function(b){return e(a,b)};c[("get_trusted_"+d).replace(Cc,wb)]=function(b){return f(a,b)};c[("trust_as_"+d).replace(Cc,wb)]=function(b){return g(a,b)}}); -return c}]}function ag(){this.$get=["$window","$document",function(a,b){var d={},c=!((!a.nw||!a.nw.process)&&a.chrome&&(a.chrome.app&&a.chrome.app.runtime||!a.chrome.app&&a.chrome.runtime&&a.chrome.runtime.id))&&a.history&&a.history.pushState,e=fa((/android (\d+)/.exec(K((a.navigator||{}).userAgent))||[])[1]),f=/Boxee/i.test((a.navigator||{}).userAgent),g=b[0]||{},k=g.body&&g.body.style,h=!1,l=!1;k&&(h=!!("transition"in k||"webkitTransition"in k),l=!!("animation"in k||"webkitAnimation"in k));return{history:!(!c|| -4>e||f),hasEvent:function(a){if("input"===a&&Ca)return!1;if(z(d[a])){var b=g.createElement("div");d[a]="on"+a in b}return d[a]},csp:Aa(),transitions:h,animations:l,android:e}}]}function bg(){this.$get=ia(function(a){return new Tg(a)})}function Tg(a){function b(){var a=e.pop();return a&&a.cb}function d(a){for(var b=e.length-1;0<=b;--b){var c=e[b];if(c.type===a)return e.splice(b,1),c.cb}}var c={},e=[],f=this.ALL_TASKS_TYPE="$$all$$",g=this.DEFAULT_TASK_TYPE="$$default$$";this.completeTask=function(e, -h){h=h||g;try{e()}finally{var l;l=h||g;c[l]&&(c[l]--,c[f]--);l=c[h];var m=c[f];if(!m||!l)for(l=m?d:b;m=l(h);)try{m()}catch(p){a.error(p)}}};this.incTaskCount=function(a){a=a||g;c[a]=(c[a]||0)+1;c[f]=(c[f]||0)+1};this.notifyWhenNoPendingTasks=function(a,b){b=b||f;c[b]?e.push({type:b,cb:a}):a()}}function dg(){var a;this.httpOptions=function(b){return b?(a=b,this):a};this.$get=["$exceptionHandler","$templateCache","$http","$q","$sce",function(b,d,c,e,f){function g(k,h){g.totalPendingRequests++;if(!A(k)|| -z(d.get(k)))k=f.getTrustedResourceUrl(k);var l=c.defaults&&c.defaults.transformResponse;H(l)?l=l.filter(function(a){return a!==vc}):l===vc&&(l=null);return c.get(k,S({cache:d,transformResponse:l},a)).finally(function(){g.totalPendingRequests--}).then(function(a){return d.put(k,a.data)},function(a){h||(a=Ug("tpload",k,a.status,a.statusText),b(a));return e.reject(a)})}g.totalPendingRequests=0;return g}]}function eg(){this.$get=["$rootScope","$browser","$location",function(a,b,d){return{findBindings:function(a, -b,d){a=a.getElementsByClassName("ng-binding");var g=[];r(a,function(a){var c=ca.element(a).data("$binding");c&&r(c,function(c){d?(new RegExp("(^|\\s)"+Md(b)+"(\\s|\\||$)")).test(c)&&g.push(a):-1!==c.indexOf(b)&&g.push(a)})});return g},findModels:function(a,b,d){for(var g=["ng-","data-ng-","ng\\:"],k=0;kc&&(c=e),c+=+a.slice(e+1),a=a.substring(0,e)):0>c&&(c=a.length);for(e=0;a.charAt(e)===Ec;e++);if(e===(g=a.length))d=[0],c=1;else{for(g--;a.charAt(g)===Ec;)g--;c-=e;d=[];for(f=0;e<=g;e++,f++)d[f]=+a.charAt(e)}c>Wd&&(d=d.splice(0,Wd-1),b=c-1,c=1);return{d:d,e:b,i:c}}function dh(a,b,d,c){var e=a.d,f=e.length-a.i;b=z(b)?Math.min(Math.max(d,f),c):+b;d=b+a.i;c=e[d];if(0d-1){for(c=0;c>d;c--)e.unshift(0),a.i++;e.unshift(1);a.i++}else e[d-1]++;for(;fk;)h.unshift(0),k++;0=b.lgSize&&k.unshift(h.splice(-b.lgSize,h.length).join(""));h.length>b.gSize;)k.unshift(h.splice(-b.gSize,h.length).join(""));h.length&&k.unshift(h.join(""));h=k.join(d);f.length&&(h+=c+f.join(""));e&&(h+="e+"+e)}return 0>a&&!g?b.negPre+h+b.negSuf:b.posPre+h+b.posSuf}function Ob(a,b,d,c){var e="";if(0>a||c&&0>=a)c?a=-a+1:(a=-a,e="-");for(a=""+a;a.length-d)f+=d;0===f&&-12===d&&(f=12);return Ob(f,b,c,e)}}function kb(a,b,d){return function(c,e){var f=c["get"+a](),g=ub((d?"STANDALONE":"")+(b?"SHORT":"")+a);return e[g][f]}}function Xd(a){var b=(new Date(a,0,1)).getDay();return new Date(a,0,(4>=b?5:12)-b)}function Yd(a){return function(b){var d=Xd(b.getFullYear());b=+new Date(b.getFullYear(),b.getMonth(),b.getDate()+(4-b.getDay()))-+d;b=1+Math.round(b/6048E5);return Ob(b,a)}}function Fc(a,b){return 0>= -a.getFullYear()?b.ERAS[0]:b.ERAS[1]}function Rd(a){function b(a){var b;if(b=a.match(d)){a=new Date(0);var f=0,g=0,k=b[8]?a.setUTCFullYear:a.setFullYear,h=b[8]?a.setUTCHours:a.setHours;b[9]&&(f=fa(b[9]+b[10]),g=fa(b[9]+b[11]));k.call(a,fa(b[1]),fa(b[2])-1,fa(b[3]));f=fa(b[4]||0)-f;g=fa(b[5]||0)-g;k=fa(b[6]||0);b=Math.round(1E3*parseFloat("0."+(b[7]||0)));h.call(a,f,g,k,b)}return a}var d=/^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/;return function(c, -d,f){var g="",k=[],h,l;d=d||"mediumDate";d=a.DATETIME_FORMATS[d]||d;A(c)&&(c=eh.test(c)?fa(c):b(c));W(c)&&(c=new Date(c));if(!ha(c)||!isFinite(c.getTime()))return c;for(;d;)(l=fh.exec(d))?(k=db(k,l,1),d=k.pop()):(k.push(d),d=null);var m=c.getTimezoneOffset();f&&(m=ec(f,m),c=fc(c,f,!0));r(k,function(b){h=gh[b];g+=h?h(c,a.DATETIME_FORMATS,m):"''"===b?"'":b.replace(/(^'|'$)/g,"").replace(/''/g,"'")});return g}}function Yg(){return function(a,b){z(b)&&(b=2);return eb(a,b)}}function Zg(){return function(a, -b,d){b=Infinity===Math.abs(Number(b))?Number(b):fa(b);if(X(b))return a;W(a)&&(a=a.toString());if(!ya(a))return a;d=!d||isNaN(d)?0:fa(d);d=0>d?Math.max(0,a.length+d):d;return 0<=b?Gc(a,d,d+b):0===d?Gc(a,b,a.length):Gc(a,Math.max(0,d+b),d)}}function Gc(a,b,d){return A(a)?a.slice(b,d):Ha.call(a,b,d)}function Td(a){function b(b){return b.map(function(b){var c=1,d=Ta;if(B(b))d=b;else if(A(b)){if("+"===b.charAt(0)||"-"===b.charAt(0))c="-"===b.charAt(0)?-1:1,b=b.substring(1);if(""!==b&&(d=a(b),d.constant))var e= -d(),d=function(a){return a[e]}}return{get:d,descending:c}})}function d(a){switch(typeof a){case "number":case "boolean":case "string":return!0;default:return!1}}function c(a,b){var c=0,d=a.type,h=b.type;if(d===h){var h=a.value,l=b.value;"string"===d?(h=h.toLowerCase(),l=l.toLowerCase()):"object"===d&&(D(h)&&(h=a.index),D(l)&&(l=b.index));h!==l&&(c=hb||37<=b&&40>=b||m(a,this,this.value)});if(e.hasEvent("paste"))b.on("paste cut drop",m)}b.on("change",l);if(ce[g]&&c.$$hasNativeValidators&&g===d.type)b.on("keydown wheel mousedown",function(a){if(!h){var b=this.validity, -c=b.badInput,d=b.typeMismatch;h=f.defer(function(){h=null;b.badInput===c&&b.typeMismatch===d||l(a)})}});c.$render=function(){var a=c.$isEmpty(c.$viewValue)?"":c.$viewValue;b.val()!==a&&b.val(a)}}function Qb(a,b){return function(d,c){var e,f;if(ha(d))return d;if(A(d)){'"'===d.charAt(0)&&'"'===d.charAt(d.length-1)&&(d=d.substring(1,d.length-1));if(hh.test(d))return new Date(d);a.lastIndex=0;if(e=a.exec(d))return e.shift(),f=c?{yyyy:c.getFullYear(),MM:c.getMonth()+1,dd:c.getDate(),HH:c.getHours(),mm:c.getMinutes(), -ss:c.getSeconds(),sss:c.getMilliseconds()/1E3}:{yyyy:1970,MM:1,dd:1,HH:0,mm:0,ss:0,sss:0},r(e,function(a,c){cf.yyyy&&e.setFullYear(f.yyyy),e}return NaN}}function nb(a,b,d,c){return function(e,f,g,k,h,l,m,p){function n(a){return a&&!(a.getTime&&a.getTime()!==a.getTime())}function s(a){return w(a)&&!ha(a)?r(a)||void 0:a}function r(a,b){var c=k.$options.getOption("timezone");v&&v!==c&&(b=Sc(b,ec(v)));var e=d(a, -b);!isNaN(e)&&c&&(e=fc(e,c));return e}Ic(e,f,g,k,a);Sa(e,f,g,k,h,l);var t="time"===a||"datetimelocal"===a,q,v;k.$parsers.push(function(c){if(k.$isEmpty(c))return null;if(b.test(c))return r(c,q);k.$$parserName=a});k.$formatters.push(function(a){if(a&&!ha(a))throw ob("datefmt",a);if(n(a)){q=a;var b=k.$options.getOption("timezone");b&&(v=b,q=fc(q,b,!0));var d=c;t&&A(k.$options.getOption("timeSecondsFormat"))&&(d=c.replace("ss.sss",k.$options.getOption("timeSecondsFormat")).replace(/:$/,""));a=m("date")(a, -d,b);t&&k.$options.getOption("timeStripZeroSeconds")&&(a=a.replace(/(?::00)?(?:\.000)?$/,""));return a}v=q=null;return""});if(w(g.min)||g.ngMin){var x=g.min||p(g.ngMin)(e),B=s(x);k.$validators.min=function(a){return!n(a)||z(B)||d(a)>=B};g.$observe("min",function(a){a!==x&&(B=s(a),x=a,k.$validate())})}if(w(g.max)||g.ngMax){var y=g.max||p(g.ngMax)(e),J=s(y);k.$validators.max=function(a){return!n(a)||z(J)||d(a)<=J};g.$observe("max",function(a){a!==y&&(J=s(a),y=a,k.$validate())})}}}function Ic(a,b,d, -c,e){(c.$$hasNativeValidators=D(b[0].validity))&&c.$parsers.push(function(a){var d=b.prop("validity")||{};if(d.badInput||d.typeMismatch)c.$$parserName=e;else return a})}function de(a){a.$parsers.push(function(b){if(a.$isEmpty(b))return null;if(ih.test(b))return parseFloat(b);a.$$parserName="number"});a.$formatters.push(function(b){if(!a.$isEmpty(b)){if(!W(b))throw ob("numfmt",b);b=b.toString()}return b})}function na(a){w(a)&&!W(a)&&(a=parseFloat(a));return X(a)?void 0:a}function Jc(a){var b=a.toString(), -d=b.indexOf(".");return-1===d?-1a&&(a=/e-(\d+)$/.exec(b))?Number(a[1]):0:b.length-d-1}function ee(a,b,d){a=Number(a);var c=(a|0)!==a,e=(b|0)!==b,f=(d|0)!==d;if(c||e||f){var g=c?Jc(a):0,k=e?Jc(b):0,h=f?Jc(d):0,g=Math.max(g,k,h),g=Math.pow(10,g);a*=g;b*=g;d*=g;c&&(a=Math.round(a));e&&(b=Math.round(b));f&&(d=Math.round(d))}return 0===(a-b)%d}function fe(a,b,d,c,e){if(w(c)){a=a(c);if(!a.constant)throw ob("constexpr",d,c);return a(b)}return e}function Kc(a,b){function d(a,b){if(!a||!a.length)return[]; -if(!b||!b.length)return a;var c=[],d=0;a:for(;d(?:<\/\1>|)$/,mc=/<|&#?\w+;/,mg=/<([\w:-]+)/,ng=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi,oa={option:[1,'"],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"", -"
"],_default:[0,"",""]};oa.optgroup=oa.option;oa.tbody=oa.tfoot=oa.colgroup=oa.caption=oa.thead;oa.th=oa.td;var ug=C.Node.prototype.contains||function(a){return!!(this.compareDocumentPosition(a)&16)},Wa=Y.prototype={ready:fd,toString:function(){var a=[];r(this,function(b){a.push(""+b)});return"["+a.join(", ")+"]"},eq:function(a){return 0<=a?x(this[a]):x(this[this.length+a])},length:0,push:kh,sort:[].sort,splice:[].splice},Gb={};r("multiple selected checked disabled readOnly required open".split(" "), -function(a){Gb[K(a)]=a});var md={};r("input select option textarea button form details".split(" "),function(a){md[a]=!0});var td={ngMinlength:"minlength",ngMaxlength:"maxlength",ngMin:"min",ngMax:"max",ngPattern:"pattern",ngStep:"step"};r({data:rc,removeData:qc,hasData:function(a){for(var b in Ka[a.ng339])return!0;return!1},cleanData:function(a){for(var b=0,d=a.length;b/,xg=/^[^(]*\(\s*([^)]*)\)/m,nh=/,/,oh=/^\s*(_?)(\S+?)\1\s*$/,vg=/((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg,Ba=F("$injector"); -fb.$$annotate=function(a,b,d){var c;if("function"===typeof a){if(!(c=a.$inject)){c=[];if(a.length){if(b)throw A(d)&&d||(d=a.name||yg(a)),Ba("strictdi",d);b=od(a);r(b[1].split(nh),function(a){a.replace(oh,function(a,b,d){c.push(d)})})}a.$inject=c}}else H(a)?(b=a.length-1,sb(a[b],"fn"),c=a.slice(0,b)):sb(a,"fn",!0);return c};var je=F("$animate"),zf=function(){this.$get=E},Af=function(){var a=new Hb,b=[];this.$get=["$$AnimateRunner","$rootScope",function(d,c){function e(a,b,c){var d=!1;b&&(b=A(b)?b.split(" "): -H(b)?b:[],r(b,function(b){b&&(d=!0,a[b]=c)}));return d}function f(){r(b,function(b){var c=a.get(b);if(c){var d=zg(b.attr("class")),e="",f="";r(c,function(a,b){a!==!!d[b]&&(a?e+=(e.length?" ":"")+b:f+=(f.length?" ":"")+b)});r(b,function(a){e&&Db(a,e);f&&Cb(a,f)});a.delete(b)}});b.length=0}return{enabled:E,on:E,off:E,pin:E,push:function(g,k,h,l){l&&l();h=h||{};h.from&&g.css(h.from);h.to&&g.css(h.to);if(h.addClass||h.removeClass)if(k=h.addClass,l=h.removeClass,h=a.get(g)||{},k=e(h,k,!0),l=e(h,l,!1), -k||l)a.set(g,h),b.push(g),1===b.length&&c.$$postDigest(f);g=new d;g.complete();return g}}}]},xf=["$provide",function(a){var b=this,d=null,c=null;this.$$registeredAnimations=Object.create(null);this.register=function(c,d){if(c&&"."!==c.charAt(0))throw je("notcsel",c);var g=c+"-animation";b.$$registeredAnimations[c.substr(1)]=g;a.factory(g,d)};this.customFilter=function(a){1===arguments.length&&(c=B(a)?a:null);return c};this.classNameFilter=function(a){if(1===arguments.length&&(d=a instanceof RegExp? -a:null)&&/[(\s|\/)]ng-animate[(\s|\/)]/.test(d.toString()))throw d=null,je("nongcls","ng-animate");return d};this.$get=["$$animateQueue",function(a){function b(a,c,d){if(d){var e;a:{for(e=0;e <= >= && || ! = |".split(" "),function(a){Ub[a]=!0});var rh={n:"\n",f:"\f",r:"\r",t:"\t",v:"\v","'":"'",'"':'"'},Nb=function(a){this.options=a};Nb.prototype={constructor:Nb, -lex:function(a){this.text=a;this.index=0;for(this.tokens=[];this.index=a&&"string"===typeof a},isWhitespace:function(a){return" "===a||"\r"===a||"\t"===a||"\n"===a||"\v"===a||"\u00a0"===a},isIdentifierStart:function(a){return this.options.isIdentifierStart? -this.options.isIdentifierStart(a,this.codePointAt(a)):this.isValidIdentifierStart(a)},isValidIdentifierStart:function(a){return"a"<=a&&"z">=a||"A"<=a&&"Z">=a||"_"===a||"$"===a},isIdentifierContinue:function(a){return this.options.isIdentifierContinue?this.options.isIdentifierContinue(a,this.codePointAt(a)):this.isValidIdentifierContinue(a)},isValidIdentifierContinue:function(a,b){return this.isValidIdentifierStart(a,b)||this.isNumber(a)},codePointAt:function(a){return 1===a.length?a.charCodeAt(0): -(a.charCodeAt(0)<<10)+a.charCodeAt(1)-56613888},peekMultichar:function(){var a=this.text.charAt(this.index),b=this.peek();if(!b)return a;var d=a.charCodeAt(0),c=b.charCodeAt(0);return 55296<=d&&56319>=d&&56320<=c&&57343>=c?a+b:a},isExpOperator:function(a){return"-"===a||"+"===a||this.isNumber(a)},throwError:function(a,b,d){d=d||this.index;b=w(b)?"s "+b+"-"+this.index+" ["+this.text.substring(b,d)+"]":" "+d;throw Ya("lexerr",a,b,this.text);},readNumber:function(){for(var a="",b=this.index;this.index< -this.text.length;){var d=K(this.text.charAt(this.index));if("."===d||this.isNumber(d))a+=d;else{var c=this.peek();if("e"===d&&this.isExpOperator(c))a+=d;else if(this.isExpOperator(d)&&c&&this.isNumber(c)&&"e"===a.charAt(a.length-1))a+=d;else if(!this.isExpOperator(d)||c&&this.isNumber(c)||"e"!==a.charAt(a.length-1))break;else this.throwError("Invalid exponent")}this.index++}this.tokens.push({index:b,text:a,constant:!0,value:Number(a)})},readIdent:function(){var a=this.index;for(this.index+=this.peekMultichar().length;this.index< -this.text.length;){var b=this.peekMultichar();if(!this.isIdentifierContinue(b))break;this.index+=b.length}this.tokens.push({index:a,text:this.text.slice(a,this.index),identifier:!0})},readString:function(a){var b=this.index;this.index++;for(var d="",c=a,e=!1;this.index","<=",">=");)a={type:q.BinaryExpression,operator:b.text,left:a,right:this.additive()};return a},additive:function(){for(var a=this.multiplicative(),b;b=this.expect("+","-");)a={type:q.BinaryExpression, -operator:b.text,left:a,right:this.multiplicative()};return a},multiplicative:function(){for(var a=this.unary(),b;b=this.expect("*","/","%");)a={type:q.BinaryExpression,operator:b.text,left:a,right:this.unary()};return a},unary:function(){var a;return(a=this.expect("+","-","!"))?{type:q.UnaryExpression,operator:a.text,prefix:!0,argument:this.unary()}:this.primary()},primary:function(){var a;this.expect("(")?(a=this.filterChain(),this.consume(")")):this.expect("[")?a=this.arrayDeclaration():this.expect("{")? -a=this.object():this.selfReferential.hasOwnProperty(this.peek().text)?a=Ia(this.selfReferential[this.consume().text]):this.options.literals.hasOwnProperty(this.peek().text)?a={type:q.Literal,value:this.options.literals[this.consume().text]}:this.peek().identifier?a=this.identifier():this.peek().constant?a=this.constant():this.throwError("not a primary expression",this.peek());for(var b;b=this.expect("(","[",".");)"("===b.text?(a={type:q.CallExpression,callee:a,arguments:this.parseArguments()},this.consume(")")): -"["===b.text?(a={type:q.MemberExpression,object:a,property:this.expression(),computed:!0},this.consume("]")):"."===b.text?a={type:q.MemberExpression,object:a,property:this.identifier(),computed:!1}:this.throwError("IMPOSSIBLE");return a},filter:function(a){a=[a];for(var b={type:q.CallExpression,callee:this.identifier(),arguments:a,filter:!0};this.expect(":");)a.push(this.expression());return b},parseArguments:function(){var a=[];if(")"!==this.peekToken().text){do a.push(this.filterChain());while(this.expect(",")) -}return a},identifier:function(){var a=this.consume();a.identifier||this.throwError("is not a valid identifier",a);return{type:q.Identifier,name:a.text}},constant:function(){return{type:q.Literal,value:this.consume().value}},arrayDeclaration:function(){var a=[];if("]"!==this.peekToken().text){do{if(this.peek("]"))break;a.push(this.expression())}while(this.expect(","))}this.consume("]");return{type:q.ArrayExpression,elements:a}},object:function(){var a=[],b;if("}"!==this.peekToken().text){do{if(this.peek("}"))break; -b={type:q.Property,kind:"init"};this.peek().constant?(b.key=this.constant(),b.computed=!1,this.consume(":"),b.value=this.expression()):this.peek().identifier?(b.key=this.identifier(),b.computed=!1,this.peek(":")?(this.consume(":"),b.value=this.expression()):b.value=b.key):this.peek("[")?(this.consume("["),b.key=this.expression(),this.consume("]"),b.computed=!0,this.consume(":"),b.value=this.expression()):this.throwError("invalid key",this.peek());a.push(b)}while(this.expect(","))}this.consume("}"); -return{type:q.ObjectExpression,properties:a}},throwError:function(a,b){throw Ya("syntax",b.text,a,b.index+1,this.text,this.text.substring(b.index));},consume:function(a){if(0===this.tokens.length)throw Ya("ueoe",this.text);var b=this.expect(a);b||this.throwError("is unexpected, expecting ["+a+"]",this.peek());return b},peekToken:function(){if(0===this.tokens.length)throw Ya("ueoe",this.text);return this.tokens[0]},peek:function(a,b,d,c){return this.peekAhead(0,a,b,d,c)},peekAhead:function(a,b,d,c, -e){if(this.tokens.length>a){a=this.tokens[a];var f=a.text;if(f===b||f===d||f===c||f===e||!(b||d||c||e))return a}return!1},expect:function(a,b,d,c){return(a=this.peek(a,b,d,c))?(this.tokens.shift(),a):!1},selfReferential:{"this":{type:q.ThisExpression},$locals:{type:q.LocalsExpression}}};var Fd=2;Jd.prototype={compile:function(a){var b=this;this.state={nextId:0,filters:{},fn:{vars:[],body:[],own:{}},assign:{vars:[],body:[],own:{}},inputs:[]};Z(a,b.$filter);var d="",c;this.stage="assign";if(c=Id(a))this.state.computing= -"assign",d=this.nextId(),this.recurse(c,d),this.return_(d),d="fn.assign="+this.generateFunction("assign","s,v,l");c=Gd(a.body);b.stage="inputs";r(c,function(a,c){var d="fn"+c;b.state[d]={vars:[],body:[],own:{}};b.state.computing=d;var k=b.nextId();b.recurse(a,k);b.return_(k);b.state.inputs.push({name:d,isPure:a.isPure});a.watchId=c});this.state.computing="fn";this.stage="main";this.recurse(a);a='"'+this.USE+" "+this.STRICT+'";\n'+this.filterPrefix()+"var fn="+this.generateFunction("fn","s,l,a,i")+ -d+this.watchFns()+"return fn;";a=(new Function("$filter","getStringValue","ifDefined","plus",a))(this.$filter,Og,Pg,Ed);this.state=this.stage=void 0;return a},USE:"use",STRICT:"strict",watchFns:function(){var a=[],b=this.state.inputs,d=this;r(b,function(b){a.push("var "+b.name+"="+d.generateFunction(b.name,"s"));b.isPure&&a.push(b.name,".isPure="+JSON.stringify(b.isPure)+";")});b.length&&a.push("fn.inputs=["+b.map(function(a){return a.name}).join(",")+"];");return a.join("")},generateFunction:function(a, -b){return"function("+b+"){"+this.varsPrefix(a)+this.body(a)+"};"},filterPrefix:function(){var a=[],b=this;r(this.state.filters,function(d,c){a.push(d+"=$filter("+b.escape(c)+")")});return a.length?"var "+a.join(",")+";":""},varsPrefix:function(a){return this.state[a].vars.length?"var "+this.state[a].vars.join(",")+";":""},body:function(a){return this.state[a].body.join("")},recurse:function(a,b,d,c,e,f){var g,k,h=this,l,m,p;c=c||E;if(!f&&w(a.watchId))b=b||this.nextId(),this.if_("i",this.lazyAssign(b, -this.computedMember("i",a.watchId)),this.lazyRecurse(a,b,d,c,e,!0));else switch(a.type){case q.Program:r(a.body,function(b,c){h.recurse(b.expression,void 0,void 0,function(a){k=a});c!==a.body.length-1?h.current().body.push(k,";"):h.return_(k)});break;case q.Literal:m=this.escape(a.value);this.assign(b,m);c(b||m);break;case q.UnaryExpression:this.recurse(a.argument,void 0,void 0,function(a){k=a});m=a.operator+"("+this.ifDefined(k,0)+")";this.assign(b,m);c(m);break;case q.BinaryExpression:this.recurse(a.left, -void 0,void 0,function(a){g=a});this.recurse(a.right,void 0,void 0,function(a){k=a});m="+"===a.operator?this.plus(g,k):"-"===a.operator?this.ifDefined(g,0)+a.operator+this.ifDefined(k,0):"("+g+")"+a.operator+"("+k+")";this.assign(b,m);c(m);break;case q.LogicalExpression:b=b||this.nextId();h.recurse(a.left,b);h.if_("&&"===a.operator?b:h.not(b),h.lazyRecurse(a.right,b));c(b);break;case q.ConditionalExpression:b=b||this.nextId();h.recurse(a.test,b);h.if_(b,h.lazyRecurse(a.alternate,b),h.lazyRecurse(a.consequent, -b));c(b);break;case q.Identifier:b=b||this.nextId();d&&(d.context="inputs"===h.stage?"s":this.assign(this.nextId(),this.getHasOwnProperty("l",a.name)+"?l:s"),d.computed=!1,d.name=a.name);h.if_("inputs"===h.stage||h.not(h.getHasOwnProperty("l",a.name)),function(){h.if_("inputs"===h.stage||"s",function(){e&&1!==e&&h.if_(h.isNull(h.nonComputedMember("s",a.name)),h.lazyAssign(h.nonComputedMember("s",a.name),"{}"));h.assign(b,h.nonComputedMember("s",a.name))})},b&&h.lazyAssign(b,h.nonComputedMember("l", -a.name)));c(b);break;case q.MemberExpression:g=d&&(d.context=this.nextId())||this.nextId();b=b||this.nextId();h.recurse(a.object,g,void 0,function(){h.if_(h.notNull(g),function(){a.computed?(k=h.nextId(),h.recurse(a.property,k),h.getStringValue(k),e&&1!==e&&h.if_(h.not(h.computedMember(g,k)),h.lazyAssign(h.computedMember(g,k),"{}")),m=h.computedMember(g,k),h.assign(b,m),d&&(d.computed=!0,d.name=k)):(e&&1!==e&&h.if_(h.isNull(h.nonComputedMember(g,a.property.name)),h.lazyAssign(h.nonComputedMember(g, -a.property.name),"{}")),m=h.nonComputedMember(g,a.property.name),h.assign(b,m),d&&(d.computed=!1,d.name=a.property.name))},function(){h.assign(b,"undefined")});c(b)},!!e);break;case q.CallExpression:b=b||this.nextId();a.filter?(k=h.filter(a.callee.name),l=[],r(a.arguments,function(a){var b=h.nextId();h.recurse(a,b);l.push(b)}),m=k+"("+l.join(",")+")",h.assign(b,m),c(b)):(k=h.nextId(),g={},l=[],h.recurse(a.callee,k,g,function(){h.if_(h.notNull(k),function(){r(a.arguments,function(b){h.recurse(b,a.constant? -void 0:h.nextId(),void 0,function(a){l.push(a)})});m=g.name?h.member(g.context,g.name,g.computed)+"("+l.join(",")+")":k+"("+l.join(",")+")";h.assign(b,m)},function(){h.assign(b,"undefined")});c(b)}));break;case q.AssignmentExpression:k=this.nextId();g={};this.recurse(a.left,void 0,g,function(){h.if_(h.notNull(g.context),function(){h.recurse(a.right,k);m=h.member(g.context,g.name,g.computed)+a.operator+k;h.assign(b,m);c(b||m)})},1);break;case q.ArrayExpression:l=[];r(a.elements,function(b){h.recurse(b, -a.constant?void 0:h.nextId(),void 0,function(a){l.push(a)})});m="["+l.join(",")+"]";this.assign(b,m);c(b||m);break;case q.ObjectExpression:l=[];p=!1;r(a.properties,function(a){a.computed&&(p=!0)});p?(b=b||this.nextId(),this.assign(b,"{}"),r(a.properties,function(a){a.computed?(g=h.nextId(),h.recurse(a.key,g)):g=a.key.type===q.Identifier?a.key.name:""+a.key.value;k=h.nextId();h.recurse(a.value,k);h.assign(h.member(b,g,a.computed),k)})):(r(a.properties,function(b){h.recurse(b.value,a.constant?void 0: -h.nextId(),void 0,function(a){l.push(h.escape(b.key.type===q.Identifier?b.key.name:""+b.key.value)+":"+a)})}),m="{"+l.join(",")+"}",this.assign(b,m));c(b||m);break;case q.ThisExpression:this.assign(b,"s");c(b||"s");break;case q.LocalsExpression:this.assign(b,"l");c(b||"l");break;case q.NGValueParameter:this.assign(b,"v"),c(b||"v")}},getHasOwnProperty:function(a,b){var d=a+"."+b,c=this.current().own;c.hasOwnProperty(d)||(c[d]=this.nextId(!1,a+"&&("+this.escape(b)+" in "+a+")"));return c[d]},assign:function(a, -b){if(a)return this.current().body.push(a,"=",b,";"),a},filter:function(a){this.state.filters.hasOwnProperty(a)||(this.state.filters[a]=this.nextId(!0));return this.state.filters[a]},ifDefined:function(a,b){return"ifDefined("+a+","+this.escape(b)+")"},plus:function(a,b){return"plus("+a+","+b+")"},return_:function(a){this.current().body.push("return ",a,";")},if_:function(a,b,d){if(!0===a)b();else{var c=this.current().body;c.push("if(",a,"){");b();c.push("}");d&&(c.push("else{"),d(),c.push("}"))}}, -not:function(a){return"!("+a+")"},isNull:function(a){return a+"==null"},notNull:function(a){return a+"!=null"},nonComputedMember:function(a,b){var d=/[^$_a-zA-Z0-9]/g;return/^[$_a-zA-Z][$_a-zA-Z0-9]*$/.test(b)?a+"."+b:a+'["'+b.replace(d,this.stringEscapeFn)+'"]'},computedMember:function(a,b){return a+"["+b+"]"},member:function(a,b,d){return d?this.computedMember(a,b):this.nonComputedMember(a,b)},getStringValue:function(a){this.assign(a,"getStringValue("+a+")")},lazyRecurse:function(a,b,d,c,e,f){var g= -this;return function(){g.recurse(a,b,d,c,e,f)}},lazyAssign:function(a,b){var d=this;return function(){d.assign(a,b)}},stringEscapeRegex:/[^ a-zA-Z0-9]/g,stringEscapeFn:function(a){return"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)},escape:function(a){if(A(a))return"'"+a.replace(this.stringEscapeRegex,this.stringEscapeFn)+"'";if(W(a))return a.toString();if(!0===a)return"true";if(!1===a)return"false";if(null===a)return"null";if("undefined"===typeof a)return"undefined";throw Ya("esc");},nextId:function(a, -b){var d="v"+this.state.nextId++;a||this.current().vars.push(d+(b?"="+b:""));return d},current:function(){return this.state[this.state.computing]}};Kd.prototype={compile:function(a){var b=this;Z(a,b.$filter);var d,c;if(d=Id(a))c=this.recurse(d);d=Gd(a.body);var e;d&&(e=[],r(d,function(a,c){var d=b.recurse(a);d.isPure=a.isPure;a.input=d;e.push(d);a.watchId=c}));var f=[];r(a.body,function(a){f.push(b.recurse(a.expression))});a=0===a.body.length?E:1===a.body.length?f[0]:function(a,b){var c;r(f,function(d){c= -d(a,b)});return c};c&&(a.assign=function(a,b,d){return c(a,d,b)});e&&(a.inputs=e);return a},recurse:function(a,b,d){var c,e,f=this,g;if(a.input)return this.inputs(a.input,a.watchId);switch(a.type){case q.Literal:return this.value(a.value,b);case q.UnaryExpression:return e=this.recurse(a.argument),this["unary"+a.operator](e,b);case q.BinaryExpression:return c=this.recurse(a.left),e=this.recurse(a.right),this["binary"+a.operator](c,e,b);case q.LogicalExpression:return c=this.recurse(a.left),e=this.recurse(a.right), -this["binary"+a.operator](c,e,b);case q.ConditionalExpression:return this["ternary?:"](this.recurse(a.test),this.recurse(a.alternate),this.recurse(a.consequent),b);case q.Identifier:return f.identifier(a.name,b,d);case q.MemberExpression:return c=this.recurse(a.object,!1,!!d),a.computed||(e=a.property.name),a.computed&&(e=this.recurse(a.property)),a.computed?this.computedMember(c,e,b,d):this.nonComputedMember(c,e,b,d);case q.CallExpression:return g=[],r(a.arguments,function(a){g.push(f.recurse(a))}), -a.filter&&(e=this.$filter(a.callee.name)),a.filter||(e=this.recurse(a.callee,!0)),a.filter?function(a,c,d,f){for(var p=[],n=0;n":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)>b(c,e,f,g);return d?{value:c}:c}},"binary<=":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)<=b(c,e,f,g);return d?{value:c}:c}},"binary>=":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)>=b(c,e,f,g);return d?{value:c}:c}},"binary&&":function(a,b,d){return function(c,e,f,g){c= -a(c,e,f,g)&&b(c,e,f,g);return d?{value:c}:c}},"binary||":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)||b(c,e,f,g);return d?{value:c}:c}},"ternary?:":function(a,b,d,c){return function(e,f,g,k){e=a(e,f,g,k)?b(e,f,g,k):d(e,f,g,k);return c?{value:e}:e}},value:function(a,b){return function(){return b?{context:void 0,name:void 0,value:a}:a}},identifier:function(a,b,d){return function(c,e,f,g){c=e&&a in e?e:c;d&&1!==d&&c&&null==c[a]&&(c[a]={});e=c?c[a]:void 0;return b?{context:c,name:a,value:e}: -e}},computedMember:function(a,b,d,c){return function(e,f,g,k){var h=a(e,f,g,k),l,m;null!=h&&(l=b(e,f,g,k),l+="",c&&1!==c&&h&&!h[l]&&(h[l]={}),m=h[l]);return d?{context:h,name:l,value:m}:m}},nonComputedMember:function(a,b,d,c){return function(e,f,g,k){e=a(e,f,g,k);c&&1!==c&&e&&null==e[b]&&(e[b]={});f=null!=e?e[b]:void 0;return d?{context:e,name:b,value:f}:f}},inputs:function(a,b){return function(d,c,e,f){return f?f[b]:a(d,c,e)}}};Mb.prototype={constructor:Mb,parse:function(a){a=this.getAst(a);var b= -this.astCompiler.compile(a.ast),d=a.ast;b.literal=0===d.body.length||1===d.body.length&&(d.body[0].expression.type===q.Literal||d.body[0].expression.type===q.ArrayExpression||d.body[0].expression.type===q.ObjectExpression);b.constant=a.ast.constant;b.oneTime=a.oneTime;return b},getAst:function(a){var b=!1;a=a.trim();":"===a.charAt(0)&&":"===a.charAt(1)&&(b=!0,a=a.substring(2));return{ast:this.ast.ast(a),oneTime:b}}};var Ea=F("$sce"),V={HTML:"html",CSS:"css",MEDIA_URL:"mediaUrl",URL:"url",RESOURCE_URL:"resourceUrl", -JS:"js"},Cc=/_([a-z])/g,Ug=F("$templateRequest"),Vg=F("$timeout"),aa=C.document.createElement("a"),Od=ga(C.location.href),Na;aa.href="http://[::1]";var Wg="[::1]"===aa.hostname;Pd.$inject=["$document"];dd.$inject=["$provide"];var Wd=22,Vd=".",Ec="0";Qd.$inject=["$locale"];Sd.$inject=["$locale"];var gh={yyyy:ea("FullYear",4,0,!1,!0),yy:ea("FullYear",2,0,!0,!0),y:ea("FullYear",1,0,!1,!0),MMMM:kb("Month"),MMM:kb("Month",!0),MM:ea("Month",2,1),M:ea("Month",1,1),LLLL:kb("Month",!1,!0),dd:ea("Date",2), -d:ea("Date",1),HH:ea("Hours",2),H:ea("Hours",1),hh:ea("Hours",2,-12),h:ea("Hours",1,-12),mm:ea("Minutes",2),m:ea("Minutes",1),ss:ea("Seconds",2),s:ea("Seconds",1),sss:ea("Milliseconds",3),EEEE:kb("Day"),EEE:kb("Day",!0),a:function(a,b){return 12>a.getHours()?b.AMPMS[0]:b.AMPMS[1]},Z:function(a,b,d){a=-1*d;return a=(0<=a?"+":"")+(Ob(Math[0=a.getFullYear()?b.ERANAMES[0]:b.ERANAMES[1]}}, -fh=/((?:[^yMLdHhmsaZEwG']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|L+|d+|H+|h+|m+|s+|a|Z|G+|w+))([\s\S]*)/,eh=/^-?\d+$/;Rd.$inject=["$locale"];var $g=ia(K),ah=ia(ub);Td.$inject=["$parse"];var Me=ia({restrict:"E",compile:function(a,b){if(!b.href&&!b.xlinkHref)return function(a,b){if("a"===b[0].nodeName.toLowerCase()){var e="[object SVGAnimatedString]"===la.call(b.prop("href"))?"xlink:href":"href";b.on("click",function(a){b.attr(e)||a.preventDefault()})}}}}),vb={};r(Gb,function(a,b){function d(a,d,e){a.$watch(e[c], -function(a){e.$set(b,!!a)})}if("multiple"!==a){var c=wa("ng-"+b),e=d;"checked"===a&&(e=function(a,b,e){e.ngModel!==e[c]&&d(a,b,e)});vb[c]=function(){return{restrict:"A",priority:100,link:e}}}});r(td,function(a,b){vb[b]=function(){return{priority:100,link:function(a,c,e){if("ngPattern"===b&&"/"===e.ngPattern.charAt(0)&&(c=e.ngPattern.match(ie))){e.$set("ngPattern",new RegExp(c[1],c[2]));return}a.$watch(e[b],function(a){e.$set(b,a)})}}}});r(["src","srcset","href"],function(a){var b=wa("ng-"+a);vb[b]= -["$sce",function(d){return{priority:99,link:function(c,e,f){var g=a,k=a;"href"===a&&"[object SVGAnimatedString]"===la.call(e.prop("href"))&&(k="xlinkHref",f.$attr[k]="xlink:href",g=null);f.$set(b,d.getTrustedMediaUrl(f[b]));f.$observe(b,function(b){b?(f.$set(k,b),Ca&&g&&e.prop(g,f[k])):"href"===a&&f.$set(k,null)})}}}]});var lb={$addControl:E,$getControls:ia([]),$$renameControl:function(a,b){a.$name=b},$removeControl:E,$setValidity:E,$setDirty:E,$setPristine:E,$setSubmitted:E,$$setSubmitted:E};Pb.$inject= -["$element","$attrs","$scope","$animate","$interpolate"];Pb.prototype={$rollbackViewValue:function(){r(this.$$controls,function(a){a.$rollbackViewValue()})},$commitViewValue:function(){r(this.$$controls,function(a){a.$commitViewValue()})},$addControl:function(a){Ja(a.$name,"input");this.$$controls.push(a);a.$name&&(this[a.$name]=a);a.$$parentForm=this},$getControls:function(){return ja(this.$$controls)},$$renameControl:function(a,b){var d=a.$name;this[d]===a&&delete this[d];this[b]=a;a.$name=b},$removeControl:function(a){a.$name&& -this[a.$name]===a&&delete this[a.$name];r(this.$pending,function(b,d){this.$setValidity(d,null,a)},this);r(this.$error,function(b,d){this.$setValidity(d,null,a)},this);r(this.$$success,function(b,d){this.$setValidity(d,null,a)},this);cb(this.$$controls,a);a.$$parentForm=lb},$setDirty:function(){this.$$animate.removeClass(this.$$element,Za);this.$$animate.addClass(this.$$element,Vb);this.$dirty=!0;this.$pristine=!1;this.$$parentForm.$setDirty()},$setPristine:function(){this.$$animate.setClass(this.$$element, -Za,Vb+" ng-submitted");this.$dirty=!1;this.$pristine=!0;this.$submitted=!1;r(this.$$controls,function(a){a.$setPristine()})},$setUntouched:function(){r(this.$$controls,function(a){a.$setUntouched()})},$setSubmitted:function(){for(var a=this;a.$$parentForm&&a.$$parentForm!==lb;)a=a.$$parentForm;a.$$setSubmitted()},$$setSubmitted:function(){this.$$animate.addClass(this.$$element,"ng-submitted");this.$submitted=!0;r(this.$$controls,function(a){a.$$setSubmitted&&a.$$setSubmitted()})}};ae({clazz:Pb,set:function(a, -b,d){var c=a[b];c?-1===c.indexOf(d)&&c.push(d):a[b]=[d]},unset:function(a,b,d){var c=a[b];c&&(cb(c,d),0===c.length&&delete a[b])}});var ke=function(a){return["$timeout","$parse",function(b,d){function c(a){return""===a?d('this[""]').assign:d(a).assign||E}return{name:"form",restrict:a?"EAC":"E",require:["form","^^?form"],controller:Pb,compile:function(d,f){d.addClass(Za).addClass(mb);var g=f.name?"name":a&&f.ngForm?"ngForm":!1;return{pre:function(a,d,e,f){var p=f[0];if(!("action"in e)){var n=function(b){a.$apply(function(){p.$commitViewValue(); -p.$setSubmitted()});b.preventDefault()};d[0].addEventListener("submit",n);d.on("$destroy",function(){b(function(){d[0].removeEventListener("submit",n)},0,!1)})}(f[1]||p.$$parentForm).$addControl(p);var s=g?c(p.$name):E;g&&(s(a,p),e.$observe(g,function(b){p.$name!==b&&(s(a,void 0),p.$$parentForm.$$renameControl(p,b),s=c(p.$name),s(a,p))}));d.on("$destroy",function(){p.$$parentForm.$removeControl(p);s(a,void 0);S(p,lb)})}}}}}]},Ne=ke(),Ze=ke(!0),hh=/^\d{4,}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+(?:[+-][0-2]\d:[0-5]\d|Z)$/, -sh=/^[a-z][a-z\d.+-]*:\/*(?:[^:@]+(?::[^@]+)?@)?(?:[^\s:/?#]+|\[[a-f\d:]+])(?::\d+)?(?:\/[^?#]*)?(?:\?[^#]*)?(?:#.*)?$/i,th=/^(?=.{1,254}$)(?=.{1,64}@)[-!#$%&'*+/0-9=?A-Z^_`a-z{|}~]+(\.[-!#$%&'*+/0-9=?A-Z^_`a-z{|}~]+)*@[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?(\.[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?)*$/,ih=/^\s*(-|\+)?(\d+|(\d*(\.\d*)))([eE][+-]?\d+)?\s*$/,le=/^(\d{4,})-(\d{2})-(\d{2})$/,me=/^(\d{4,})-(\d\d)-(\d\d)T(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/,Mc=/^(\d{4,})-W(\d\d)$/,ne=/^(\d{4,})-(\d\d)$/, -oe=/^(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/,ce=T();r(["date","datetime-local","month","time","week"],function(a){ce[a]=!0});var pe={text:function(a,b,d,c,e,f){Sa(a,b,d,c,e,f);Hc(c)},date:nb("date",le,Qb(le,["yyyy","MM","dd"]),"yyyy-MM-dd"),"datetime-local":nb("datetimelocal",me,Qb(me,"yyyy MM dd HH mm ss sss".split(" ")),"yyyy-MM-ddTHH:mm:ss.sss"),time:nb("time",oe,Qb(oe,["HH","mm","ss","sss"]),"HH:mm:ss.sss"),week:nb("week",Mc,function(a,b){if(ha(a))return a;if(A(a)){Mc.lastIndex=0;var d=Mc.exec(a); -if(d){var c=+d[1],e=+d[2],f=d=0,g=0,k=0,h=Xd(c),e=7*(e-1);b&&(d=b.getHours(),f=b.getMinutes(),g=b.getSeconds(),k=b.getMilliseconds());return new Date(c,0,h.getDate()+e,d,f,g,k)}}return NaN},"yyyy-Www"),month:nb("month",ne,Qb(ne,["yyyy","MM"]),"yyyy-MM"),number:function(a,b,d,c,e,f,g,k){Ic(a,b,d,c,"number");de(c);Sa(a,b,d,c,e,f);var h;if(w(d.min)||d.ngMin){var l=d.min||k(d.ngMin)(a);h=na(l);c.$validators.min=function(a,b){return c.$isEmpty(b)||z(h)||b>=h};d.$observe("min",function(a){a!==l&&(h=na(a), -l=a,c.$validate())})}if(w(d.max)||d.ngMax){var m=d.max||k(d.ngMax)(a),p=na(m);c.$validators.max=function(a,b){return c.$isEmpty(b)||z(p)||b<=p};d.$observe("max",function(a){a!==m&&(p=na(a),m=a,c.$validate())})}if(w(d.step)||d.ngStep){var n=d.step||k(d.ngStep)(a),s=na(n);c.$validators.step=function(a,b){return c.$isEmpty(b)||z(s)||ee(b,h||0,s)};d.$observe("step",function(a){a!==n&&(s=na(a),n=a,c.$validate())})}},url:function(a,b,d,c,e,f){Sa(a,b,d,c,e,f);Hc(c);c.$validators.url=function(a,b){var d= -a||b;return c.$isEmpty(d)||sh.test(d)}},email:function(a,b,d,c,e,f){Sa(a,b,d,c,e,f);Hc(c);c.$validators.email=function(a,b){var d=a||b;return c.$isEmpty(d)||th.test(d)}},radio:function(a,b,d,c){var e=!d.ngTrim||"false"!==U(d.ngTrim);z(d.name)&&b.attr("name",++pb);b.on("change",function(a){var g;b[0].checked&&(g=d.value,e&&(g=U(g)),c.$setViewValue(g,a&&a.type))});c.$render=function(){var a=d.value;e&&(a=U(a));b[0].checked=a===c.$viewValue};d.$observe("value",c.$render)},range:function(a,b,d,c,e,f){function g(a, -c){b.attr(a,d[a]);var e=d[a];d.$observe(a,function(a){a!==e&&(e=a,c(a))})}function k(a){p=na(a);X(c.$modelValue)||(m?(a=b.val(),p>a&&(a=p,b.val(a)),c.$setViewValue(a)):c.$validate())}function h(a){n=na(a);X(c.$modelValue)||(m?(a=b.val(),n=p},g("min",k));e&&(n=na(d.max),c.$validators.max=m?function(){return!0}:function(a,b){return c.$isEmpty(b)||z(n)||b<=n},g("max",h));f&&(s=na(d.step),c.$validators.step=m?function(){return!r.stepMismatch}: -function(a,b){return c.$isEmpty(b)||z(s)||ee(b,p||0,s)},g("step",l))},checkbox:function(a,b,d,c,e,f,g,k){var h=fe(k,a,"ngTrueValue",d.ngTrueValue,!0),l=fe(k,a,"ngFalseValue",d.ngFalseValue,!1);b.on("change",function(a){c.$setViewValue(b[0].checked,a&&a.type)});c.$render=function(){b[0].checked=c.$viewValue};c.$isEmpty=function(a){return!1===a};c.$formatters.push(function(a){return va(a,h)});c.$parsers.push(function(a){return a?h:l})},hidden:E,button:E,submit:E,reset:E,file:E},Yc=["$browser","$sniffer", -"$filter","$parse",function(a,b,d,c){return{restrict:"E",require:["?ngModel"],link:{pre:function(e,f,g,k){k[0]&&(pe[K(g.type)]||pe.text)(e,f,g,k[0],b,a,d,c)}}}}],vf=function(){var a={configurable:!0,enumerable:!1,get:function(){return this.getAttribute("value")||""},set:function(a){this.setAttribute("value",a)}};return{restrict:"E",priority:200,compile:function(b,d){if("hidden"===K(d.type))return{pre:function(b,d,f,g){b=d[0];b.parentNode&&b.parentNode.insertBefore(b,b.nextSibling);Object.defineProperty&& -Object.defineProperty(b,"value",a)}}}}},uh=/^(true|false|\d+)$/,sf=function(){function a(a,d,c){var e=w(c)?c:9===Ca?"":null;a.prop("value",e);d.$set("value",c)}return{restrict:"A",priority:100,compile:function(b,d){return uh.test(d.ngValue)?function(b,d,f){b=b.$eval(f.ngValue);a(d,f,b)}:function(b,d,f){b.$watch(f.ngValue,function(b){a(d,f,b)})}}}},Re=["$compile",function(a){return{restrict:"AC",compile:function(b){a.$$addBindingClass(b);return function(b,c,e){a.$$addBindingInfo(c,e.ngBind);c=c[0]; -b.$watch(e.ngBind,function(a){c.textContent=ic(a)})}}}}],Te=["$interpolate","$compile",function(a,b){return{compile:function(d){b.$$addBindingClass(d);return function(c,d,f){c=a(d.attr(f.$attr.ngBindTemplate));b.$$addBindingInfo(d,c.expressions);d=d[0];f.$observe("ngBindTemplate",function(a){d.textContent=z(a)?"":a})}}}}],Se=["$sce","$parse","$compile",function(a,b,d){return{restrict:"A",compile:function(c,e){var f=b(e.ngBindHtml),g=b(e.ngBindHtml,function(b){return a.valueOf(b)});d.$$addBindingClass(c); -return function(b,c,e){d.$$addBindingInfo(c,e.ngBindHtml);b.$watch(g,function(){var d=f(b);c.html(a.getTrustedHtml(d)||"")})}}}}],rf=ia({restrict:"A",require:"ngModel",link:function(a,b,d,c){c.$viewChangeListeners.push(function(){a.$eval(d.ngChange)})}}),Ue=Kc("",!0),We=Kc("Odd",0),Ve=Kc("Even",1),Xe=Ra({compile:function(a,b){b.$set("ngCloak",void 0);a.removeClass("ng-cloak")}}),Ye=[function(){return{restrict:"A",scope:!0,controller:"@",priority:500}}],cd={},vh={blur:!0,focus:!0};r("click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur copy cut paste".split(" "), -function(a){var b=wa("ng-"+a);cd[b]=["$parse","$rootScope","$exceptionHandler",function(d,c,e){return qd(d,c,e,b,a,vh[a])}]});var af=["$animate","$compile",function(a,b){return{multiElement:!0,transclude:"element",priority:600,terminal:!0,restrict:"A",$$tlb:!0,link:function(d,c,e,f,g){var k,h,l;d.$watch(e.ngIf,function(d){d?h||g(function(d,f){h=f;d[d.length++]=b.$$createComment("end ngIf",e.ngIf);k={clone:d};a.enter(d,c.parent(),c)}):(l&&(l.remove(),l=null),h&&(h.$destroy(),h=null),k&&(l=tb(k.clone), -a.leave(l).done(function(a){!1!==a&&(l=null)}),k=null))})}}}],bf=["$templateRequest","$anchorScroll","$animate",function(a,b,d){return{restrict:"ECA",priority:400,terminal:!0,transclude:"element",controller:ca.noop,compile:function(c,e){var f=e.ngInclude||e.src,g=e.onload||"",k=e.autoscroll;return function(c,e,m,p,n){var r=0,q,t,x,v=function(){t&&(t.remove(),t=null);q&&(q.$destroy(),q=null);x&&(d.leave(x).done(function(a){!1!==a&&(t=null)}),t=x,x=null)};c.$watch(f,function(f){var m=function(a){!1=== -a||!w(k)||k&&!c.$eval(k)||b()},t=++r;f?(a(f,!0).then(function(a){if(!c.$$destroyed&&t===r){var b=c.$new();p.template=a;a=n(b,function(a){v();d.enter(a,null,e).done(m)});q=b;x=a;q.$emit("$includeContentLoaded",f);c.$eval(g)}},function(){c.$$destroyed||t!==r||(v(),c.$emit("$includeContentError",f))}),c.$emit("$includeContentRequested",f)):(v(),p.template=null)})}}}}],uf=["$compile",function(a){return{restrict:"ECA",priority:-400,require:"ngInclude",link:function(b,d,c,e){la.call(d[0]).match(/SVG/)? -(d.empty(),a(ed(e.template,C.document).childNodes)(b,function(a){d.append(a)},{futureParentElement:d})):(d.html(e.template),a(d.contents())(b))}}}],cf=Ra({priority:450,compile:function(){return{pre:function(a,b,d){a.$eval(d.ngInit)}}}}),qf=function(){return{restrict:"A",priority:100,require:"ngModel",link:function(a,b,d,c){var e=d.ngList||", ",f="false"!==d.ngTrim,g=f?U(e):e;c.$parsers.push(function(a){if(!z(a)){var b=[];a&&r(a.split(g),function(a){a&&b.push(f?U(a):a)});return b}});c.$formatters.push(function(a){if(H(a))return a.join(e)}); -c.$isEmpty=function(a){return!a||!a.length}}}},mb="ng-valid",$d="ng-invalid",Za="ng-pristine",Vb="ng-dirty",ob=F("ngModel");Rb.$inject="$scope $exceptionHandler $attrs $element $parse $animate $timeout $q $interpolate".split(" ");Rb.prototype={$$initGetterSetters:function(){if(this.$options.getOption("getterSetter")){var a=this.$$parse(this.$$attr.ngModel+"()"),b=this.$$parse(this.$$attr.ngModel+"($$$p)");this.$$ngModelGet=function(b){var c=this.$$parsedNgModel(b);B(c)&&(c=a(b));return c};this.$$ngModelSet= -function(a,c){B(this.$$parsedNgModel(a))?b(a,{$$$p:c}):this.$$parsedNgModelAssign(a,c)}}else if(!this.$$parsedNgModel.assign)throw ob("nonassign",this.$$attr.ngModel,za(this.$$element));},$render:E,$isEmpty:function(a){return z(a)||""===a||null===a||a!==a},$$updateEmptyClasses:function(a){this.$isEmpty(a)?(this.$$animate.removeClass(this.$$element,"ng-not-empty"),this.$$animate.addClass(this.$$element,"ng-empty")):(this.$$animate.removeClass(this.$$element,"ng-empty"),this.$$animate.addClass(this.$$element, -"ng-not-empty"))},$setPristine:function(){this.$dirty=!1;this.$pristine=!0;this.$$animate.removeClass(this.$$element,Vb);this.$$animate.addClass(this.$$element,Za)},$setDirty:function(){this.$dirty=!0;this.$pristine=!1;this.$$animate.removeClass(this.$$element,Za);this.$$animate.addClass(this.$$element,Vb);this.$$parentForm.$setDirty()},$setUntouched:function(){this.$touched=!1;this.$untouched=!0;this.$$animate.setClass(this.$$element,"ng-untouched","ng-touched")},$setTouched:function(){this.$touched= -!0;this.$untouched=!1;this.$$animate.setClass(this.$$element,"ng-touched","ng-untouched")},$rollbackViewValue:function(){this.$$timeout.cancel(this.$$pendingDebounce);this.$viewValue=this.$$lastCommittedViewValue;this.$render()},$validate:function(){if(!X(this.$modelValue)){var a=this.$$lastCommittedViewValue,b=this.$$rawModelValue,d=this.$valid,c=this.$modelValue,e=this.$options.getOption("allowInvalid"),f=this;this.$$runValidators(b,a,function(a){e||d===a||(f.$modelValue=a?b:void 0,f.$modelValue!== -c&&f.$$writeModelToScope())})}},$$runValidators:function(a,b,d){function c(){var c=!0;r(h.$validators,function(d,e){var g=Boolean(d(a,b));c=c&&g;f(e,g)});return c?!0:(r(h.$asyncValidators,function(a,b){f(b,null)}),!1)}function e(){var c=[],d=!0;r(h.$asyncValidators,function(e,g){var h=e(a,b);if(!h||!B(h.then))throw ob("nopromise",h);f(g,void 0);c.push(h.then(function(){f(g,!0)},function(){d=!1;f(g,!1)}))});c.length?h.$$q.all(c).then(function(){g(d)},E):g(!0)}function f(a,b){k===h.$$currentValidationRunId&& -h.$setValidity(a,b)}function g(a){k===h.$$currentValidationRunId&&d(a)}this.$$currentValidationRunId++;var k=this.$$currentValidationRunId,h=this;(function(){var a=h.$$parserName;if(z(h.$$parserValid))f(a,null);else return h.$$parserValid||(r(h.$validators,function(a,b){f(b,null)}),r(h.$asyncValidators,function(a,b){f(b,null)})),f(a,h.$$parserValid),h.$$parserValid;return!0})()?c()?e():g(!1):g(!1)},$commitViewValue:function(){var a=this.$viewValue;this.$$timeout.cancel(this.$$pendingDebounce);if(this.$$lastCommittedViewValue!== -a||""===a&&this.$$hasNativeValidators)this.$$updateEmptyClasses(a),this.$$lastCommittedViewValue=a,this.$pristine&&this.$setDirty(),this.$$parseAndValidate()},$$parseAndValidate:function(){var a=this.$$lastCommittedViewValue,b=this;this.$$parserValid=z(a)?void 0:!0;this.$setValidity(this.$$parserName,null);this.$$parserName="parse";if(this.$$parserValid)for(var d=0;dg||e.$isEmpty(b)||b.length<=g}}}}}],ad=["$parse",function(a){return{restrict:"A",require:"?ngModel",link:function(b,d,c,e){if(e){var f=c.minlength||a(c.ngMinlength)(b),g=Tb(f)||-1;c.$observe("minlength",function(a){f!== -a&&(g=Tb(a)||-1,f=a,e.$validate())});e.$validators.minlength=function(a,b){return e.$isEmpty(b)||b.length>=g}}}}}];C.angular.bootstrap?C.console&&console.log("WARNING: Tried to load AngularJS more than once."):(Fe(),Je(ca),ca.module("ngLocale",[],["$provide",function(a){function b(a){a+="";var b=a.indexOf(".");return-1==b?0:a.length-b-1}a.value("$locale",{DATETIME_FORMATS:{AMPMS:["AM","PM"],DAY:"Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "),ERANAMES:["Before Christ","Anno Domini"], -ERAS:["BC","AD"],FIRSTDAYOFWEEK:6,MONTH:"January February March April May June July August September October November December".split(" "),SHORTDAY:"Sun Mon Tue Wed Thu Fri Sat".split(" "),SHORTMONTH:"Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "),STANDALONEMONTH:"January February March April May June July August September October November December".split(" "),WEEKENDRANGE:[5,6],fullDate:"EEEE, MMMM d, y",longDate:"MMMM d, y",medium:"MMM d, y h:mm:ss a",mediumDate:"MMM d, y",mediumTime:"h:mm:ss a", -"short":"M/d/yy h:mm a",shortDate:"M/d/yy",shortTime:"h:mm a"},NUMBER_FORMATS:{CURRENCY_SYM:"$",DECIMAL_SEP:".",GROUP_SEP:",",PATTERNS:[{gSize:3,lgSize:3,maxFrac:3,minFrac:0,minInt:1,negPre:"-",negSuf:"",posPre:"",posSuf:""},{gSize:3,lgSize:3,maxFrac:2,minFrac:2,minInt:1,negPre:"-\u00a4",negSuf:"",posPre:"\u00a4",posSuf:""}]},id:"en-us",localeID:"en_US",pluralCat:function(a,c){var e=a|0,f=c;void 0===f&&(f=Math.min(b(a),3));Math.pow(10,f);return 1==e&&0==f?"one":"other"}})}]),x(function(){Ae(C.document, -Uc)}))})(window);!window.angular.$$csp().noInlineStyle&&window.angular.element(document.head).prepend(''); -//# sourceMappingURL=angular.min.js.map diff --git a/node_modules/angular/angular.min.js.gzip b/node_modules/angular/angular.min.js.gzip deleted file mode 100644 index 9ca1008..0000000 Binary files a/node_modules/angular/angular.min.js.gzip and /dev/null differ diff --git a/node_modules/angular/angular.min.js.map b/node_modules/angular/angular.min.js.map deleted file mode 100644 index 0953f56..0000000 --- a/node_modules/angular/angular.min.js.map +++ /dev/null @@ -1,8 +0,0 @@ -{ -"version":3, -"file":"angular.min.js", -"lineCount":349, -"mappings":"A;;;;;aAKC,SAAQ,CAACA,CAAD,CAAS,CAwClBC,QAASA,GAAmB,CAACC,CAAD,CAAS,CACnC,GAAIC,CAAA,CAASD,CAAT,CAAJ,CACME,CAAA,CAAUF,CAAAG,eAAV,CAGJ,GAFEC,EAAAD,eAEF,CAFgCE,EAAA,CAAsBL,CAAAG,eAAtB,CAAA,CAA+CH,CAAAG,eAA/C,CAAuEG,GAEvG,EAAIJ,CAAA,CAAUF,CAAAO,sBAAV,CAAJ,EAA+CC,EAAA,CAAUR,CAAAO,sBAAV,CAA/C,GACEH,EAAAG,sBADF,CACuCP,CAAAO,sBADvC,CAJF,KAQE,OAAOH,GAT0B,CAkBrCC,QAASA,GAAqB,CAACI,CAAD,CAAW,CACvC,MAAOC,EAAA,CAASD,CAAT,CAAP,EAAwC,CAAxC,CAA6BA,CADU,CAmCzCE,QAAAA,EAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,EAAAA,KAAAA,OAAAA,SAAAA,EAAAA,CAAAA,IAAAA,EAAAA,SAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,EAAAA,CAAAA,GAAAA,EAAAA,CAAAA,CAAAA,CAAAA,CAAAA,GAAAA,CAAAA,EAAAA,EAAAA,CAAAA,CAAAA,sCAAAA,EAAAA,CAAAA,CAAAA,CAAAA,CAAAA,GAAAA,CAAAA,EAAAA,EAAAA,CAAAA,KAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,SAAAA,OAAAA,CAAAA,CAAAA,EAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,EAAAA,CAAAA,EAAAA,CAAAA,CAAAA,GAAAA,CAAAA,GAAAA,EAAAA,GAAAA,EAAAA,CAAAA,CAAAA,CAAAA,EAAAA,GAAAA,KAAAA,EAAAA,kBAAAA;AAAAA,CAAAA,EAAAA,CAAAA,SAAAA,CAAAA,CAAAA,CAAAA,EAAAA,CAAAA,UAAAA,EAAAA,MAAAA,EAAAA,CAAAA,CAAAA,SAAAA,EAAAA,QAAAA,CAAAA,aAAAA,CAAAA,EAAAA,CAAAA,CAAAA,WAAAA,EAAAA,MAAAA,EAAAA,CAAAA,WAAAA,CAAAA,QAAAA,EAAAA,MAAAA,EAAAA,CAAAA,IAAAA,UAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,EAAAA,EAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,MAAAA,KAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CA2NAC,QAASA,GAAW,CAACC,CAAD,CAAM,CAGxB,GAAW,IAAX,EAAIA,CAAJ,EAAmBC,EAAA,CAASD,CAAT,CAAnB,CAAkC,MAAO,CAAA,CAMzC,IAAIE,CAAA,CAAQF,CAAR,CAAJ,EAAoBG,CAAA,CAASH,CAAT,CAApB,EAAsCI,CAAtC,EAAgDJ,CAAhD,WAA+DI,EAA/D,CAAwE,MAAO,CAAA,CAI/E,KAAIC,EAAS,QAATA,EAAqBC,OAAA,CAAON,CAAP,CAArBK,EAAoCL,CAAAK,OAIxC,OAAOR,EAAA,CAASQ,CAAT,CAAP,GAAsC,CAAtC,EAA4BA,CAA5B,EAA4CA,CAA5C,CAAqD,CAArD,GAA2DL,EAA3D,EAAsF,UAAtF,GAAkE,MAAOA,EAAAO,KAAzE,CAjBwB,CAwD1BC,QAASA,EAAO,CAACR,CAAD,CAAMS,CAAN,CAAgBC,CAAhB,CAAyB,CAAA,IACnCC,CADmC,CAC9BN,CACT,IAAIL,CAAJ,CACE,GAAIY,CAAA,CAAWZ,CAAX,CAAJ,CACE,IAAKW,CAAL,GAAYX,EAAZ,CACc,WAAZ,GAAIW,CAAJ,EAAmC,QAAnC,GAA2BA,CAA3B,EAAuD,MAAvD,GAA+CA,CAA/C,EAAiEX,CAAAa,eAAA,CAAmBF,CAAnB,CAAjE,EACEF,CAAAK,KAAA,CAAcJ,CAAd,CAAuBV,CAAA,CAAIW,CAAJ,CAAvB,CAAiCA,CAAjC,CAAsCX,CAAtC,CAHN,KAMO,IAAIE,CAAA,CAAQF,CAAR,CAAJ;AAAoBD,EAAA,CAAYC,CAAZ,CAApB,CAAsC,CAC3C,IAAIe,EAA6B,QAA7BA,GAAc,MAAOf,EACpBW,EAAA,CAAM,CAAX,KAAcN,CAAd,CAAuBL,CAAAK,OAAvB,CAAmCM,CAAnC,CAAyCN,CAAzC,CAAiDM,CAAA,EAAjD,CACE,CAAII,CAAJ,EAAmBJ,CAAnB,GAA0BX,EAA1B,GACES,CAAAK,KAAA,CAAcJ,CAAd,CAAuBV,CAAA,CAAIW,CAAJ,CAAvB,CAAiCA,CAAjC,CAAsCX,CAAtC,CAJuC,CAAtC,IAOA,IAAIA,CAAAQ,QAAJ,EAAmBR,CAAAQ,QAAnB,GAAmCA,CAAnC,CACHR,CAAAQ,QAAA,CAAYC,CAAZ,CAAsBC,CAAtB,CAA+BV,CAA/B,CADG,KAEA,IAAIgB,EAAA,CAAchB,CAAd,CAAJ,CAEL,IAAKW,CAAL,GAAYX,EAAZ,CACES,CAAAK,KAAA,CAAcJ,CAAd,CAAuBV,CAAA,CAAIW,CAAJ,CAAvB,CAAiCA,CAAjC,CAAsCX,CAAtC,CAHG,KAKA,IAAkC,UAAlC,GAAI,MAAOA,EAAAa,eAAX,CAEL,IAAKF,CAAL,GAAYX,EAAZ,CACMA,CAAAa,eAAA,CAAmBF,CAAnB,CAAJ,EACEF,CAAAK,KAAA,CAAcJ,CAAd,CAAuBV,CAAA,CAAIW,CAAJ,CAAvB,CAAiCA,CAAjC,CAAsCX,CAAtC,CAJC,KASL,KAAKW,CAAL,GAAYX,EAAZ,CACMa,EAAAC,KAAA,CAAoBd,CAApB,CAAyBW,CAAzB,CAAJ,EACEF,CAAAK,KAAA,CAAcJ,CAAd,CAAuBV,CAAA,CAAIW,CAAJ,CAAvB,CAAiCA,CAAjC,CAAsCX,CAAtC,CAKR,OAAOA,EAvCgC,CA0CzCiB,QAASA,GAAa,CAACjB,CAAD,CAAMS,CAAN,CAAgBC,CAAhB,CAAyB,CAE7C,IADA,IAAIQ,EAAOZ,MAAAY,KAAA,CAAYlB,CAAZ,CAAAmB,KAAA,EAAX,CACSC,EAAI,CAAb,CAAgBA,CAAhB,CAAoBF,CAAAb,OAApB,CAAiCe,CAAA,EAAjC,CACEX,CAAAK,KAAA,CAAcJ,CAAd,CAAuBV,CAAA,CAAIkB,CAAA,CAAKE,CAAL,CAAJ,CAAvB,CAAqCF,CAAA,CAAKE,CAAL,CAArC,CAEF,OAAOF,EALsC,CAc/CG,QAASA,GAAa,CAACC,CAAD,CAAa,CACjC,MAAO,SAAQ,CAACC,CAAD,CAAQZ,CAAR,CAAa,CAACW,CAAA,CAAWX,CAAX,CAAgBY,CAAhB,CAAD,CADK,CAcnCC,QAASA,GAAO,EAAG,CACjB,MAAO,EAAEC,EADQ,CAtbD;AAyclBC,QAASA,GAAU,CAACC,CAAD,CAAMC,CAAN,CAAYC,CAAZ,CAAkB,CAGnC,IAFA,IAAIC,EAAIH,CAAAI,UAAR,CAESX,EAAI,CAFb,CAEgBY,EAAKJ,CAAAvB,OAArB,CAAkCe,CAAlC,CAAsCY,CAAtC,CAA0C,EAAEZ,CAA5C,CAA+C,CAC7C,IAAIpB,EAAM4B,CAAA,CAAKR,CAAL,CACV,IAAKhC,CAAA,CAASY,CAAT,CAAL,EAAuBY,CAAA,CAAWZ,CAAX,CAAvB,CAEA,IADA,IAAIkB,EAAOZ,MAAAY,KAAA,CAAYlB,CAAZ,CAAX,CACSiC,EAAI,CADb,CACgBC,EAAKhB,CAAAb,OAArB,CAAkC4B,CAAlC,CAAsCC,CAAtC,CAA0CD,CAAA,EAA1C,CAA+C,CAC7C,IAAItB,EAAMO,CAAA,CAAKe,CAAL,CAAV,CACIE,EAAMnC,CAAA,CAAIW,CAAJ,CAENkB,EAAJ,EAAYzC,CAAA,CAAS+C,CAAT,CAAZ,CACMC,EAAA,CAAOD,CAAP,CAAJ,CACER,CAAA,CAAIhB,CAAJ,CADF,CACa,IAAI0B,IAAJ,CAASF,CAAAG,QAAA,EAAT,CADb,CAEWC,EAAA,CAASJ,CAAT,CAAJ,CACLR,CAAA,CAAIhB,CAAJ,CADK,CACM,IAAI6B,MAAJ,CAAWL,CAAX,CADN,CAEIA,CAAAM,SAAJ,CACLd,CAAA,CAAIhB,CAAJ,CADK,CACMwB,CAAAO,UAAA,CAAc,CAAA,CAAd,CADN,CAEIC,EAAA,CAAUR,CAAV,CAAJ,CACLR,CAAA,CAAIhB,CAAJ,CADK,CACMwB,CAAAS,MAAA,EADN,CAGO,WAHP,GAGDjC,CAHC,GAIEvB,CAAA,CAASuC,CAAA,CAAIhB,CAAJ,CAAT,CACL,GADyBgB,CAAA,CAAIhB,CAAJ,CACzB,CADoCT,CAAA,CAAQiC,CAAR,CAAA,CAAe,EAAf,CAAoB,EACxD,EAAAT,EAAA,CAAWC,CAAA,CAAIhB,CAAJ,CAAX,CAAqB,CAACwB,CAAD,CAArB,CAA4B,CAAA,CAA5B,CALG,CAPT,CAgBER,CAAA,CAAIhB,CAAJ,CAhBF,CAgBawB,CApBgC,CAJF,CA6B/BL,CAxChB,CAwCWH,CAvCTI,UADF,CAwCgBD,CAxChB,CAGE,OAqCSH,CArCFI,UAsCT,OAAOJ,EAjC4B,CAsDrCkB,QAASA,EAAM,CAAClB,CAAD,CAAM,CACnB,MAAOD,GAAA,CAAWC,CAAX,CAAgBmB,EAAAhC,KAAA,CAAWiC,SAAX,CAAsB,CAAtB,CAAhB,CAA0C,CAAA,CAA1C,CADY,CAuCrBC,QAASA,GAAK,CAACrB,CAAD,CAAM,CAClB,MAAOD,GAAA,CAAWC,CAAX,CAAgBmB,EAAAhC,KAAA,CAAWiC,SAAX,CAAsB,CAAtB,CAAhB,CAA0C,CAAA,CAA1C,CADW,CAMpBE,QAASA,GAAK,CAACC,CAAD,CAAM,CAClB,MAAOC,SAAA,CAASD,CAAT;AAAc,EAAd,CADW,CAUpBE,QAASA,GAAO,CAACC,CAAD,CAASC,CAAT,CAAgB,CAC9B,MAAOT,EAAA,CAAOvC,MAAAiD,OAAA,CAAcF,CAAd,CAAP,CAA8BC,CAA9B,CADuB,CAoBhCE,QAASA,EAAI,EAAG,EAgChBC,QAASA,GAAQ,CAACC,CAAD,CAAI,CAAC,MAAOA,EAAR,CAIrBC,QAASA,GAAO,CAACpC,CAAD,CAAQ,CAAC,MAAOqC,SAAiB,EAAG,CAAC,MAAOrC,EAAR,CAA5B,CAExBsC,QAASA,GAAiB,CAAC7D,CAAD,CAAM,CAC9B,MAAOY,EAAA,CAAWZ,CAAA8D,SAAX,CAAP,EAAmC9D,CAAA8D,SAAnC,GAAoDA,EADtB,CAiBhCC,QAASA,EAAW,CAACxC,CAAD,CAAQ,CAAC,MAAwB,WAAxB,GAAO,MAAOA,EAAf,CAe5BlC,QAASA,EAAS,CAACkC,CAAD,CAAQ,CAAC,MAAwB,WAAxB,GAAO,MAAOA,EAAf,CAgB1BnC,QAASA,EAAQ,CAACmC,CAAD,CAAQ,CAEvB,MAAiB,KAAjB,GAAOA,CAAP,EAA0C,QAA1C,GAAyB,MAAOA,EAFT,CAWzBP,QAASA,GAAa,CAACO,CAAD,CAAQ,CAC5B,MAAiB,KAAjB,GAAOA,CAAP,EAA0C,QAA1C,GAAyB,MAAOA,EAAhC,EAAsD,CAACyC,EAAA,CAAezC,CAAf,CAD3B,CAiB9BpB,QAASA,EAAQ,CAACoB,CAAD,CAAQ,CAAC,MAAwB,QAAxB,GAAO,MAAOA,EAAf,CAqBzB1B,QAASA,EAAQ,CAAC0B,CAAD,CAAQ,CAAC,MAAwB,QAAxB,GAAO,MAAOA,EAAf,CAezBa,QAASA,GAAM,CAACb,CAAD,CAAQ,CACrB,MAAgC,eAAhC,GAAOuC,EAAAhD,KAAA,CAAcS,CAAd,CADc,CAhuBL;AAivBlBrB,QAASA,EAAO,CAAC+D,CAAD,CAAM,CACpB,MAAOC,MAAAhE,QAAA,CAAc+D,CAAd,CAAP,EAA6BA,CAA7B,WAA4CC,MADxB,CAYtBC,QAASA,GAAO,CAAC5C,CAAD,CAAQ,CAEtB,OADUuC,EAAAhD,KAAAsD,CAAc7C,CAAd6C,CACV,EACE,KAAK,gBAAL,CAAuB,MAAO,CAAA,CAC9B,MAAK,oBAAL,CAA2B,MAAO,CAAA,CAClC,MAAK,uBAAL,CAA8B,MAAO,CAAA,CACrC,SAAS,MAAO7C,EAAP,WAAwB8C,MAJnC,CAFsB,CAsBxBzD,QAASA,EAAU,CAACW,CAAD,CAAQ,CAAC,MAAwB,UAAxB,GAAO,MAAOA,EAAf,CAU3BgB,QAASA,GAAQ,CAAChB,CAAD,CAAQ,CACvB,MAAgC,iBAAhC,GAAOuC,EAAAhD,KAAA,CAAcS,CAAd,CADgB,CAYzBtB,QAASA,GAAQ,CAACD,CAAD,CAAM,CACrB,MAAOA,EAAP,EAAcA,CAAAf,OAAd,GAA6Be,CADR,CAKvBsE,QAASA,GAAO,CAACtE,CAAD,CAAM,CACpB,MAAOA,EAAP,EAAcA,CAAAuE,WAAd,EAAgCvE,CAAAwE,OADZ,CAoBtB7E,QAASA,GAAS,CAAC4B,CAAD,CAAQ,CACxB,MAAwB,SAAxB,GAAO,MAAOA,EADU,CAW1BkD,QAASA,GAAY,CAAClD,CAAD,CAAQ,CAC3B,MAAOA,EAAP,EAAgB1B,CAAA,CAAS0B,CAAAlB,OAAT,CAAhB,EAA0CqE,EAAAC,KAAA,CAAwBb,EAAAhD,KAAA,CAAcS,CAAd,CAAxB,CADf,CA70BX;AAi3BlBoB,QAASA,GAAS,CAACiC,CAAD,CAAO,CACvB,MAAO,EAAGA,CAAAA,CAAH,EACJ,EAAAA,CAAAnC,SAAA,EACGmC,CAAAC,KADH,EACgBD,CAAAE,KADhB,EAC6BF,CAAAG,KAD7B,CADI,CADgB,CAUzBC,QAASA,GAAO,CAAC9B,CAAD,CAAM,CAAA,IAChBlD,EAAM,EAAIiF,EAAAA,CAAQ/B,CAAAgC,MAAA,CAAU,GAAV,CAAtB,KAAsC9D,CACtC,KAAKA,CAAL,CAAS,CAAT,CAAYA,CAAZ,CAAgB6D,CAAA5E,OAAhB,CAA8Be,CAAA,EAA9B,CACEpB,CAAA,CAAIiF,CAAA,CAAM7D,CAAN,CAAJ,CAAA,CAAgB,CAAA,CAElB,OAAOpB,EALa,CAStBmF,QAASA,GAAS,CAACC,CAAD,CAAU,CAC1B,MAAOC,EAAA,CAAUD,CAAA3C,SAAV,EAA+B2C,CAAA,CAAQ,CAAR,CAA/B,EAA6CA,CAAA,CAAQ,CAAR,CAAA3C,SAA7C,CADmB,CAQ5B6C,QAASA,GAAW,CAACC,CAAD,CAAQhE,CAAR,CAAe,CACjC,IAAIiE,EAAQD,CAAAE,QAAA,CAAclE,CAAd,CACC,EAAb,EAAIiE,CAAJ,EACED,CAAAG,OAAA,CAAaF,CAAb,CAAoB,CAApB,CAEF,OAAOA,EAL0B,CA+FnCG,QAASA,GAAI,CAACC,CAAD,CAASC,CAAT,CAAsBjG,CAAtB,CAAgC,CA+B3CkG,QAASA,EAAW,CAACF,CAAD,CAASC,CAAT,CAAsBjG,CAAtB,CAAgC,CAClDA,CAAA,EACA,IAAe,CAAf,CAAIA,CAAJ,CACE,MAAO,KAET,KAAIkC,EAAI+D,CAAA9D,UAAR,CACIpB,CACJ,IAAIT,CAAA,CAAQ0F,CAAR,CAAJ,CAAqB,CACVxE,CAAAA,CAAI,CAAb,KAAS,IAAOY,EAAK4D,CAAAvF,OAArB,CAAoCe,CAApC,CAAwCY,CAAxC,CAA4CZ,CAAA,EAA5C,CACEyE,CAAAE,KAAA,CAAiBC,CAAA,CAAYJ,CAAA,CAAOxE,CAAP,CAAZ,CAAuBxB,CAAvB,CAAjB,CAFiB,CAArB,IAIO,IAAIoB,EAAA,CAAc4E,CAAd,CAAJ,CAEL,IAAKjF,CAAL,GAAYiF,EAAZ,CACEC,CAAA,CAAYlF,CAAZ,CAAA,CAAmBqF,CAAA,CAAYJ,CAAA,CAAOjF,CAAP,CAAZ,CAAyBf,CAAzB,CAHhB,KAKA,IAAIgG,CAAJ,EAA+C,UAA/C,GAAc,MAAOA,EAAA/E,eAArB,CAEL,IAAKF,CAAL,GAAYiF,EAAZ,CACMA,CAAA/E,eAAA,CAAsBF,CAAtB,CAAJ;CACEkF,CAAA,CAAYlF,CAAZ,CADF,CACqBqF,CAAA,CAAYJ,CAAA,CAAOjF,CAAP,CAAZ,CAAyBf,CAAzB,CADrB,CAHG,KASL,KAAKe,CAAL,GAAYiF,EAAZ,CACM/E,EAAAC,KAAA,CAAoB8E,CAApB,CAA4BjF,CAA5B,CAAJ,GACEkF,CAAA,CAAYlF,CAAZ,CADF,CACqBqF,CAAA,CAAYJ,CAAA,CAAOjF,CAAP,CAAZ,CAAyBf,CAAzB,CADrB,CAKoBkC,EAxmB1B,CAwmBa+D,CAvmBX9D,UADF,CAwmB0BD,CAxmB1B,CAGE,OAqmBW+D,CArmBJ9D,UAsmBP,OAAO8D,EAhC2C,CAmCpDG,QAASA,EAAW,CAACJ,CAAD,CAAShG,CAAT,CAAmB,CAErC,GAAK,CAAAR,CAAA,CAASwG,CAAT,CAAL,CACE,MAAOA,EAIT,KAAIJ,EAAQS,CAAAR,QAAA,CAAoBG,CAApB,CACZ,IAAe,EAAf,GAAIJ,CAAJ,CACE,MAAOU,EAAA,CAAUV,CAAV,CAGT,IAAIvF,EAAA,CAAS2F,CAAT,CAAJ,EAAwBtB,EAAA,CAAQsB,CAAR,CAAxB,CACE,KAAMO,GAAA,CAAS,MAAT,CAAN,CAIEC,IAAAA,EAAe,CAAA,CAAfA,CACAP,EAAcQ,CAAA,CAAST,CAAT,CAEEU,KAAAA,EAApB,GAAIT,CAAJ,GACEA,CACA,CADc3F,CAAA,CAAQ0F,CAAR,CAAA,CAAkB,EAAlB,CAAuBtF,MAAAiD,OAAA,CAAcS,EAAA,CAAe4B,CAAf,CAAd,CACrC,CAAAQ,CAAA,CAAe,CAAA,CAFjB,CAKAH,EAAAF,KAAA,CAAiBH,CAAjB,CACAM,EAAAH,KAAA,CAAeF,CAAf,CAEA,OAAOO,EAAA,CACHN,CAAA,CAAYF,CAAZ,CAAoBC,CAApB,CAAiCjG,CAAjC,CADG,CAEHiG,CA9BiC,CAiCvCQ,QAASA,EAAQ,CAACT,CAAD,CAAS,CACxB,OAAQ9B,EAAAhD,KAAA,CAAc8E,CAAd,CAAR,EACE,KAAK,oBAAL,CACA,KAAK,qBAAL,CACA,KAAK,qBAAL,CACA,KAAK,uBAAL,CACA,KAAK,uBAAL,CACA,KAAK,qBAAL,CACA,KAAK,4BAAL,CACA,KAAK,sBAAL,CACA,KAAK,sBAAL,CACE,MAAO,KAAIA,CAAAW,YAAJ,CAAuBP,CAAA,CAAYJ,CAAAY,OAAZ,CAAvB;AAAmDZ,CAAAa,WAAnD,CAAsEb,CAAAvF,OAAtE,CAET,MAAK,sBAAL,CAEE,GAAKyC,CAAA8C,CAAA9C,MAAL,CAAmB,CAGjB,IAAI4D,EAAS,IAAIC,WAAJ,CAAgBf,CAAAgB,WAAhB,CACbC,EAAA,IAAIC,UAAJ,CAAeJ,CAAf,CAAAG,KAAA,CAA2B,IAAIC,UAAJ,CAAelB,CAAf,CAA3B,CAEA,OAAOc,EANU,CAQnB,MAAOd,EAAA9C,MAAA,CAAa,CAAb,CAET,MAAK,kBAAL,CACA,KAAK,iBAAL,CACA,KAAK,iBAAL,CACA,KAAK,eAAL,CACE,MAAO,KAAI8C,CAAAW,YAAJ,CAAuBX,CAAAtD,QAAA,EAAvB,CAET,MAAK,iBAAL,CAGE,MAFIyE,EAEGA,CAFE,IAAIvE,MAAJ,CAAWoD,CAAAA,OAAX,CAA0BA,CAAA9B,SAAA,EAAAkD,MAAA,CAAwB,QAAxB,CAAA,CAAkC,CAAlC,CAA1B,CAEFD,CADPA,CAAAE,UACOF,CADQnB,CAAAqB,UACRF,CAAAA,CAET,MAAK,eAAL,CACE,MAAO,KAAInB,CAAAW,YAAJ,CAAuB,CAACX,CAAD,CAAvB,CAAiC,CAACsB,KAAMtB,CAAAsB,KAAP,CAAjC,CApCX,CAuCA,GAAItG,CAAA,CAAWgF,CAAAlD,UAAX,CAAJ,CACE,MAAOkD,EAAAlD,UAAA,CAAiB,CAAA,CAAjB,CAzCe,CAnGiB;AAC3C,IAAIuD,EAAc,EAAlB,CACIC,EAAY,EAChBtG,EAAA,CAAWJ,EAAA,CAAsBI,CAAtB,CAAA,CAAkCA,CAAlC,CAA6CH,GAExD,IAAIoG,CAAJ,CAAiB,CACf,GAAIpB,EAAA,CAAaoB,CAAb,CAAJ,EA/J4B,sBA+J5B,GA/JK/B,EAAAhD,KAAA,CA+J0C+E,CA/J1C,CA+JL,CACE,KAAMM,GAAA,CAAS,MAAT,CAAN,CAEF,GAAIP,CAAJ,GAAeC,CAAf,CACE,KAAMM,GAAA,CAAS,KAAT,CAAN,CAIEjG,CAAA,CAAQ2F,CAAR,CAAJ,CACEA,CAAAxF,OADF,CACuB,CADvB,CAGEG,CAAA,CAAQqF,CAAR,CAAqB,QAAQ,CAACtE,CAAD,CAAQZ,CAAR,CAAa,CAC5B,WAAZ,GAAIA,CAAJ,EACE,OAAOkF,CAAA,CAAYlF,CAAZ,CAF+B,CAA1C,CAOFsF,EAAAF,KAAA,CAAiBH,CAAjB,CACAM,EAAAH,KAAA,CAAeF,CAAf,CACA,OAAOC,EAAA,CAAYF,CAAZ,CAAoBC,CAApB,CAAiCjG,CAAjC,CArBQ,CAwBjB,MAAOoG,EAAA,CAAYJ,CAAZ,CAAoBhG,CAApB,CA7BoC,CAmJ7CuH,QAASA,GAAa,CAACC,CAAD,CAAIC,CAAJ,CAAO,CAAE,MAAOD,EAAP,GAAaC,CAAb,EAAmBD,CAAnB,GAAyBA,CAAzB,EAA8BC,CAA9B,GAAoCA,CAAtC,CAkE7BC,QAASA,GAAM,CAACC,CAAD,CAAKC,CAAL,CAAS,CACtB,GAAID,CAAJ,GAAWC,CAAX,CAAe,MAAO,CAAA,CACtB,IAAW,IAAX,GAAID,CAAJ,EAA0B,IAA1B,GAAmBC,CAAnB,CAAgC,MAAO,CAAA,CAEvC,IAAID,CAAJ,GAAWA,CAAX,EAAiBC,CAAjB,GAAwBA,CAAxB,CAA4B,MAAO,CAAA,CAJb,KAKlBC,EAAK,MAAOF,EALM,CAKsB5G,CAC5C,IAAI8G,CAAJ,GADyBC,MAAOF,EAChC,EAAwB,QAAxB,GAAiBC,CAAjB,CACE,GAAIvH,CAAA,CAAQqH,CAAR,CAAJ,CAAiB,CACf,GAAK,CAAArH,CAAA,CAAQsH,CAAR,CAAL,CAAkB,MAAO,CAAA,CACzB,KAAKnH,CAAL,CAAckH,CAAAlH,OAAd,IAA6BmH,CAAAnH,OAA7B,CAAwC,CACtC,IAAKM,CAAL,CAAW,CAAX,CAAcA,CAAd,CAAoBN,CAApB,CAA4BM,CAAA,EAA5B,CACE,GAAK,CAAA2G,EAAA,CAAOC,CAAA,CAAG5G,CAAH,CAAP;AAAgB6G,CAAA,CAAG7G,CAAH,CAAhB,CAAL,CAA+B,MAAO,CAAA,CAExC,OAAO,CAAA,CAJ+B,CAFzB,CAAjB,IAQO,CAAA,GAAIyB,EAAA,CAAOmF,CAAP,CAAJ,CACL,MAAKnF,GAAA,CAAOoF,CAAP,CAAL,CACOL,EAAA,CAAcI,CAAAI,QAAA,EAAd,CAA4BH,CAAAG,QAAA,EAA5B,CADP,CAAwB,CAAA,CAEnB,IAAIpF,EAAA,CAASgF,CAAT,CAAJ,CACL,MAAKhF,GAAA,CAASiF,CAAT,CAAL,CACOD,CAAAzD,SAAA,EADP,GACyB0D,CAAA1D,SAAA,EADzB,CAA0B,CAAA,CAG1B,IAAIQ,EAAA,CAAQiD,CAAR,CAAJ,EAAmBjD,EAAA,CAAQkD,CAAR,CAAnB,EAAkCvH,EAAA,CAASsH,CAAT,CAAlC,EAAkDtH,EAAA,CAASuH,CAAT,CAAlD,EACEtH,CAAA,CAAQsH,CAAR,CADF,EACiBpF,EAAA,CAAOoF,CAAP,CADjB,EAC+BjF,EAAA,CAASiF,CAAT,CAD/B,CAC6C,MAAO,CAAA,CACpDI,EAAA,CAASC,CAAA,EACT,KAAKlH,CAAL,GAAY4G,EAAZ,CACE,GAAsB,GAAtB,GAAI5G,CAAAmH,OAAA,CAAW,CAAX,CAAJ,EAA6B,CAAAlH,CAAA,CAAW2G,CAAA,CAAG5G,CAAH,CAAX,CAA7B,CAAA,CACA,GAAK,CAAA2G,EAAA,CAAOC,CAAA,CAAG5G,CAAH,CAAP,CAAgB6G,CAAA,CAAG7G,CAAH,CAAhB,CAAL,CAA+B,MAAO,CAAA,CACtCiH,EAAA,CAAOjH,CAAP,CAAA,CAAc,CAAA,CAFd,CAIF,IAAKA,CAAL,GAAY6G,EAAZ,CACE,GAAM,EAAA7G,CAAA,GAAOiH,EAAP,CAAN,EACsB,GADtB,GACIjH,CAAAmH,OAAA,CAAW,CAAX,CADJ,EAEIzI,CAAA,CAAUmI,CAAA,CAAG7G,CAAH,CAAV,CAFJ,EAGK,CAAAC,CAAA,CAAW4G,CAAA,CAAG7G,CAAH,CAAX,CAHL,CAG0B,MAAO,CAAA,CAEnC,OAAO,CAAA,CArBF,CAwBT,MAAO,CAAA,CAvCe,CAmIxBoH,QAASA,GAAM,CAACC,CAAD,CAASC,CAAT,CAAiBzC,CAAjB,CAAwB,CACrC,MAAOwC,EAAAD,OAAA,CAAcjF,EAAAhC,KAAA,CAAWmH,CAAX,CAAmBzC,CAAnB,CAAd,CAD8B,CA0BvC0C,QAASA,GAAI,CAACC,CAAD,CAAOC,CAAP,CAAW,CACtB,IAAIC,EAA+B,CAAnB,CAAAtF,SAAA1C,OAAA,CAtBTyC,EAAAhC,KAAA,CAsB0CiC,SAtB1C,CAsBqDuF,CAtBrD,CAsBS,CAAiD,EACjE,OAAI,CAAA1H,CAAA,CAAWwH,CAAX,CAAJ,EAAwBA,CAAxB;AAAsC5F,MAAtC,CAcS4F,CAdT,CACSC,CAAAhI,OAAA,CACH,QAAQ,EAAG,CACT,MAAO0C,UAAA1C,OAAA,CACH+H,CAAAG,MAAA,CAASJ,CAAT,CAAeJ,EAAA,CAAOM,CAAP,CAAkBtF,SAAlB,CAA6B,CAA7B,CAAf,CADG,CAEHqF,CAAAG,MAAA,CAASJ,CAAT,CAAeE,CAAf,CAHK,CADR,CAMH,QAAQ,EAAG,CACT,MAAOtF,UAAA1C,OAAA,CACH+H,CAAAG,MAAA,CAASJ,CAAT,CAAepF,SAAf,CADG,CAEHqF,CAAAtH,KAAA,CAAQqH,CAAR,CAHK,CATK,CAqBxBK,QAASA,GAAc,CAAC7H,CAAD,CAAMY,CAAN,CAAa,CAClC,IAAIkH,EAAMlH,CAES,SAAnB,GAAI,MAAOZ,EAAX,EAAiD,GAAjD,GAA+BA,CAAAmH,OAAA,CAAW,CAAX,CAA/B,EAA0E,GAA1E,GAAwDnH,CAAAmH,OAAA,CAAW,CAAX,CAAxD,CACEW,CADF,CACQnC,IAAAA,EADR,CAEWrG,EAAA,CAASsB,CAAT,CAAJ,CACLkH,CADK,CACC,SADD,CAEIlH,CAAJ,EAActC,CAAAyJ,SAAd,GAAkCnH,CAAlC,CACLkH,CADK,CACC,WADD,CAEInE,EAAA,CAAQ/C,CAAR,CAFJ,GAGLkH,CAHK,CAGC,QAHD,CAMP,OAAOA,EAb2B,CAqDpCE,QAASA,GAAM,CAAC3I,CAAD,CAAM4I,CAAN,CAAc,CAC3B,GAAI,CAAA7E,CAAA,CAAY/D,CAAZ,CAAJ,CAIA,MAHKH,EAAA,CAAS+I,CAAT,CAGE,GAFLA,CAEK,CAFIA,CAAA,CAAS,CAAT,CAAa,IAEjB,EAAAC,IAAAC,UAAA,CAAe9I,CAAf,CAAoBwI,EAApB,CAAoCI,CAApC,CALoB,CAqB7BG,QAASA,GAAQ,CAACC,CAAD,CAAO,CACtB,MAAO7I,EAAA,CAAS6I,CAAT,CAAA,CACDH,IAAAI,MAAA,CAAWD,CAAX,CADC,CAEDA,CAHgB,CAQxBE,QAASA,GAAgB,CAACC,CAAD,CAAWC,CAAX,CAAqB,CAG5CD,CAAA,CAAWA,CAAAE,QAAA,CAAiBC,EAAjB,CAA6B,EAA7B,CACX,KAAIC,EAA0BlH,IAAA4G,MAAA,CAAW,wBAAX;AAAsCE,CAAtC,CAA1BI,CAA4E,GAChF,OAAOC,EAAA,CAAYD,CAAZ,CAAA,CAAuCH,CAAvC,CAAkDG,CALb,CAS9CE,QAASA,GAAc,CAACC,CAAD,CAAOC,CAAP,CAAgB,CACrCD,CAAA,CAAO,IAAIrH,IAAJ,CAASqH,CAAA/B,QAAA,EAAT,CACP+B,EAAAE,WAAA,CAAgBF,CAAAG,WAAA,EAAhB,CAAoCF,CAApC,CACA,OAAOD,EAH8B,CAOvCI,QAASA,GAAsB,CAACJ,CAAD,CAAOP,CAAP,CAAiBY,CAAjB,CAA0B,CACvDA,CAAA,CAAUA,CAAA,CAAW,EAAX,CAAe,CACzB,KAAIC,EAAqBN,CAAAO,kBAAA,EACrBC,EAAAA,CAAiBhB,EAAA,CAAiBC,CAAjB,CAA2Ba,CAA3B,CACrB,OAAOP,GAAA,CAAeC,CAAf,CAAqBK,CAArB,EAAgCG,CAAhC,CAAiDF,CAAjD,EAJgD,CAWzDG,QAASA,GAAW,CAAC/E,CAAD,CAAU,CAC5BA,CAAA,CAAUhF,CAAA,CAAOgF,CAAP,CAAAxC,MAAA,EAAAwH,MAAA,EACV,KAAIC,EAAWjK,CAAA,CAAO,aAAP,CAAAkK,OAAA,CAA6BlF,CAA7B,CAAAmF,KAAA,EACf,IAAI,CACF,MAAOnF,EAAA,CAAQ,CAAR,CAAAoF,SAAA,GAAwBC,EAAxB,CAAyCpF,CAAA,CAAUgF,CAAV,CAAzC,CACHA,CAAArD,MAAA,CACQ,YADR,CAAA,CACsB,CADtB,CAAAqC,QAAA,CAEU,YAFV,CAEwB,QAAQ,CAACrC,CAAD,CAAQvE,CAAR,CAAkB,CAAC,MAAO,GAAP,CAAa4C,CAAA,CAAU5C,CAAV,CAAd,CAFlD,CAFF,CAKF,MAAOiI,CAAP,CAAU,CACV,MAAOrF,EAAA,CAAUgF,CAAV,CADG,CARgB,CAyB9BM,QAASA,GAAqB,CAACpJ,CAAD,CAAQ,CACpC,GAAI,CACF,MAAOqJ,mBAAA,CAAmBrJ,CAAnB,CADL,CAEF,MAAOmJ,CAAP,CAAU,EAHwB,CAatCG,QAASA,GAAa,CAAYC,CAAZ,CAAsB,CAC1C,IAAI9K,EAAM,EACVQ,EAAA,CAAQ0E,CAAC4F,CAAD5F,EAAa,EAAbA,OAAA,CAAuB,GAAvB,CAAR;AAAqC,QAAQ,CAAC4F,CAAD,CAAW,CAAA,IAClDC,CADkD,CACtCpK,CADsC,CACjC8H,CACjBqC,EAAJ,GACEnK,CAOA,CAPMmK,CAON,CAPiBA,CAAAzB,QAAA,CAAiB,KAAjB,CAAuB,KAAvB,CAOjB,CANA0B,CAMA,CANaD,CAAArF,QAAA,CAAiB,GAAjB,CAMb,CALoB,EAKpB,GALIsF,CAKJ,GAJEpK,CACA,CADMmK,CAAAE,UAAA,CAAmB,CAAnB,CAAsBD,CAAtB,CACN,CAAAtC,CAAA,CAAMqC,CAAAE,UAAA,CAAmBD,CAAnB,CAAgC,CAAhC,CAGR,EADApK,CACA,CADMgK,EAAA,CAAsBhK,CAAtB,CACN,CAAItB,CAAA,CAAUsB,CAAV,CAAJ,GACE8H,CACA,CADMpJ,CAAA,CAAUoJ,CAAV,CAAA,CAAiBkC,EAAA,CAAsBlC,CAAtB,CAAjB,CAA8C,CAAA,CACpD,CAAK5H,EAAAC,KAAA,CAAoBd,CAApB,CAAyBW,CAAzB,CAAL,CAEWT,CAAA,CAAQF,CAAA,CAAIW,CAAJ,CAAR,CAAJ,CACLX,CAAA,CAAIW,CAAJ,CAAAoF,KAAA,CAAc0C,CAAd,CADK,CAGLzI,CAAA,CAAIW,CAAJ,CAHK,CAGM,CAACX,CAAA,CAAIW,CAAJ,CAAD,CAAU8H,CAAV,CALb,CACEzI,CAAA,CAAIW,CAAJ,CADF,CACa8H,CAHf,CARF,CAFsD,CAAxD,CAsBA,OAAOzI,EAxBmC,CA2B5CiL,QAASA,GAAU,CAACjL,CAAD,CAAM,CACvB,IAAIkL,EAAQ,EACZ1K,EAAA,CAAQR,CAAR,CAAa,QAAQ,CAACuB,CAAD,CAAQZ,CAAR,CAAa,CAC5BT,CAAA,CAAQqB,CAAR,CAAJ,CACEf,CAAA,CAAQe,CAAR,CAAe,QAAQ,CAAC4J,CAAD,CAAa,CAClCD,CAAAnF,KAAA,CAAWqF,EAAA,CAAezK,CAAf,CAAoB,CAAA,CAApB,CAAX,EAC2B,CAAA,CAAf,GAAAwK,CAAA,CAAsB,EAAtB,CAA2B,GAA3B,CAAiCC,EAAA,CAAeD,CAAf,CAA2B,CAAA,CAA3B,CAD7C,EADkC,CAApC,CADF,CAMAD,CAAAnF,KAAA,CAAWqF,EAAA,CAAezK,CAAf,CAAoB,CAAA,CAApB,CAAX,EACsB,CAAA,CAAV,GAAAY,CAAA,CAAiB,EAAjB,CAAsB,GAAtB,CAA4B6J,EAAA,CAAe7J,CAAf,CAAsB,CAAA,CAAtB,CADxC,EAPgC,CAAlC,CAWA,OAAO2J,EAAA7K,OAAA,CAAe6K,CAAAG,KAAA,CAAW,GAAX,CAAf,CAAiC,EAbjB,CA4BzBC,QAASA,GAAgB,CAAC7C,CAAD,CAAM,CAC7B,MAAO2C,GAAA,CAAe3C,CAAf,CAAoB,CAAA,CAApB,CAAAY,QAAA,CACY,OADZ,CACqB,GADrB,CAAAA,QAAA,CAEY,OAFZ,CAEqB,GAFrB,CAAAA,QAAA,CAGY,OAHZ,CAGqB,GAHrB,CADsB,CAmB/B+B,QAASA,GAAc,CAAC3C,CAAD;AAAM8C,CAAN,CAAuB,CAC5C,MAAOC,mBAAA,CAAmB/C,CAAnB,CAAAY,QAAA,CACY,OADZ,CACqB,GADrB,CAAAA,QAAA,CAEY,OAFZ,CAEqB,GAFrB,CAAAA,QAAA,CAGY,MAHZ,CAGoB,GAHpB,CAAAA,QAAA,CAIY,OAJZ,CAIqB,GAJrB,CAAAA,QAAA,CAKY,OALZ,CAKqB,GALrB,CAAAA,QAAA,CAMY,MANZ,CAMqBkC,CAAA,CAAkB,KAAlB,CAA0B,GAN/C,CADqC,CAY9CE,QAASA,GAAc,CAACrG,CAAD,CAAUsG,CAAV,CAAkB,CAAA,IACnC5G,CADmC,CAC7B1D,CAD6B,CAC1BY,EAAK2J,EAAAtL,OAClB,KAAKe,CAAL,CAAS,CAAT,CAAYA,CAAZ,CAAgBY,CAAhB,CAAoB,EAAEZ,CAAtB,CAEE,GADA0D,CACI,CADG6G,EAAA,CAAevK,CAAf,CACH,CADuBsK,CACvB,CAAAvL,CAAA,CAAS2E,CAAT,CAAgBM,CAAAwG,aAAA,CAAqB9G,CAArB,CAAhB,CAAJ,CACE,MAAOA,EAGX,OAAO,KARgC,CA6MzC+G,QAASA,GAAW,CAACzG,CAAD,CAAU0G,CAAV,CAAqB,CAAA,IACnCC,CADmC,CAEnCC,CAFmC,CAGnC7M,EAAS,EAGbqB,EAAA,CAAQmL,EAAR,CAAwB,QAAQ,CAACM,CAAD,CAAS,CACnCC,CAAAA,EAAgB,KAEfH,EAAAA,CAAL,EAAmB3G,CAAA+G,aAAnB,EAA2C/G,CAAA+G,aAAA,CAAqBD,CAArB,CAA3C,GACEH,CACA,CADa3G,CACb,CAAA4G,CAAA,CAAS5G,CAAAwG,aAAA,CAAqBM,CAArB,CAFX,CAHuC,CAAzC,CAQA1L,EAAA,CAAQmL,EAAR,CAAwB,QAAQ,CAACM,CAAD,CAAS,CACnCC,CAAAA,EAAgB,KACpB,KAAIE,CAECL,EAAAA,CAAL,GAAoBK,CAApB,CAAgChH,CAAAiH,cAAA,CAAsB,GAAtB,CAA4BH,CAAA7C,QAAA,CAAa,GAAb,CAAkB,KAAlB,CAA5B,CAAuD,GAAvD,CAAhC,IACE0C,CACA,CADaK,CACb,CAAAJ,CAAA,CAASI,CAAAR,aAAA,CAAuBM,CAAvB,CAFX,CAJuC,CAAzC,CASIH;CAAJ,GACOO,EAAL,EAKAnN,CAAAoN,SACA,CAD8D,IAC9D,GADkBd,EAAA,CAAeM,CAAf,CAA2B,WAA3B,CAClB,CAAAD,CAAA,CAAUC,CAAV,CAAsBC,CAAA,CAAS,CAACA,CAAD,CAAT,CAAoB,EAA1C,CAA8C7M,CAA9C,CANA,EACEF,CAAAuN,QAAAC,MAAA,CAAqB,4HAArB,CAFJ,CAvBuC,CA6FzCX,QAASA,GAAS,CAAC1G,CAAD,CAAUsH,CAAV,CAAmBvN,CAAnB,CAA2B,CACtCC,CAAA,CAASD,CAAT,CAAL,GAAuBA,CAAvB,CAAgC,EAAhC,CAIAA,EAAA,CAAS0D,CAAA,CAHW8J,CAClBJ,SAAU,CAAA,CADQI,CAGX,CAAsBxN,CAAtB,CACT,KAAIyN,EAAcA,QAAQ,EAAG,CAC3BxH,CAAA,CAAUhF,CAAA,CAAOgF,CAAP,CAEV,IAAIA,CAAAyH,SAAA,EAAJ,CAAwB,CACtB,IAAIzI,EAAOgB,CAAA,CAAQ,CAAR,CAAD,GAAgBnG,CAAAyJ,SAAhB,CAAmC,UAAnC,CAAgDyB,EAAA,CAAY/E,CAAZ,CAE1D,MAAMe,GAAA,CACF,SADE,CAGF/B,CAAAiF,QAAA,CAAY,GAAZ,CAAgB,MAAhB,CAAAA,QAAA,CAAgC,GAAhC,CAAoC,MAApC,CAHE,CAAN,CAHsB,CASxBqD,CAAA,CAAUA,CAAV,EAAqB,EACrBA,EAAAI,QAAA,CAAgB,CAAC,UAAD,CAAa,QAAQ,CAACC,CAAD,CAAW,CAC9CA,CAAAxL,MAAA,CAAe,cAAf,CAA+B6D,CAA/B,CAD8C,CAAhC,CAAhB,CAIIjG,EAAA6N,iBAAJ,EAEEN,CAAA3G,KAAA,CAAa,CAAC,kBAAD;AAAqB,QAAQ,CAACkH,CAAD,CAAmB,CAC3DA,CAAAD,iBAAA,CAAkC,CAAA,CAAlC,CAD2D,CAAhD,CAAb,CAKFN,EAAAI,QAAA,CAAgB,IAAhB,CACID,EAAAA,CAAWK,EAAA,CAAeR,CAAf,CAAwBvN,CAAAoN,SAAxB,CACfM,EAAAM,OAAA,CAAgB,CAAC,YAAD,CAAe,cAAf,CAA+B,UAA/B,CAA2C,WAA3C,CACbC,QAAuB,CAACC,CAAD,CAAQjI,CAAR,CAAiBkI,CAAjB,CAA0BT,CAA1B,CAAoC,CAC1DQ,CAAAE,OAAA,CAAa,QAAQ,EAAG,CACtBnI,CAAAoI,KAAA,CAAa,WAAb,CAA0BX,CAA1B,CACAS,EAAA,CAAQlI,CAAR,CAAA,CAAiBiI,CAAjB,CAFsB,CAAxB,CAD0D,CAD9C,CAAhB,CAQA,OAAOR,EAlCoB,CAA7B,CAqCIY,EAAuB,wBArC3B,CAsCIC,EAAqB,sBAErBzO,EAAJ,EAAcwO,CAAA9I,KAAA,CAA0B1F,CAAAiN,KAA1B,CAAd,GACE/M,CAAA6N,iBACA,CAD0B,CAAA,CAC1B,CAAA/N,CAAAiN,KAAA,CAAcjN,CAAAiN,KAAA7C,QAAA,CAAoBoE,CAApB,CAA0C,EAA1C,CAFhB,CAKA,IAAIxO,CAAJ,EAAe,CAAAyO,CAAA/I,KAAA,CAAwB1F,CAAAiN,KAAxB,CAAf,CACE,MAAOU,EAAA,EAGT3N,EAAAiN,KAAA,CAAcjN,CAAAiN,KAAA7C,QAAA,CAAoBqE,CAApB,CAAwC,EAAxC,CACdC,GAAAC,gBAAA,CAA0BC,QAAQ,CAACC,CAAD,CAAe,CAC/CtN,CAAA,CAAQsN,CAAR,CAAsB,QAAQ,CAAC9B,CAAD,CAAS,CACrCU,CAAA3G,KAAA,CAAaiG,CAAb,CADqC,CAAvC,CAGA,OAAOY,EAAA,EAJwC,CAO7ChM,EAAA,CAAW+M,EAAAI,wBAAX,CAAJ;AACEJ,EAAAI,wBAAA,EAhEyC,CA8E7CC,QAASA,GAAmB,EAAG,CAC7B/O,CAAAiN,KAAA,CAAc,uBAAd,CAAwCjN,CAAAiN,KACxCjN,EAAAgP,SAAAC,OAAA,EAF6B,CAa/BC,QAASA,GAAc,CAACC,CAAD,CAAc,CAC/BvB,CAAAA,CAAWc,EAAAvI,QAAA,CAAgBgJ,CAAhB,CAAAvB,SAAA,EACf,IAAKA,CAAAA,CAAL,CACE,KAAM1G,GAAA,CAAS,MAAT,CAAN,CAGF,MAAO0G,EAAAwB,IAAA,CAAa,eAAb,CAN4B,CAUrCC,QAASA,GAAU,CAACpC,CAAD,CAAOqC,CAAP,CAAkB,CACnCA,CAAA,CAAYA,CAAZ,EAAyB,GACzB,OAAOrC,EAAA7C,QAAA,CAAamF,EAAb,CAAgC,QAAQ,CAACC,CAAD,CAASC,CAAT,CAAc,CAC3D,OAAQA,CAAA,CAAMH,CAAN,CAAkB,EAA1B,EAAgCE,CAAAE,YAAA,EAD2B,CAAtD,CAF4B,CAQrCC,QAASA,GAAU,EAAG,CACpB,IAAIC,CAEJ,IAAIC,CAAAA,EAAJ,CAAA,CAKA,IAAIC,EAASC,EAAA,EASb,EARAC,EAQA,CARSlL,CAAA,CAAYgL,CAAZ,CAAA,CAAsB9P,CAAAgQ,OAAtB,CACCF,CAAD,CACsB9P,CAAA,CAAO8P,CAAP,CADtB,CAAsBzI,IAAAA,EAO/B,GAAc2I,EAAA7G,GAAA8G,GAAd,EACE9O,CACA,CADS6O,EACT,CAAApM,CAAA,CAAOoM,EAAA7G,GAAP,CAAkB,CAChBiF,MAAO8B,EAAA9B,MADS,CAEhB+B,aAAcD,EAAAC,aAFE,CAGhBC,WAA8BF,EAADE,WAHb,CAIhBxC,SAAUsC,EAAAtC,SAJM,CAKhByC,cAAeH,EAAAG,cALC,CAAlB,CAFF;AAUElP,CAVF,CAUWmP,CAMXV,EAAA,CAAoBzO,CAAAoP,UACpBpP,EAAAoP,UAAA,CAAmBC,QAAQ,CAACC,CAAD,CAAQ,CAEjC,IADA,IAAIC,CAAJ,CACSvO,EAAI,CADb,CACgBwO,CAAhB,CAA2C,IAA3C,GAAuBA,CAAvB,CAA8BF,CAAA,CAAMtO,CAAN,CAA9B,EAAiDA,CAAA,EAAjD,CAEE,CADAuO,CACA,CADSA,CAACvP,CAAAyP,MAAA,CAAaD,CAAb,CAADD,EAAuB,EAAvBA,QACT,GAAcA,CAAAG,SAAd,EACE1P,CAAA,CAAOwP,CAAP,CAAAG,eAAA,CAA4B,UAA5B,CAGJlB,EAAA,CAAkBa,CAAlB,CARiC,CAWnC/B,GAAAvI,QAAA,CAAkBhF,CAGlB0O,GAAA,CAAkB,CAAA,CA7ClB,CAHoB,CAsDtBkB,QAASA,GAAS,CAACC,CAAD,CAAM/D,CAAN,CAAYgE,CAAZ,CAAoB,CACpC,GAAKD,CAAAA,CAAL,CACE,KAAM9J,GAAA,CAAS,MAAT,CAA6C+F,CAA7C,EAAqD,GAArD,CAA4DgE,CAA5D,EAAsE,UAAtE,CAAN,CAEF,MAAOD,EAJ6B,CAOtCE,QAASA,GAAW,CAACF,CAAD,CAAM/D,CAAN,CAAYkE,CAAZ,CAAmC,CACjDA,CAAJ,EAA6BlQ,CAAA,CAAQ+P,CAAR,CAA7B,GACIA,CADJ,CACUA,CAAA,CAAIA,CAAA5P,OAAJ,CAAiB,CAAjB,CADV,CAIA2P,GAAA,CAAUpP,CAAA,CAAWqP,CAAX,CAAV,CAA2B/D,CAA3B,CAAiC,sBAAjC,EACK+D,CAAA,EAAsB,QAAtB,GAAO,MAAOA,EAAd,CAAiCA,CAAA1J,YAAA2F,KAAjC,EAAyD,QAAzD,CAAoE,MAAO+D,EADhF,EAEA,OAAOA,EAP8C,CAevDI,QAASA,GAAuB,CAACnE,CAAD,CAAOxL,CAAP,CAAgB,CAC9C,GAAa,gBAAb,GAAIwL,CAAJ,CACE,KAAM/F,GAAA,CAAS,SAAT,CAA8DzF,CAA9D,CAAN,CAF4C,CAchD4P,QAASA,GAAM,CAACtQ,CAAD,CAAMuQ,CAAN,CAAYC,CAAZ,CAA2B,CACxC,GAAKD,CAAAA,CAAL,CAAW,MAAOvQ,EACdkB,EAAAA,CAAOqP,CAAArL,MAAA,CAAW,GAAX,CAKX;IAJA,IAAIvE,CAAJ,CACI8P,EAAezQ,CADnB,CAEI0Q,EAAMxP,CAAAb,OAFV,CAISe,EAAI,CAAb,CAAgBA,CAAhB,CAAoBsP,CAApB,CAAyBtP,CAAA,EAAzB,CACET,CACA,CADMO,CAAA,CAAKE,CAAL,CACN,CAAIpB,CAAJ,GACEA,CADF,CACQ,CAACyQ,CAAD,CAAgBzQ,CAAhB,EAAqBW,CAArB,CADR,CAIF,OAAK6P,CAAAA,CAAL,EAAsB5P,CAAA,CAAWZ,CAAX,CAAtB,CACSkI,EAAA,CAAKuI,CAAL,CAAmBzQ,CAAnB,CADT,CAGOA,CAhBiC,CAwB1C2Q,QAASA,GAAa,CAACC,CAAD,CAAQ,CAM5B,IAJA,IAAIhM,EAAOgM,CAAA,CAAM,CAAN,CAAX,CACIC,EAAUD,CAAA,CAAMA,CAAAvQ,OAAN,CAAqB,CAArB,CADd,CAEIyQ,CAFJ,CAIS1P,EAAI,CAAb,CAAgBwD,CAAhB,GAAyBiM,CAAzB,GAAqCjM,CAArC,CAA4CA,CAAAmM,YAA5C,EAA+D3P,CAAA,EAA/D,CACE,GAAI0P,CAAJ,EAAkBF,CAAA,CAAMxP,CAAN,CAAlB,GAA+BwD,CAA/B,CACOkM,CAGL,GAFEA,CAEF,CAFe1Q,CAAA,CAAO0C,EAAAhC,KAAA,CAAW8P,CAAX,CAAkB,CAAlB,CAAqBxP,CAArB,CAAP,CAEf,EAAA0P,CAAA/K,KAAA,CAAgBnB,CAAhB,CAIJ,OAAOkM,EAAP,EAAqBF,CAfO,CA8B9B/I,QAASA,EAAS,EAAG,CACnB,MAAOvH,OAAAiD,OAAA,CAAc,IAAd,CADY,CAIrBuF,QAASA,GAAS,CAACvH,CAAD,CAAQ,CACxB,GAAa,IAAb,EAAIA,CAAJ,CACE,MAAO,EAET,QAAQ,MAAOA,EAAf,EACE,KAAK,QAAL,CACE,KACF,MAAK,QAAL,CACEA,CAAA,CAAQ,EAAR,CAAaA,CACb,MACF,SAIIA,CAAA,CAHE,CAAAsC,EAAA,CAAkBtC,CAAlB,CAAJ,EAAiCrB,CAAA,CAAQqB,CAAR,CAAjC,EAAoDa,EAAA,CAAOb,CAAP,CAApD,CAGUoH,EAAA,CAAOpH,CAAP,CAHV,CACUA,CAAAuC,SAAA,EARd,CAcA,MAAOvC,EAlBiB,CAqC1ByP,QAASA,GAAiB,CAAC/R,CAAD,CAAS,CAKjCgS,QAASA,EAAM,CAACjR,CAAD,CAAMkM,CAAN,CAAYgF,CAAZ,CAAqB,CAClC,MAAOlR,EAAA,CAAIkM,CAAJ,CAAP,GAAqBlM,CAAA,CAAIkM,CAAJ,CAArB,CAAiCgF,CAAA,EAAjC,CADkC,CAHpC,IAAIC,EAAkBrR,CAAA,CAAO,WAAP,CAAtB;AACIqG,EAAWrG,CAAA,CAAO,IAAP,CAMX6N,EAAAA,CAAUsD,CAAA,CAAOhS,CAAP,CAAe,SAAf,CAA0BqB,MAA1B,CAGdqN,EAAAyD,SAAA,CAAmBzD,CAAAyD,SAAnB,EAAuCtR,CAEvC,OAAOmR,EAAA,CAAOtD,CAAP,CAAgB,QAAhB,CAA0B,QAAQ,EAAG,CAE1C,IAAIjB,EAAU,EAqDd,OAAOV,SAAe,CAACE,CAAD,CAAOmF,CAAP,CAAiBC,CAAjB,CAA2B,CAE/C,IAAIC,EAAO,EAGT,IAAa,gBAAb,GAKsBrF,CALtB,CACE,KAAM/F,EAAA,CAAS,SAAT,CAIoBzF,QAJpB,CAAN,CAKA2Q,CAAJ,EAAgB3E,CAAA7L,eAAA,CAAuBqL,CAAvB,CAAhB,GACEQ,CAAA,CAAQR,CAAR,CADF,CACkB,IADlB,CAGA,OAAO+E,EAAA,CAAOvE,CAAP,CAAgBR,CAAhB,CAAsB,QAAQ,EAAG,CAqStCsF,QAASA,EAAW,CAACC,CAAD,CAAWC,CAAX,CAAmBC,CAAnB,CAAiCC,CAAjC,CAAwC,CACrDA,CAAL,GAAYA,CAAZ,CAAoBC,CAApB,CACA,OAAO,SAAQ,EAAG,CAChBD,CAAA,CAAMD,CAAN,EAAsB,MAAtB,CAAA,CAA8B,CAACF,CAAD,CAAWC,CAAX,CAAmB3O,SAAnB,CAA9B,CACA,OAAO+O,EAFS,CAFwC,CAa5DC,QAASA,EAA2B,CAACN,CAAD,CAAWC,CAAX,CAAmBE,CAAnB,CAA0B,CACvDA,CAAL,GAAYA,CAAZ,CAAoBC,CAApB,CACA,OAAO,SAAQ,CAACG,CAAD,CAAaC,CAAb,CAA8B,CACvCA,CAAJ,EAAuBrR,CAAA,CAAWqR,CAAX,CAAvB,GAAoDA,CAAAC,aAApD,CAAmFhG,CAAnF,CACA0F,EAAA7L,KAAA,CAAW,CAAC0L,CAAD,CAAWC,CAAX,CAAmB3O,SAAnB,CAAX,CACA,OAAO+O,EAHoC,CAFe,CAjT9D,GAAKT,CAAAA,CAAL,CACE,KAAMF,EAAA,CAAgB,OAAhB,CAEiDjF,CAFjD,CAAN,CAMF,IAAI2F,EAAc,EAAlB,CAGIM,EAAe,EAHnB,CAMIC,EAAY,EANhB,CAQIjT,EAASqS,CAAA,CAAY,WAAZ,CAAyB,QAAzB;AAAmC,MAAnC,CAA2CW,CAA3C,CARb,CAWIL,EAAiB,CAEnBO,aAAcR,CAFK,CAGnBS,cAAeH,CAHI,CAInBI,WAAYH,CAJO,CAoCnBb,KAAMA,QAAQ,CAAChQ,CAAD,CAAQ,CACpB,GAAIlC,CAAA,CAAUkC,CAAV,CAAJ,CAAsB,CACpB,GAAK,CAAAnC,CAAA,CAASmC,CAAT,CAAL,CAAsB,KAAM4E,EAAA,CAAS,MAAT,CAAuD,OAAvD,CAAN,CACtBoL,CAAA,CAAOhQ,CACP,OAAO,KAHa,CAKtB,MAAOgQ,EANa,CApCH,CAsDnBF,SAAUA,CAtDS,CAgEnBnF,KAAMA,CAhEa,CA6EnBuF,SAAUM,CAAA,CAA4B,UAA5B,CAAwC,UAAxC,CA7ES,CAwFnBb,QAASa,CAAA,CAA4B,UAA5B,CAAwC,SAAxC,CAxFU,CAmGnBS,QAAST,CAAA,CAA4B,UAA5B,CAAwC,SAAxC,CAnGU,CA8GnBxQ,MAAOiQ,CAAA,CAAY,UAAZ,CAAwB,OAAxB,CA9GY,CA0HnBiB,SAAUjB,CAAA,CAAY,UAAZ,CAAwB,UAAxB,CAAoC,SAApC,CA1HS,CAsInBkB,UAAWX,CAAA,CAA4B,UAA5B,CAAwC,WAAxC,CAAqDI,CAArD,CAtIQ,CAwKnBQ,UAAWZ,CAAA,CAA4B,kBAA5B,CAAgD,UAAhD,CAxKQ,CA0LnBa,OAAQb,CAAA,CAA4B,iBAA5B,CAA+C,UAA/C,CA1LW,CAsMnB1C,WAAY0C,CAAA,CAA4B,qBAA5B,CAAmD,UAAnD,CAtMO,CAmNnBc,UAAWd,CAAA,CAA4B,kBAA5B;AAAgD,WAAhD,CAnNQ,CAiOnBe,UAAWf,CAAA,CAA4B,kBAA5B,CAAgD,WAAhD,CAjOQ,CAoPnB5S,OAAQA,CApPW,CAgQnB4T,IAAKA,QAAQ,CAACC,CAAD,CAAQ,CACnBZ,CAAArM,KAAA,CAAeiN,CAAf,CACA,OAAO,KAFY,CAhQF,CAsQjB1B,EAAJ,EACEnS,CAAA,CAAOmS,CAAP,CAGF,OAAOQ,EA7R+B,CAAjC,CAdwC,CAvDP,CAArC,CAd0B,CA0ZnCmB,QAASA,GAAW,CAAC9Q,CAAD,CAAMR,CAAN,CAAW,CAC7B,GAAIzB,CAAA,CAAQiC,CAAR,CAAJ,CAAkB,CAChBR,CAAA,CAAMA,CAAN,EAAa,EAEb,KAHgB,IAGPP,EAAI,CAHG,CAGAY,EAAKG,CAAA9B,OAArB,CAAiCe,CAAjC,CAAqCY,CAArC,CAAyCZ,CAAA,EAAzC,CACEO,CAAA,CAAIP,CAAJ,CAAA,CAASe,CAAA,CAAIf,CAAJ,CAJK,CAAlB,IAMO,IAAIhC,CAAA,CAAS+C,CAAT,CAAJ,CAGL,IAASxB,CAAT,GAFAgB,EAEgBQ,CAFVR,CAEUQ,EAFH,EAEGA,CAAAA,CAAhB,CACE,GAAwB,GAAxB,GAAMxB,CAAAmH,OAAA,CAAW,CAAX,CAAN,EAAiD,GAAjD,GAA+BnH,CAAAmH,OAAA,CAAW,CAAX,CAA/B,CACEnG,CAAA,CAAIhB,CAAJ,CAAA,CAAWwB,CAAA,CAAIxB,CAAJ,CAKjB,OAAOgB,EAAP,EAAcQ,CAjBe,CAsB/B+Q,QAASA,GAAe,CAAClT,CAAD,CAAMJ,CAAN,CAAgB,CACtC,IAAIuT,EAAO,EAKP3T,GAAA,CAAsBI,CAAtB,CAAJ,GAGEI,CAHF,CAGQ2N,EAAAhI,KAAA,CAAa3F,CAAb,CAAkB,IAAlB,CAAwBJ,CAAxB,CAHR,CAKA,OAAOiJ,KAAAC,UAAA,CAAe9I,CAAf,CAAoB,QAAQ,CAACW,CAAD,CAAM8H,CAAN,CAAW,CAC5CA,CAAA,CAAMD,EAAA,CAAe7H,CAAf,CAAoB8H,CAApB,CACN,IAAIrJ,CAAA,CAASqJ,CAAT,CAAJ,CAAmB,CAEjB,GAAyB,CAAzB,EAAI0K,CAAA1N,QAAA,CAAagD,CAAb,CAAJ,CAA4B,MAAO,KAEnC0K,EAAApN,KAAA,CAAU0C,CAAV,CAJiB,CAMnB,MAAOA,EARqC,CAAvC,CAX+B,CAiKxC2K,QAASA,GAAkB,CAACzF,CAAD,CAAU,CACnC9K,CAAA,CAAO8K,CAAP,CAAgB,CACd,oBAAuBzO,EADT;AAEd,UAAa4M,EAFC,CAGd,KAAQnG,EAHM,CAId,OAAU9C,CAJI,CAKd,MAASG,EALK,CAMd,OAAUsE,EANI,CAOd,QAAWlH,CAPG,CAQd,QAAWI,CARG,CASd,SAAY0M,EATE,CAUd,KAAQ1J,CAVM,CAWd,KAAQ0E,EAXM,CAYd,OAAUS,EAZI,CAad,SAAYI,EAbE,CAcd,SAAYtF,EAdE,CAed,YAAeM,CAfD,CAgBd,UAAa1E,CAhBC,CAiBd,SAAYc,CAjBE,CAkBd,WAAcS,CAlBA,CAmBd,SAAYxB,CAnBE,CAoBd,SAAYS,CApBE,CAqBd,UAAa8C,EArBC,CAsBd,QAAWzC,CAtBG,CAuBd,QAAWmT,EAvBG,CAwBd,OAAUjR,EAxBI,CAyBd,UAAa,CAACkR,UAAW,CAAZ,CAzBC,CA0Bd,eAAkBnF,EA1BJ,CA2Bd,oBAAuBH,EA3BT,CA4Bd,SAAYlO,CA5BE,CA6Bd,MAASyT,EA7BK,CA8Bd,mBAAsBjI,EA9BR,CA+Bd,iBAAoBF,EA/BN,CAgCd,YAAe/F,CAhCD,CAiCd,YAAeyD,EAjCD,CAkCd,YAAe0K,EAlCD,CAAhB,CAqCAC,GAAA,CAAgBzC,EAAA,CAAkB/R,CAAlB,CAEhBwU,GAAA,CAAc,IAAd,CAAoB,CAAC,UAAD,CAApB,CAAkC,CAAC,UAAD,CAChCC,QAAiB,CAAC3G,CAAD,CAAW,CAE1BA,CAAA0E,SAAA,CAAkB,CAChBkC,cAAeC,EADC,CAAlB,CAGA7G;CAAA0E,SAAA,CAAkB,UAAlB,CAA8BoC,EAA9B,CAAAhB,UAAA,CACY,CACNzL,EAAG0M,EADG,CAENC,MAAOC,EAFD,CAGNC,SAAUD,EAHJ,CAINE,KAAMC,EAJA,CAKNC,OAAQC,EALF,CAMNC,OAAQC,EANF,CAONC,OAAQC,EAPF,CAQNC,OAAQC,EARF,CASNC,WAAYC,EATN,CAUNC,eAAgBC,EAVV,CAWNC,QAASC,EAXH,CAYNC,YAAaC,EAZP,CAaNC,WAAYC,EAbN,CAcNC,QAASC,EAdH,CAeNC,aAAcC,EAfR,CAgBNC,OAAQC,EAhBF,CAiBNC,OAAQC,EAjBF,CAkBNC,KAAMC,EAlBA,CAmBNC,UAAWC,EAnBL,CAoBNC,OAAQC,EApBF,CAqBNC,cAAeC,EArBT,CAsBNC,YAAaC,EAtBP,CAuBNC,MAAOC,EAvBD,CAwBNC,SAAUC,EAxBJ,CAyBNC,OAAQC,EAzBF,CA0BNC,QAASC,EA1BH,CA2BNC,SAAUC,EA3BJ,CA4BNC,aAAcC,EA5BR,CA6BNC,gBAAiBC,EA7BX,CA8BNC,UAAWC,EA9BL,CA+BNC,aAAcC,EA/BR,CAgCNC,QAASC,EAhCH,CAiCNC,OAAQC,EAjCF,CAkCNC,SAAUC,EAlCJ,CAmCNC,QAASC,EAnCH,CAoCNC,UAAWD,EApCL,CAqCNE,SAAUC,EArCJ,CAsCNC,WAAYD,EAtCN,CAuCNE,UAAWC,EAvCL;AAwCNC,YAAaD,EAxCP,CAyCNE,UAAWC,EAzCL,CA0CNC,YAAaD,EA1CP,CA2CNE,QAASC,EA3CH,CA4CNC,eAAgBC,EA5CV,CADZ,CAAAlG,UAAA,CA+CY,CACRmD,UAAWgD,EADH,CAERjF,MAAOkF,EAFC,CA/CZ,CAAApG,UAAA,CAmDYqG,EAnDZ,CAAArG,UAAA,CAoDYsG,EApDZ,CAqDApM,EAAA0E,SAAA,CAAkB,CAChB2H,cAAeC,EADC,CAEhBC,SAAUC,EAFM,CAGhBC,YAAaC,EAHG,CAIhBC,YAAaC,EAJG,CAKhBC,eAAgBC,EALA,CAMhBC,gBAAiBC,EAND,CAOhBC,kBAAmBC,EAPH,CAQhBC,SAAUC,EARM,CAShBC,cAAeC,EATC,CAUhBC,YAAaC,EAVG,CAWhBC,UAAWC,EAXK,CAYhBC,mBAAoBC,EAZJ,CAahBC,kBAAmBC,EAbH,CAchBC,QAASC,EAdO,CAehBC,cAAeC,EAfC,CAgBhBC,aAAcC,EAhBE,CAiBhBC,UAAWC,EAjBK,CAkBhBC,kBAAmBC,EAlBH,CAmBhBC,MAAOC,EAnBS,CAoBhBC,qBAAsBC,EApBN,CAqBhBC,2BAA4BC,EArBZ;AAsBhBC,aAAcC,EAtBE,CAuBhBC,YAAaC,EAvBG,CAwBhBC,gBAAiBC,EAxBD,CAyBhBC,UAAWC,EAzBK,CA0BhBC,KAAMC,EA1BU,CA2BhBC,OAAQC,EA3BQ,CA4BhBC,WAAYC,EA5BI,CA6BhBC,GAAIC,EA7BY,CA8BhBC,IAAKC,EA9BW,CA+BhBC,KAAMC,EA/BU,CAgChBC,aAAcC,EAhCE,CAiChBC,SAAUC,EAjCM,CAkChBC,qBAAsBC,EAlCN,CAmChBC,eAAgBC,EAnCA,CAoChBC,iBAAkBC,EApCF,CAqChBC,cAAeC,EArCC,CAsChBC,SAAUC,EAtCM,CAuChBC,QAASC,EAvCO,CAwChBC,MAAOC,EAxCS,CAyChBC,SAAUC,EAzCM,CA0ChBC,MAAOC,EA1CS,CA2ChBC,eAAgBC,EA3CA,CAAlB,CA1D0B,CADI,CAAlC,CAAAlN,KAAA,CA0GM,CAAEmN,eAAgB,OAAlB,CA1GN,CAxCmC,CA4SrCC,QAASA,GAAkB,CAACC,CAAD,CAAMnQ,CAAN,CAAc,CACvC,MAAOA,EAAAoQ,YAAA,EADgC,CAQzCC,QAASA,GAAY,CAAC5S,CAAD,CAAO,CAC1B,MAAOA,EAAA7C,QAAA,CACI0V,EADJ,CAC2BJ,EAD3B,CADmB,CA6B5BK,QAASA,GAAiB,CAACpa,CAAD,CAAO,CAG3B4F,CAAAA,CAAW5F,CAAA4F,SACf,OAt7BsByU,EAs7BtB,GAAOzU,CAAP,EAAyC,CAACA,CAA1C,EAl7BuB0U,CAk7BvB,GAAsD1U,CAJvB,CAcjC2U,QAASA,GAAmB,CAAC5U,CAAD,CAAO7J,CAAP,CAAgB,CAAA,IACtC0e,CADsC,CACjChb,CADiC,CAEtCib,EAAW3e,CAAA4e,uBAAA,EAF2B;AAGtC1O,EAAQ,EAEZ,IAtBQ2O,EAAA5a,KAAA,CAsBa4F,CAtBb,CAsBR,CAGO,CAEL6U,CAAA,CAAMC,CAAAG,YAAA,CAAqB9e,CAAA+e,cAAA,CAAsB,KAAtB,CAArB,CACNrb,EAAA,CAAM,CAACsb,EAAAC,KAAA,CAAqBpV,CAArB,CAAD,EAA+B,CAAC,EAAD,CAAK,EAAL,CAA/B,EAAyC,CAAzC,CAAAoE,YAAA,EACNiR,EAAA,CAAOC,EAAA,CAAQzb,CAAR,CAAP,EAAuByb,EAAAC,SACvBV,EAAAW,UAAA,CAAgBH,CAAA,CAAK,CAAL,CAAhB,CAA0BrV,CAAAlB,QAAA,CAAa2W,EAAb,CAA+B,WAA/B,CAA1B,CAAwEJ,CAAA,CAAK,CAAL,CAIxE,KADAxe,CACA,CADIwe,CAAA,CAAK,CAAL,CACJ,CAAOxe,CAAA,EAAP,CAAA,CACEge,CAAA,CAAMA,CAAAa,UAGRrP,EAAA,CAAQ7I,EAAA,CAAO6I,CAAP,CAAcwO,CAAAc,WAAd,CAERd,EAAA,CAAMC,CAAAc,WACNf,EAAAgB,YAAA,CAAkB,EAhBb,CAHP,IAEExP,EAAA7K,KAAA,CAAWrF,CAAA2f,eAAA,CAAuB9V,CAAvB,CAAX,CAqBF8U,EAAAe,YAAA,CAAuB,EACvBf,EAAAU,UAAA,CAAqB,EACrBvf,EAAA,CAAQoQ,CAAR,CAAe,QAAQ,CAAChM,CAAD,CAAO,CAC5Bya,CAAAG,YAAA,CAAqB5a,CAArB,CAD4B,CAA9B,CAIA,OAAOya,EAlCmC,CAsE5C9P,QAASA,EAAM,CAACnK,CAAD,CAAU,CACvB,GAAIA,CAAJ,WAAuBmK,EAAvB,CACE,MAAOnK,EAGT,KAAIkb,CAEAngB,EAAA,CAASiF,CAAT,CAAJ,GACEA,CACA,CADUmb,CAAA,CAAKnb,CAAL,CACV,CAAAkb,CAAA,CAAc,CAAA,CAFhB,CAIA,IAAM,EAAA,IAAA,WAAgB/Q,EAAhB,CAAN,CAA+B,CAC7B,GAAI+Q,CAAJ,EAAyC,GAAzC,GAAmBlb,CAAA0C,OAAA,CAAe,CAAf,CAAnB,CACE,KAAM0Y,GAAA,CAAa,OAAb,CAAN,CAEF,MAAO,KAAIjR,CAAJ,CAAWnK,CAAX,CAJsB,CAO/B,GAAIkb,CAAJ,CAAiB,CAlDjB5f,CAAA;AAAqBzB,CAAAyJ,SACrB,KAAI+X,CAGF,EAAA,CADF,CAAKA,CAAL,CAAcC,EAAAf,KAAA,CAAuBpV,CAAvB,CAAd,EACS,CAAC7J,CAAA+e,cAAA,CAAsBgB,CAAA,CAAO,CAAP,CAAtB,CAAD,CADT,CAIA,CAAKA,CAAL,CAActB,EAAA,CAAoB5U,CAApB,CAA0B7J,CAA1B,CAAd,EACS+f,CAAAP,WADT,CAIO,EAwCLS,GAAA,CAAe,IAAf,CAAqB,CAArB,CADe,CAAjB,IAEW/f,EAAA,CAAWwE,CAAX,CAAJ,CACLwb,EAAA,CAAYxb,CAAZ,CADK,CAGLub,EAAA,CAAe,IAAf,CAAqBvb,CAArB,CAvBqB,CA2BzByb,QAASA,GAAW,CAACzb,CAAD,CAAU,CAC5B,MAAOA,EAAA1C,UAAA,CAAkB,CAAA,CAAlB,CADqB,CAI9Boe,QAASA,GAAY,CAAC1b,CAAD,CAAU2b,CAAV,CAA2B,CACzCA,CAAAA,CAAL,EAAwB/B,EAAA,CAAkB5Z,CAAlB,CAAxB,EAAoDhF,CAAAoP,UAAA,CAAiB,CAACpK,CAAD,CAAjB,CAEhDA,EAAA4b,iBAAJ,EACE5gB,CAAAoP,UAAA,CAAiBpK,CAAA4b,iBAAA,CAAyB,GAAzB,CAAjB,CAJ4C,CAQhDC,QAASA,GAAa,CAACjhB,CAAD,CAAM,CAG1B,IAFAkM,IAAIA,CAEJ,GAAalM,EAAb,CACE,MAAO,CAAA,CAET,OAAO,CAAA,CANmB,CAS5BkhB,QAASA,GAAiB,CAAC9b,CAAD,CAAU,CAClC,IAAI+b,EAAY/b,CAAAgc,MAAhB,CACIC,EAAeF,CAAfE,EAA4BC,EAAA,CAAQH,CAAR,CADhC,CAGIxR,EAAS0R,CAAT1R,EAAyB0R,CAAA1R,OAH7B,CAIInC,EAAO6T,CAAP7T,EAAuB6T,CAAA7T,KAErBA,EAAN,EAAc,CAAAyT,EAAA,CAAczT,CAAd,CAAd,EAAwCmC,CAAxC,EAAkD,CAAAsR,EAAA,CAActR,CAAd,CAAlD,GACE,OAAO2R,EAAA,CAAQH,CAAR,CACP,CAAA/b,CAAAgc,MAAA,CAAgB9a,IAAAA,EAFlB,CAPkC,CAapCib,QAASA,GAAS,CAACnc,CAAD,CAAU8B,CAAV,CAAgBkB,CAAhB,CAAoBoZ,CAApB,CAAiC,CACjD,GAAIniB,CAAA,CAAUmiB,CAAV,CAAJ,CAA4B,KAAMhB,GAAA,CAAa,SAAb,CAAN,CAG5B,IAAI7Q,GADA0R,CACA1R,CADe8R,EAAA,CAAmBrc,CAAnB,CACfuK,GAAyB0R,CAAA1R,OAA7B;AACI+R,EAASL,CAATK,EAAyBL,CAAAK,OAE7B,IAAKA,CAAL,CAAA,CAEA,GAAKxa,CAAL,CAOO,CAEL,IAAIya,EAAgBA,QAAQ,CAACza,CAAD,CAAO,CACjC,IAAI0a,EAAcjS,CAAA,CAAOzI,CAAP,CACd7H,EAAA,CAAU+I,CAAV,CAAJ,EACE9C,EAAA,CAAYsc,CAAZ,EAA2B,EAA3B,CAA+BxZ,CAA/B,CAEI/I,EAAA,CAAU+I,CAAV,CAAN,EAAuBwZ,CAAvB,EAA2D,CAA3D,CAAsCA,CAAAvhB,OAAtC,GACE+E,CAAAyc,oBAAA,CAA4B3a,CAA5B,CAAkCwa,CAAlC,CACA,CAAA,OAAO/R,CAAA,CAAOzI,CAAP,CAFT,CALiC,CAWnC1G,EAAA,CAAQ0G,CAAAhC,MAAA,CAAW,GAAX,CAAR,CAAyB,QAAQ,CAACgC,CAAD,CAAO,CACtCya,CAAA,CAAcza,CAAd,CACI4a,GAAA,CAAgB5a,CAAhB,CAAJ,EACEya,CAAA,CAAcG,EAAA,CAAgB5a,CAAhB,CAAd,CAHoC,CAAxC,CAbK,CAPP,IACE,KAAKA,CAAL,GAAayI,EAAb,CACe,UAGb,GAHIzI,CAGJ,EAFE9B,CAAAyc,oBAAA,CAA4B3a,CAA5B,CAAkCwa,CAAlC,CAEF,CAAA,OAAO/R,CAAA,CAAOzI,CAAP,CAuBXga,GAAA,CAAkB9b,CAAlB,CA9BA,CAPiD,CAwCnD2c,QAASA,GAAgB,CAAC3c,CAAD,CAAU8G,CAAV,CAAgB,CACvC,IAAIiV,EAAY/b,CAAAgc,MAGhB,IAFIC,CAEJ,CAFmBF,CAEnB,EAFgCG,EAAA,CAAQH,CAAR,CAEhC,CACMjV,CAAJ,CACE,OAAOmV,CAAA7T,KAAA,CAAkBtB,CAAlB,CADT,CAGEmV,CAAA7T,KAHF,CAGsB,EAGtB,CAAA0T,EAAA,CAAkB9b,CAAlB,CAXqC,CAgBzCqc,QAASA,GAAkB,CAACrc,CAAD,CAAU4c,CAAV,CAA6B,CAAA,IAClDb,EAAY/b,CAAAgc,MADsC,CAElDC,EAAeF,CAAfE,EAA4BC,EAAA,CAAQH,CAAR,CAE5Ba,EAAJ,EAA0BX,CAAAA,CAA1B,GACEjc,CAAAgc,MACA,CADgBD,CAChB,CArQyB,EAAEc,EAqQ3B,CAAAZ,CAAA,CAAeC,EAAA,CAAQH,CAAR,CAAf,CAAoC,CAACxR,OAAQ,EAAT,CAAanC,KAAM,EAAnB,CAAuBkU,OAAQpb,IAAAA,EAA/B,CAFtC,CAKA,OAAO+a,EAT+C,CAaxDa,QAASA,GAAU,CAAC9c,CAAD,CAAUzE,CAAV,CAAeY,CAAf,CAAsB,CACvC,GAAIyd,EAAA,CAAkB5Z,CAAlB,CAAJ,CAAgC,CAC9B,IAAIP,CAAJ,CAEIsd,EAAiB9iB,CAAA,CAAUkC,CAAV,CAFrB;AAGI6gB,EAAiB,CAACD,CAAlBC,EAAoCzhB,CAApCyhB,EAA2C,CAAChjB,CAAA,CAASuB,CAAT,CAHhD,CAII0hB,EAAa,CAAC1hB,CAEd6M,EAAAA,EADA6T,CACA7T,CADeiU,EAAA,CAAmBrc,CAAnB,CAA4B,CAACgd,CAA7B,CACf5U,GAAuB6T,CAAA7T,KAE3B,IAAI2U,CAAJ,CACE3U,CAAA,CAAKsR,EAAA,CAAane,CAAb,CAAL,CAAA,CAA0BY,CAD5B,KAEO,CACL,GAAI8gB,CAAJ,CACE,MAAO7U,EAEP,IAAI4U,CAAJ,CAEE,MAAO5U,EAAP,EAAeA,CAAA,CAAKsR,EAAA,CAAane,CAAb,CAAL,CAEf,KAAKkE,CAAL,GAAalE,EAAb,CACE6M,CAAA,CAAKsR,EAAA,CAAaja,CAAb,CAAL,CAAA,CAA2BlE,CAAA,CAAIkE,CAAJ,CAT5B,CAXuB,CADO,CA6BzCyd,QAASA,GAAc,CAACld,CAAD,CAAUmd,CAAV,CAAoB,CACzC,MAAKnd,EAAAwG,aAAL,CAEqC,EAFrC,CACQvC,CAAC,GAADA,EAAQjE,CAAAwG,aAAA,CAAqB,OAArB,CAARvC,EAAyC,EAAzCA,EAA+C,GAA/CA,SAAA,CAA4D,SAA5D,CAAuE,GAAvE,CAAA5D,QAAA,CACI,GADJ,CACU8c,CADV,CACqB,GADrB,CADR,CAAkC,CAAA,CADO,CAM3CC,QAASA,GAAiB,CAACpd,CAAD,CAAUqd,CAAV,CAAsB,CAC9C,GAAIA,CAAJ,EAAkBrd,CAAAsd,aAAlB,CAAwC,CACtC,IAAIC,EAAkBtZ,CAAC,GAADA,EAAQjE,CAAAwG,aAAA,CAAqB,OAArB,CAARvC,EAAyC,EAAzCA,EAA+C,GAA/CA,SAAA,CACW,SADX,CACsB,GADtB,CAAtB,CAEIuZ,EAAaD,CAEjBniB,EAAA,CAAQiiB,CAAAvd,MAAA,CAAiB,GAAjB,CAAR,CAA+B,QAAQ,CAAC2d,CAAD,CAAW,CAChDA,CAAA,CAAWtC,CAAA,CAAKsC,CAAL,CACXD,EAAA,CAAaA,CAAAvZ,QAAA,CAAmB,GAAnB,CAAyBwZ,CAAzB,CAAoC,GAApC,CAAyC,GAAzC,CAFmC,CAAlD,CAKID,EAAJ,GAAmBD,CAAnB,EACEvd,CAAAsd,aAAA,CAAqB,OAArB,CAA8BnC,CAAA,CAAKqC,CAAL,CAA9B,CAXoC,CADM,CAiBhDE,QAASA,GAAc,CAAC1d,CAAD,CAAUqd,CAAV,CAAsB,CAC3C,GAAIA,CAAJ,EAAkBrd,CAAAsd,aAAlB,CAAwC,CACtC,IAAIC;AAAkBtZ,CAAC,GAADA,EAAQjE,CAAAwG,aAAA,CAAqB,OAArB,CAARvC,EAAyC,EAAzCA,EAA+C,GAA/CA,SAAA,CACW,SADX,CACsB,GADtB,CAAtB,CAEIuZ,EAAaD,CAEjBniB,EAAA,CAAQiiB,CAAAvd,MAAA,CAAiB,GAAjB,CAAR,CAA+B,QAAQ,CAAC2d,CAAD,CAAW,CAChDA,CAAA,CAAWtC,CAAA,CAAKsC,CAAL,CACuC,GAAlD,GAAID,CAAAnd,QAAA,CAAmB,GAAnB,CAAyBod,CAAzB,CAAoC,GAApC,CAAJ,GACED,CADF,EACgBC,CADhB,CAC2B,GAD3B,CAFgD,CAAlD,CAOID,EAAJ,GAAmBD,CAAnB,EACEvd,CAAAsd,aAAA,CAAqB,OAArB,CAA8BnC,CAAA,CAAKqC,CAAL,CAA9B,CAboC,CADG,CAoB7CjC,QAASA,GAAc,CAACoC,CAAD,CAAOC,CAAP,CAAiB,CAGtC,GAAIA,CAAJ,CAGE,GAAIA,CAAAxY,SAAJ,CACEuY,CAAA,CAAKA,CAAA1iB,OAAA,EAAL,CAAA,CAAsB2iB,CADxB,KAEO,CACL,IAAI3iB,EAAS2iB,CAAA3iB,OAGb,IAAsB,QAAtB,GAAI,MAAOA,EAAX,EAAkC2iB,CAAA/jB,OAAlC,GAAsD+jB,CAAtD,CACE,IAAI3iB,CAAJ,CACE,IAAS,IAAAe,EAAI,CAAb,CAAgBA,CAAhB,CAAoBf,CAApB,CAA4Be,CAAA,EAA5B,CACE2hB,CAAA,CAAKA,CAAA1iB,OAAA,EAAL,CAAA,CAAsB2iB,CAAA,CAAS5hB,CAAT,CAF1B,CADF,IAOE2hB,EAAA,CAAKA,CAAA1iB,OAAA,EAAL,CAAA,CAAsB2iB,CAXnB,CAR6B,CA0BxCC,QAASA,GAAgB,CAAC7d,CAAD,CAAU8G,CAAV,CAAgB,CACvC,MAAOgX,GAAA,CAAoB9d,CAApB,CAA6B,GAA7B,EAAoC8G,CAApC,EAA4C,cAA5C,EAA8D,YAA9D,CADgC,CAIzCgX,QAASA,GAAmB,CAAC9d,CAAD,CAAU8G,CAAV,CAAgB3K,CAAhB,CAAuB,CA1uC1B2d,CA6uCvB,GAAI9Z,CAAAoF,SAAJ,GACEpF,CADF,CACYA,CAAA+d,gBADZ,CAKA,KAFIC,CAEJ,CAFYljB,CAAA,CAAQgM,CAAR,CAAA,CAAgBA,CAAhB,CAAuB,CAACA,CAAD,CAEnC,CAAO9G,CAAP,CAAA,CAAgB,CACd,IADc,IACLhE;AAAI,CADC,CACEY,EAAKohB,CAAA/iB,OAArB,CAAmCe,CAAnC,CAAuCY,CAAvC,CAA2CZ,CAAA,EAA3C,CACE,GAAI/B,CAAA,CAAUkC,CAAV,CAAkBnB,CAAAoN,KAAA,CAAYpI,CAAZ,CAAqBge,CAAA,CAAMhiB,CAAN,CAArB,CAAlB,CAAJ,CAAuD,MAAOG,EAMhE6D,EAAA,CAAUA,CAAAie,WAAV,EAzvC8BC,EAyvC9B,GAAiCle,CAAAoF,SAAjC,EAAqFpF,CAAAme,KARvE,CARiC,CAoBnDC,QAASA,GAAW,CAACpe,CAAD,CAAU,CAE5B,IADA0b,EAAA,CAAa1b,CAAb,CAAsB,CAAA,CAAtB,CACA,CAAOA,CAAA+a,WAAP,CAAA,CACE/a,CAAAqe,YAAA,CAAoBre,CAAA+a,WAApB,CAH0B,CAO9BuD,QAASA,GAAY,CAACte,CAAD,CAAUue,CAAV,CAAoB,CAClCA,CAAL,EAAe7C,EAAA,CAAa1b,CAAb,CACf,KAAI/B,EAAS+B,CAAAie,WACThgB,EAAJ,EAAYA,CAAAogB,YAAA,CAAmBre,CAAnB,CAH2B,CAOzCwe,QAASA,GAAoB,CAACC,CAAD,CAASC,CAAT,CAAc,CACzCA,CAAA,CAAMA,CAAN,EAAa7kB,CACb,IAAgC,UAAhC,GAAI6kB,CAAApb,SAAAqb,WAAJ,CAIED,CAAAE,WAAA,CAAeH,CAAf,CAJF,KAOEzjB,EAAA,CAAO0jB,CAAP,CAAA5U,GAAA,CAAe,MAAf,CAAuB2U,CAAvB,CATuC,CAa3CjD,QAASA,GAAW,CAACxY,CAAD,CAAK,CACvB6b,QAASA,EAAO,EAAG,CACjBhlB,CAAAyJ,SAAAmZ,oBAAA,CAAoC,kBAApC,CAAwDoC,CAAxD,CACAhlB,EAAA4iB,oBAAA,CAA2B,MAA3B,CAAmCoC,CAAnC,CACA7b,EAAA,EAHiB,CAOgB,UAAnC,GAAInJ,CAAAyJ,SAAAqb,WAAJ,CACE9kB,CAAA+kB,WAAA,CAAkB5b,CAAlB,CADF,EAMEnJ,CAAAyJ,SAAAwb,iBAAA,CAAiC,kBAAjC;AAAqDD,CAArD,CAGA,CAAAhlB,CAAAilB,iBAAA,CAAwB,MAAxB,CAAgCD,CAAhC,CATF,CARuB,CAgEzBE,QAASA,GAAkB,CAAC/e,CAAD,CAAU8G,CAAV,CAAgB,CAEzC,IAAIkY,EAAcC,EAAA,CAAanY,CAAAyC,YAAA,EAAb,CAGlB,OAAOyV,EAAP,EAAsBE,EAAA,CAAiBnf,EAAA,CAAUC,CAAV,CAAjB,CAAtB,EAA8Dgf,CALrB,CA+L3CG,QAASA,GAAkB,CAACnf,CAAD,CAAUuK,CAAV,CAAkB,CAC3C,IAAI6U,EAAeA,QAAQ,CAACC,CAAD,CAAQvd,CAAR,CAAc,CAEvCud,CAAAC,mBAAA,CAA2BC,QAAQ,EAAG,CACpC,MAAOF,EAAAG,iBAD6B,CAItC,KAAIC,EAAWlV,CAAA,CAAOzI,CAAP,EAAeud,CAAAvd,KAAf,CAAf,CACI4d,EAAiBD,CAAA,CAAWA,CAAAxkB,OAAX,CAA6B,CAElD,IAAKykB,CAAL,CAAA,CAEA,GAAI/gB,CAAA,CAAY0gB,CAAAM,4BAAZ,CAAJ,CAAoD,CAClD,IAAIC,EAAmCP,CAAAQ,yBACvCR,EAAAQ,yBAAA,CAAiCC,QAAQ,EAAG,CAC1CT,CAAAM,4BAAA,CAAoC,CAAA,CAEhCN,EAAAU,gBAAJ,EACEV,CAAAU,gBAAA,EAGEH,EAAJ,EACEA,CAAAlkB,KAAA,CAAsC2jB,CAAtC,CARwC,CAFM,CAepDA,CAAAW,8BAAA,CAAsCC,QAAQ,EAAG,CAC/C,MAA6C,CAAA,CAA7C,GAAOZ,CAAAM,4BADwC,CAKjD;IAAIO,EAAiBT,CAAAU,sBAAjBD,EAAmDE,EAGjC,EAAtB,CAAKV,CAAL,GACED,CADF,CACa5R,EAAA,CAAY4R,CAAZ,CADb,CAIA,KAAS,IAAAzjB,EAAI,CAAb,CAAgBA,CAAhB,CAAoB0jB,CAApB,CAAoC1jB,CAAA,EAApC,CACOqjB,CAAAW,8BAAA,EAAL,EACEE,CAAA,CAAelgB,CAAf,CAAwBqf,CAAxB,CAA+BI,CAAA,CAASzjB,CAAT,CAA/B,CA/BJ,CATuC,CA+CzCojB,EAAA5U,KAAA,CAAoBxK,CACpB,OAAOof,EAjDoC,CAoD7CgB,QAASA,GAAqB,CAACpgB,CAAD,CAAUqf,CAAV,CAAiBgB,CAAjB,CAA0B,CACtDA,CAAA3kB,KAAA,CAAasE,CAAb,CAAsBqf,CAAtB,CADsD,CAIxDiB,QAASA,GAA0B,CAACC,CAAD,CAASlB,CAAT,CAAgBgB,CAAhB,CAAyB,CAI1D,IAAIG,EAAUnB,CAAAoB,cAGTD,EAAL,GAAiBA,CAAjB,GAA6BD,CAA7B,EAAwCG,EAAAhlB,KAAA,CAAoB6kB,CAApB,CAA4BC,CAA5B,CAAxC,GACEH,CAAA3kB,KAAA,CAAa6kB,CAAb,CAAqBlB,CAArB,CARwD,CA2P5DpG,QAASA,GAAgB,EAAG,CAC1B,IAAA0H,KAAA,CAAYC,QAAiB,EAAG,CAC9B,MAAOnjB,EAAA,CAAO0M,CAAP,CAAe,CACpB0W,SAAUA,QAAQ,CAACrhB,CAAD,CAAOshB,CAAP,CAAgB,CAC5BthB,CAAAE,KAAJ,GAAeF,CAAf,CAAsBA,CAAA,CAAK,CAAL,CAAtB,CACA,OAAO0d,GAAA,CAAe1d,CAAf,CAAqBshB,CAArB,CAFyB,CADd,CAKpBC,SAAUA,QAAQ,CAACvhB,CAAD,CAAOshB,CAAP,CAAgB,CAC5BthB,CAAAE,KAAJ,GAAeF,CAAf,CAAsBA,CAAA,CAAK,CAAL,CAAtB,CACA,OAAOke,GAAA,CAAele,CAAf,CAAqBshB,CAArB,CAFyB,CALd,CASpBE,YAAaA,QAAQ,CAACxhB,CAAD,CAAOshB,CAAP,CAAgB,CAC/BthB,CAAAE,KAAJ,GAAeF,CAAf,CAAsBA,CAAA,CAAK,CAAL,CAAtB,CACA,OAAO4d,GAAA,CAAkB5d,CAAlB,CAAwBshB,CAAxB,CAF4B,CATjB,CAAf,CADuB,CADN,CA+B5BG,QAASA,GAAO,CAACrmB,CAAD,CAAMsmB,CAAN,CAAiB,CAC/B,IAAI3lB,EAAMX,CAANW,EAAaX,CAAA+B,UAEjB;GAAIpB,CAAJ,CAIE,MAHmB,UAGZA,GAHH,MAAOA,EAGJA,GAFLA,CAEKA,CAFCX,CAAA+B,UAAA,EAEDpB,EAAAA,CAGL4lB,EAAAA,CAAU,MAAOvmB,EAOrB,OALEW,EAKF,CANgB,UAAhB,GAAI4lB,CAAJ,EAA2C,QAA3C,GAA+BA,CAA/B,EAA+D,IAA/D,GAAuDvmB,CAAvD,CACQA,CAAA+B,UADR,CACwBwkB,CADxB,CACkC,GADlC,CACwC,CAACD,CAAD,EAAc9kB,EAAd,GADxC,CAGQ+kB,CAHR,CAGkB,GAHlB,CAGwBvmB,CAdO,CAyBjCwmB,QAASA,GAAS,EAAG,CACnB,IAAAC,MAAA,CAAa,EACb,KAAAC,QAAA,CAAe,EACf,KAAAC,SAAA,CAAgBlnB,GAChB,KAAAmnB,WAAA,CAAmB,EAJA,CA4IrBC,QAASA,GAAW,CAACze,CAAD,CAAK,CACnB0e,CAAAA,CAJGC,QAAAC,UAAAljB,SAAAhD,KAAA,CAIkBsH,CAJlB,CAIMiB,QAAA,CAAwB4d,EAAxB,CAAwC,EAAxC,CAEb,OADWH,EAAA9f,MAAA,CAAakgB,EAAb,CACX,EADsCJ,CAAA9f,MAAA,CAAamgB,EAAb,CAFf,CAMzBC,QAASA,GAAM,CAAChf,CAAD,CAAK,CAIlB,MAAA,CADIif,CACJ,CADWR,EAAA,CAAYze,CAAZ,CACX,EACS,WADT,CACuBiB,CAACge,CAAA,CAAK,CAAL,CAADhe,EAAY,EAAZA,SAAA,CAAwB,WAAxB,CAAqC,GAArC,CADvB,CACmE,GADnE,CAGO,IAPW,CA+mBpB6D,QAASA,GAAc,CAACoa,CAAD,CAAgB/a,CAAhB,CAA0B,CAkD/Cgb,QAASA,EAAa,CAACC,CAAD,CAAW,CAC/B,MAAO,SAAQ,CAAC7mB,CAAD,CAAMY,CAAN,CAAa,CAC1B,GAAInC,CAAA,CAASuB,CAAT,CAAJ,CACEH,CAAA,CAAQG,CAAR,CAAaU,EAAA,CAAcmmB,CAAd,CAAb,CADF,KAGE,OAAOA,EAAA,CAAS7mB,CAAT;AAAcY,CAAd,CAJiB,CADG,CAUjCkQ,QAASA,EAAQ,CAACvF,CAAD,CAAOub,CAAP,CAAkB,CACjCpX,EAAA,CAAwBnE,CAAxB,CAA8B,SAA9B,CACA,IAAItL,CAAA,CAAW6mB,CAAX,CAAJ,EAA6BvnB,CAAA,CAAQunB,CAAR,CAA7B,CACEA,CAAA,CAAYC,CAAAC,YAAA,CAA6BF,CAA7B,CAEd,IAAK1B,CAAA0B,CAAA1B,KAAL,CACE,KAAM5U,GAAA,CAAgB,MAAhB,CAA6EjF,CAA7E,CAAN,CAEF,MAAQ0b,EAAA,CAAc1b,CAAd,CAjEW2b,UAiEX,CAAR,CAA+CJ,CARd,CAWnCK,QAASA,EAAkB,CAAC5b,CAAD,CAAOgF,CAAP,CAAgB,CACzC,MAAoB6W,SAA4B,EAAG,CACjD,IAAIC,EAASC,CAAA9a,OAAA,CAAwB+D,CAAxB,CAAiC,IAAjC,CACb,IAAInN,CAAA,CAAYikB,CAAZ,CAAJ,CACE,KAAM7W,GAAA,CAAgB,OAAhB,CAA2FjF,CAA3F,CAAN,CAEF,MAAO8b,EAL0C,CADV,CAU3C9W,QAASA,EAAO,CAAChF,CAAD,CAAOgc,CAAP,CAAkBC,CAAlB,CAA2B,CACzC,MAAO1W,EAAA,CAASvF,CAAT,CAAe,CACpB6Z,KAAkB,CAAA,CAAZ,GAAAoC,CAAA,CAAoBL,CAAA,CAAmB5b,CAAnB,CAAyBgc,CAAzB,CAApB,CAA0DA,CAD5C,CAAf,CADkC,CAiC3CE,QAASA,EAAW,CAACd,CAAD,CAAgB,CAClCtX,EAAA,CAAUjM,CAAA,CAAYujB,CAAZ,CAAV,EAAwCpnB,CAAA,CAAQonB,CAAR,CAAxC,CAAgE,eAAhE,CAAiF,cAAjF,CADkC,KAE9BlV,EAAY,EAFkB,CAEdiW,CACpB7nB,EAAA,CAAQ8mB,CAAR,CAAuB,QAAQ,CAACtb,CAAD,CAAS,CAItCsc,QAASA,EAAc,CAAC1W,CAAD,CAAQ,CAAA,IACzBxQ,CADyB,CACtBY,CACFZ,EAAA,CAAI,CAAT,KAAYY,CAAZ,CAAiB4P,CAAAvR,OAAjB,CAA+Be,CAA/B,CAAmCY,CAAnC,CAAuCZ,CAAA,EAAvC,CAA4C,CAAA,IACtCmnB,EAAa3W,CAAA,CAAMxQ,CAAN,CADyB,CAEtCqQ,EAAWiW,CAAArZ,IAAA,CAAqBka,CAAA,CAAW,CAAX,CAArB,CAEf9W,EAAA,CAAS8W,CAAA,CAAW,CAAX,CAAT,CAAAhgB,MAAA,CAA8BkJ,CAA9B,CAAwC8W,CAAA,CAAW,CAAX,CAAxC,CAJ0C,CAFf,CAH/B,GAAI,CAAAC,CAAAna,IAAA,CAAkBrC,CAAlB,CAAJ,CAAA,CACAwc,CAAA3hB,IAAA,CAAkBmF,CAAlB,CAA0B,CAAA,CAA1B,CAYA,IAAI,CACE7L,CAAA,CAAS6L,CAAT,CAAJ,EACEqc,CAIA,CAJW5U,EAAA,CAAczH,CAAd,CAIX;AAHAic,CAAAvb,QAAA,CAAyBV,CAAzB,CAGA,CAHmCqc,CAGnC,CAFAjW,CAEA,CAFYA,CAAArK,OAAA,CAAiBqgB,CAAA,CAAYC,CAAAhX,SAAZ,CAAjB,CAAAtJ,OAAA,CAAwDsgB,CAAA9V,WAAxD,CAEZ,CADA+V,CAAA,CAAeD,CAAAhW,aAAf,CACA,CAAAiW,CAAA,CAAeD,CAAA/V,cAAf,CALF,EAMW1R,CAAA,CAAWoL,CAAX,CAAJ,CACHoG,CAAArM,KAAA,CAAe2hB,CAAAva,OAAA,CAAwBnB,CAAxB,CAAf,CADG,CAEI9L,CAAA,CAAQ8L,CAAR,CAAJ,CACHoG,CAAArM,KAAA,CAAe2hB,CAAAva,OAAA,CAAwBnB,CAAxB,CAAf,CADG,CAGLmE,EAAA,CAAYnE,CAAZ,CAAoB,QAApB,CAZA,CAcF,MAAOtB,CAAP,CAAU,CAYV,KAXIxK,EAAA,CAAQ8L,CAAR,CAWE,GAVJA,CAUI,CAVKA,CAAA,CAAOA,CAAA3L,OAAP,CAAuB,CAAvB,CAUL,EARFqK,CAAA+d,QAQE,EARW/d,CAAAge,MAQX,EARsD,EAQtD,GARsBhe,CAAAge,MAAAjjB,QAAA,CAAgBiF,CAAA+d,QAAhB,CAQtB,GAFJ/d,CAEI,CAFAA,CAAA+d,QAEA,CAFY,IAEZ,CAFmB/d,CAAAge,MAEnB,EAAAvX,EAAA,CAAgB,UAAhB,CACInF,CADJ,CACYtB,CAAAge,MADZ,EACuBhe,CAAA+d,QADvB,EACoC/d,CADpC,CAAN,CAZU,CA3BZ,CADsC,CAAxC,CA4CA,OAAO0H,EA/C2B,CAsDpCuW,QAASA,EAAsB,CAACC,CAAD,CAAQ1X,CAAR,CAAiB,CAE9C2X,QAASA,EAAU,CAACC,CAAD,CAAcC,CAAd,CAAsB,CACvC,GAAIH,CAAA/nB,eAAA,CAAqBioB,CAArB,CAAJ,CAAuC,CACrC,GAAIF,CAAA,CAAME,CAAN,CAAJ,GAA2BE,CAA3B,CACE,KAAM7X,GAAA,CAAgB,MAAhB,CACI2X,CADJ,CACkB,MADlB,CAC2BvY,CAAAlF,KAAA,CAAU,MAAV,CAD3B,CAAN,CAGF,MAAOud,EAAA,CAAME,CAAN,CAL8B,CAOrC,GAAI,CAIF,MAHAvY,EAAAzD,QAAA,CAAagc,CAAb,CAGO,CAFPF,CAAA,CAAME,CAAN,CAEO,CAFcE,CAEd,CADPJ,CAAA,CAAME,CAAN,CACO,CADc5X,CAAA,CAAQ4X,CAAR,CAAqBC,CAArB,CACd;AAAAH,CAAA,CAAME,CAAN,CAJL,CAKF,MAAOG,CAAP,CAAY,CAIZ,KAHIL,EAAA,CAAME,CAAN,CAGEG,GAHqBD,CAGrBC,EAFJ,OAAOL,CAAA,CAAME,CAAN,CAEHG,CAAAA,CAAN,CAJY,CALd,OAUU,CACR1Y,CAAA2Y,MAAA,EADQ,CAlB2B,CAyBzCC,QAASA,EAAa,CAAC/gB,CAAD,CAAKghB,CAAL,CAAaN,CAAb,CAA0B,CAAA,IAC1CzB,EAAO,EACPgC,EAAAA,CAAUnc,EAAAoc,WAAA,CAA0BlhB,CAA1B,CAA8BmE,CAA9B,CAAwCuc,CAAxC,CAEd,KAJ8C,IAIrC1nB,EAAI,CAJiC,CAI9Bf,EAASgpB,CAAAhpB,OAAzB,CAAyCe,CAAzC,CAA6Cf,CAA7C,CAAqDe,CAAA,EAArD,CAA0D,CACxD,IAAIT,EAAM0oB,CAAA,CAAQjoB,CAAR,CACV,IAAmB,QAAnB,GAAI,MAAOT,EAAX,CACE,KAAMwQ,GAAA,CAAgB,MAAhB,CACyExQ,CADzE,CAAN,CAGF0mB,CAAAthB,KAAA,CAAUqjB,CAAA,EAAUA,CAAAvoB,eAAA,CAAsBF,CAAtB,CAAV,CAAuCyoB,CAAA,CAAOzoB,CAAP,CAAvC,CACuCkoB,CAAA,CAAWloB,CAAX,CAAgBmoB,CAAhB,CADjD,CANwD,CAS1D,MAAOzB,EAbuC,CA8DhD,MAAO,CACLla,OAlCFA,QAAe,CAAC/E,CAAD,CAAKD,CAAL,CAAWihB,CAAX,CAAmBN,CAAnB,CAAgC,CACvB,QAAtB,GAAI,MAAOM,EAAX,GACEN,CACA,CADcM,CACd,CAAAA,CAAA,CAAS,IAFX,CAKI/B,EAAAA,CAAO8B,CAAA,CAAc/gB,CAAd,CAAkBghB,CAAlB,CAA0BN,CAA1B,CACP5oB,EAAA,CAAQkI,CAAR,CAAJ,GACEA,CADF,CACOA,CAAA,CAAGA,CAAA/H,OAAH,CAAe,CAAf,CADP,CAIa+H,EAAAA,CAAAA,CArBb,IAAImhB,EAAJ,EAA4B,UAA5B,GAAY,MAAOC,EAAnB,CACE,CAAA,CAAO,CAAA,CADT,KAAA,CAGA,IAAIxB,EAASwB,CAAAC,YACR9pB,GAAA,CAAUqoB,CAAV,CAAL,GACEA,CADF,CACWwB,CAAAC,YADX,CAC8B,UAAA9kB,KAAA,CAn1B3BoiB,QAAAC,UAAAljB,SAAAhD,KAAA,CAm1BuD0oB,CAn1BvD,CAm1B2B,CAD9B,CAGA,EAAA,CAAOxB,CAPP,CAqBA,MAAK,EAAL;CAKEX,CAAAva,QAAA,CAAa,IAAb,CACO,CAAA,KAAKia,QAAAC,UAAA9e,KAAAK,MAAA,CAA8BH,CAA9B,CAAkCif,CAAlC,CAAL,CANT,EAGSjf,CAAAG,MAAA,CAASJ,CAAT,CAAekf,CAAf,CAdoC,CAiCxC,CAELM,YAbFA,QAAoB,CAAC+B,CAAD,CAAON,CAAP,CAAeN,CAAf,CAA4B,CAG9C,IAAIa,EAAQzpB,CAAA,CAAQwpB,CAAR,CAAA,CAAgBA,CAAA,CAAKA,CAAArpB,OAAL,CAAmB,CAAnB,CAAhB,CAAwCqpB,CAChDrC,EAAAA,CAAO8B,CAAA,CAAcO,CAAd,CAAoBN,CAApB,CAA4BN,CAA5B,CAEXzB,EAAAva,QAAA,CAAa,IAAb,CACA,OAAO,MAAKia,QAAAC,UAAA9e,KAAAK,MAAA,CAA8BohB,CAA9B,CAAoCtC,CAApC,CAAL,CAPuC,CAWzC,CAGLhZ,IAAKwa,CAHA,CAILe,SAAU1c,EAAAoc,WAJL,CAKLO,IAAKA,QAAQ,CAAC3d,CAAD,CAAO,CAClB,MAAO0b,EAAA/mB,eAAA,CAA6BqL,CAA7B,CApQQ2b,UAoQR,CAAP,EAA8De,CAAA/nB,eAAA,CAAqBqL,CAArB,CAD5C,CALf,CAzFuC,CAvKhDK,CAAA,CAAyB,CAAA,CAAzB,GAAYA,CADmC,KAE3Cyc,EAAgB,EAF2B,CAI3CzY,EAAO,EAJoC,CAK3CiY,EAAgB,IAAIsB,EALuB,CAM3ClC,EAAgB,CACd7a,SAAU,CACN0E,SAAU8V,CAAA,CAAc9V,CAAd,CADJ,CAENP,QAASqW,CAAA,CAAcrW,CAAd,CAFH,CAGNsB,QAAS+U,CAAA,CA6EnB/U,QAAgB,CAACtG,CAAD,CAAO3F,CAAP,CAAoB,CAClC,MAAO2K,EAAA,CAAQhF,CAAR,CAAc,CAAC,WAAD,CAAc,QAAQ,CAAC6d,CAAD,CAAY,CACrD,MAAOA,EAAApC,YAAA,CAAsBphB,CAAtB,CAD8C,CAAlC,CAAd,CAD2B,CA7EjB,CAHH,CAINhF,MAAOgmB,CAAA,CAkFjBhmB,QAAc,CAAC2K,CAAD,CAAOzD,CAAP,CAAY,CAAE,MAAOyI,EAAA,CAAQhF,CAAR;AAAcvI,EAAA,CAAQ8E,CAAR,CAAd,CAA4B,CAAA,CAA5B,CAAT,CAlFT,CAJD,CAKNgK,SAAU8U,CAAA,CAmFpB9U,QAAiB,CAACvG,CAAD,CAAO3K,CAAP,CAAc,CAC7B8O,EAAA,CAAwBnE,CAAxB,CAA8B,UAA9B,CACA0b,EAAA,CAAc1b,CAAd,CAAA,CAAsB3K,CACtByoB,EAAA,CAAc9d,CAAd,CAAA,CAAsB3K,CAHO,CAnFX,CALJ,CAMNmR,UAwFVA,QAAkB,CAACoW,CAAD,CAAcmB,CAAd,CAAuB,CAAA,IACnCC,EAAexC,CAAArZ,IAAA,CAAqBya,CAArB,CAnGAjB,UAmGA,CADoB,CAEnCsC,EAAWD,CAAAnE,KAEfmE,EAAAnE,KAAA,CAAoBqE,QAAQ,EAAG,CAC7B,IAAIC,EAAepC,CAAA9a,OAAA,CAAwBgd,CAAxB,CAAkCD,CAAlC,CACnB,OAAOjC,EAAA9a,OAAA,CAAwB8c,CAAxB,CAAiC,IAAjC,CAAuC,CAACK,UAAWD,CAAZ,CAAvC,CAFsB,CAJQ,CA9FzB,CADI,CAN2B,CAgB3C3C,EAAoBE,CAAAmC,UAApBrC,CACIiB,CAAA,CAAuBf,CAAvB,CAAsC,QAAQ,CAACkB,CAAD,CAAcC,CAAd,CAAsB,CAC9Dpb,EAAAxN,SAAA,CAAiB4oB,CAAjB,CAAJ,EACExY,CAAAxK,KAAA,CAAUgjB,CAAV,CAEF,MAAM5X,GAAA,CAAgB,MAAhB,CAAiDZ,CAAAlF,KAAA,CAAU,MAAV,CAAjD,CAAN,CAJkE,CAApE,CAjBuC,CAuB3C2e,EAAgB,EAvB2B,CAwB3CO,EACI5B,CAAA,CAAuBqB,CAAvB,CAAsC,QAAQ,CAAClB,CAAD,CAAcC,CAAd,CAAsB,CAClE,IAAItX,EAAWiW,CAAArZ,IAAA,CAAqBya,CAArB,CAvBJjB,UAuBI,CAAmDkB,CAAnD,CACf,OAAOd,EAAA9a,OAAA,CACHsE,CAAAsU,KADG,CACYtU,CADZ,CACsBnL,IAAAA,EADtB,CACiCwiB,CADjC,CAF2D,CAApE,CAzBuC,CA8B3Cb,EAAmBsC,CAEvB3C,EAAA,kBAAA,CAA8C,CAAE7B,KAAMpiB,EAAA,CAAQ4mB,CAAR,CAAR,CAC9CtC,EAAAvb,QAAA,CAA2Bgb,CAAAhb,QAA3B,CAAsD7E,CAAA,EACtD,KAAIuK,EAAYgW,CAAA,CAAYd,CAAZ,CAAhB,CACAW,EAAmBsC,CAAAlc,IAAA,CAA0B,WAA1B,CACnB4Z,EAAA1b,SAAA,CAA4BA,CAC5B/L,EAAA,CAAQ4R,CAAR;AAAmB,QAAQ,CAAChK,CAAD,CAAK,CAAMA,CAAJ,EAAQ6f,CAAA9a,OAAA,CAAwB/E,CAAxB,CAAV,CAAhC,CAEA6f,EAAAuC,eAAA,CAAkCC,QAAQ,CAACC,CAAD,CAAO,CAC/ClqB,CAAA,CAAQ4nB,CAAA,CAAYsC,CAAZ,CAAR,CAA2B,QAAQ,CAACtiB,CAAD,CAAK,CAAMA,CAAJ,EAAQ6f,CAAA9a,OAAA,CAAwB/E,CAAxB,CAAV,CAAxC,CAD+C,CAKjD,OAAO6f,EA5CwC,CAwRjD5O,QAASA,GAAqB,EAAG,CAE/B,IAAIsR,EAAuB,CAAA,CAe3B,KAAAC,qBAAA,CAA4BC,QAAQ,EAAG,CACrCF,CAAA,CAAuB,CAAA,CADc,CAiJvC,KAAA5E,KAAA,CAAY,CAAC,SAAD,CAAY,WAAZ,CAAyB,YAAzB,CAAuC,QAAQ,CAAC/H,CAAD,CAAU5B,CAAV,CAAqBM,CAArB,CAAiC,CAM1FoO,QAASA,EAAc,CAACC,CAAD,CAAO,CAC5B,IAAI/C,EAAS,IACb9jB,MAAA8iB,UAAAgE,KAAAlqB,KAAA,CAA0BiqB,CAA1B,CAAgC,QAAQ,CAAC3lB,CAAD,CAAU,CAChD,GAA2B,GAA3B,GAAID,EAAA,CAAUC,CAAV,CAAJ,CAEE,MADA4iB,EACO,CADE5iB,CACF,CAAA,CAAA,CAHuC,CAAlD,CAMA,OAAO4iB,EARqB,CAgC9BiD,QAASA,EAAQ,CAACrb,CAAD,CAAO,CACtB,GAAIA,CAAJ,CAAU,CACRA,CAAAsb,eAAA,EAEA,KAAIC,CAvBFA,EAAAA,CAASC,CAAAC,QAETzqB,EAAA,CAAWuqB,CAAX,CAAJ,CACEA,CADF,CACWA,CAAA,EADX,CAEWxoB,EAAA,CAAUwoB,CAAV,CAAJ,EACDvb,CAGF,CAHSub,CAAA,CAAO,CAAP,CAGT,CAAAA,CAAA,CADqB,OAAvB,GADYnN,CAAAsN,iBAAAC,CAAyB3b,CAAzB2b,CACRC,SAAJ,CACW,CADX,CAGW5b,CAAA6b,sBAAA,EAAAC,OANN,EAQK7rB,CAAA,CAASsrB,CAAT,CARL;CASLA,CATK,CASI,CATJ,CAqBDA,EAAJ,GAcMQ,CACJ,CADc/b,CAAA6b,sBAAA,EAAAG,IACd,CAAA5N,CAAA6N,SAAA,CAAiB,CAAjB,CAAoBF,CAApB,CAA8BR,CAA9B,CAfF,CALQ,CAAV,IAuBEnN,EAAAiN,SAAA,CAAiB,CAAjB,CAAoB,CAApB,CAxBoB,CA4BxBG,QAASA,EAAM,CAACU,CAAD,CAAO,CAEpBA,CAAA,CAAO3rB,CAAA,CAAS2rB,CAAT,CAAA,CAAiBA,CAAjB,CAAwBjsB,CAAA,CAASisB,CAAT,CAAA,CAAiBA,CAAAhoB,SAAA,EAAjB,CAAmCsY,CAAA0P,KAAA,EAClE,KAAIC,CAGCD,EAAL,CAGK,CAAKC,CAAL,CAAWrjB,CAAAsjB,eAAA,CAAwBF,CAAxB,CAAX,EAA2Cb,CAAA,CAASc,CAAT,CAA3C,CAGA,CAAKA,CAAL,CAAWjB,CAAA,CAAepiB,CAAAujB,kBAAA,CAA2BH,CAA3B,CAAf,CAAX,EAA8Db,CAAA,CAASc,CAAT,CAA9D,CAGa,KAHb,GAGID,CAHJ,EAGoBb,CAAA,CAAS,IAAT,CATzB,CAAWA,CAAA,CAAS,IAAT,CANS,CAjEtB,IAAIviB,EAAWsV,CAAAtV,SAqFXiiB,EAAJ,EACEjO,CAAAlY,OAAA,CAAkB0nB,QAAwB,EAAG,CAAC,MAAO9P,EAAA0P,KAAA,EAAR,CAA7C,CACEK,QAA8B,CAACC,CAAD,CAASC,CAAT,CAAiB,CAEzCD,CAAJ,GAAeC,CAAf,EAAoC,EAApC,GAAyBD,CAAzB,EAEAxI,EAAA,CAAqB,QAAQ,EAAG,CAC9BlH,CAAAnY,WAAA,CAAsB6mB,CAAtB,CAD8B,CAAhC,CAJ6C,CADjD,CAWF,OAAOA,EAlGmF,CAAhF,CAlKmB,CA4QjCkB,QAASA,GAAY,CAACllB,CAAD,CAAGC,CAAH,CAAM,CACzB,GAAKD,CAAAA,CAAL,EAAWC,CAAAA,CAAX,CAAc,MAAO,EACrB,IAAKD,CAAAA,CAAL,CAAQ,MAAOC,EACf,IAAKA,CAAAA,CAAL,CAAQ,MAAOD,EACXlH,EAAA,CAAQkH,CAAR,CAAJ,GAAgBA,CAAhB,CAAoBA,CAAAiE,KAAA,CAAO,GAAP,CAApB,CACInL,EAAA,CAAQmH,CAAR,CAAJ,GAAgBA,CAAhB,CAAoBA,CAAAgE,KAAA,CAAO,GAAP,CAApB,CACA,OAAOjE,EAAP,CAAW,GAAX,CAAiBC,CANQ,CAkB3BklB,QAASA,GAAY,CAACrG,CAAD,CAAU,CACzB/lB,CAAA,CAAS+lB,CAAT,CAAJ;CACEA,CADF,CACYA,CAAAhhB,MAAA,CAAc,GAAd,CADZ,CAMA,KAAIlF,EAAM6H,CAAA,EACVrH,EAAA,CAAQ0lB,CAAR,CAAiB,QAAQ,CAACsG,CAAD,CAAQ,CAG3BA,CAAAnsB,OAAJ,GACEL,CAAA,CAAIwsB,CAAJ,CADF,CACe,CAAA,CADf,CAH+B,CAAjC,CAOA,OAAOxsB,EAfsB,CAyB/BysB,QAASA,GAAqB,CAACC,CAAD,CAAU,CACtC,MAAOttB,EAAA,CAASstB,CAAT,CAAA,CACDA,CADC,CAED,EAHgC,CAkhCxCC,QAASA,GAAO,CAAC1tB,CAAD,CAASyJ,CAAT,CAAmB4T,CAAnB,CAAyBc,CAAzB,CAAmCE,CAAnC,CAAyD,CA6IvEsP,QAASA,EAA0B,EAAG,CACpCC,EAAA,CAAkB,IAClBC,EAAA,EAFoC,CAOtCC,QAASA,EAAU,EAAG,CAEpBC,CAAA,CAAcC,CAAA,EACdD,EAAA,CAAcjpB,CAAA,CAAYipB,CAAZ,CAAA,CAA2B,IAA3B,CAAkCA,CAG5C1lB,GAAA,CAAO0lB,CAAP,CAAoBE,CAApB,CAAJ,GACEF,CADF,CACgBE,CADhB,CAKAC,EAAA,CADAD,CACA,CADkBF,CAVE,CActBF,QAASA,EAAoB,EAAG,CAC9B,IAAIM,EAAuBD,CAC3BJ,EAAA,EAEA,IAAIM,CAAJ,GAAuBllB,CAAAmlB,IAAA,EAAvB,EAAqCF,CAArC,GAA8DJ,CAA9D,CAIAK,CAEA,CAFiBllB,CAAAmlB,IAAA,EAEjB,CADAH,CACA,CADmBH,CACnB,CAAAxsB,CAAA,CAAQ+sB,CAAR,CAA4B,QAAQ,CAACC,CAAD,CAAW,CAC7CA,CAAA,CAASrlB,CAAAmlB,IAAA,EAAT,CAAqBN,CAArB,CAD6C,CAA/C,CAV8B,CAlKuC,IACnE7kB,EAAO,IAD4D,CAEnE8F,EAAWhP,CAAAgP,SAFwD,CAGnEwf,EAAUxuB,CAAAwuB,QAHyD,CAInEzJ,EAAa/kB,CAAA+kB,WAJsD,CAKnE0J,EAAezuB,CAAAyuB,aALoD,CAMnEC,EAAkB,EANiD,CAOnEC,EAActQ,CAAA,CAAqBhB,CAArB,CAElBnU,EAAA0lB,OAAA,CAAc,CAAA,CAOd1lB,EAAA2lB,6BAAA,CAAoCF,CAAAG,aACpC5lB,EAAA6lB,6BAAA,CAAoCJ,CAAAK,aAGpC9lB,EAAA+lB,gCAAA;AAAuCN,CAAAO,yBApBgC,KA0BnEnB,CA1BmE,CA0BtDG,CA1BsD,CA2BnEE,EAAiBpf,CAAAmgB,KA3BkD,CA4BnEC,GAAc3lB,CAAA3D,KAAA,CAAc,MAAd,CA5BqD,CA6BnE8nB,GAAkB,IA7BiD,CA8BnEI,EAAmB7P,CAAAqQ,QAAD,CAA2BR,QAAwB,EAAG,CACtE,GAAI,CACF,MAAOQ,EAAAa,MADL,CAEF,MAAO5jB,CAAP,CAAU,EAH0D,CAAtD,CAAoBlH,CAQ1CupB,EAAA,EAuBA5kB,EAAAmlB,IAAA,CAAWiB,QAAQ,CAACjB,CAAD,CAAMjkB,CAAN,CAAeilB,CAAf,CAAsB,CAInCvqB,CAAA,CAAYuqB,CAAZ,CAAJ,GACEA,CADF,CACU,IADV,CAKIrgB,EAAJ,GAAiBhP,CAAAgP,SAAjB,GAAkCA,CAAlC,CAA6ChP,CAAAgP,SAA7C,CACIwf,EAAJ,GAAgBxuB,CAAAwuB,QAAhB,GAAgCA,CAAhC,CAA0CxuB,CAAAwuB,QAA1C,CAGA,IAAIH,CAAJ,CAAS,CACP,IAAIkB,EAAYrB,CAAZqB,GAAiCF,CAGrChB,EAAA,CAAMmB,EAAA,CAAWnB,CAAX,CAAAc,KAKN,IAAIf,CAAJ,GAAuBC,CAAvB,GAAgCG,CAAArQ,CAAAqQ,QAAhC,EAAoDe,CAApD,EACE,MAAOrmB,EAET,KAAIumB,EAAWrB,CAAXqB,EAA6BC,EAAA,CAAUtB,CAAV,CAA7BqB,GAA2DC,EAAA,CAAUrB,CAAV,CAC/DD,EAAA,CAAiBC,CACjBH,EAAA,CAAmBmB,CAKfb,EAAArQ,CAAAqQ,QAAJ,EAA0BiB,CAA1B,EAAuCF,CAAvC,EAIOE,CAUL,GATE7B,EASF,CAToBS,CASpB,EAPIjkB,CAAJ,CACE4E,CAAA5E,QAAA,CAAiBikB,CAAjB,CADF,CAEYoB,CAAL,EAGLzgB,CAAA,CAAAA,CAAA,CAAwBqf,CAAxB,CAAwBA,CAAxB,CAtIJ9nB,CAsII,CAtII8nB,CAAA7nB,QAAA,CAAY,GAAZ,CAsIJ,CArIR,CAqIQ,CArIU,EAAX,GAAAD,CAAA,CAAe,EAAf,CAAoB8nB,CAAAsB,OAAA,CAAWppB,CAAX,CAqInB,CAAAyI,CAAA6d,KAAA,CAAgB,CAHX,EACL7d,CAAAmgB,KADK,CACWd,CAIlB,CAAIrf,CAAAmgB,KAAJ,GAAsBd,CAAtB,GACET,EADF,CACoBS,CADpB,CAdF,GACEG,CAAA,CAAQpkB,CAAA,CAAU,cAAV,CAA2B,WAAnC,CAAA,CAAgDilB,CAAhD,CAAuD,EAAvD,CAA2DhB,CAA3D,CACA,CAAAP,CAAA,EAFF,CAkBIF;EAAJ,GACEA,EADF,CACoBS,CADpB,CAGA,OAAOnlB,EAxCA,CA8CP,MAhJGkB,CAgJkBwjB,EAhJlBxjB,EAgJqC4E,CAAAmgB,KAhJrC/kB,SAAA,CAAY,IAAZ,CAAkB,EAAlB,CAqFkC,CAyEzClB,EAAAmmB,MAAA,CAAaO,QAAQ,EAAG,CACtB,MAAO7B,EADe,CAtI+C,KA0InEO,EAAqB,EA1I8C,CA2InEuB,EAAgB,CAAA,CA3ImD,CAmJnE5B,EAAkB,IAmDtB/kB,EAAA4mB,YAAA,CAAmBC,QAAQ,CAACC,CAAD,CAAW,CAEpC,GAAKH,CAAAA,CAAL,CAAoB,CAMlB,GAAI1R,CAAAqQ,QAAJ,CAAsBrtB,CAAA,CAAOnB,CAAP,CAAAiQ,GAAA,CAAkB,UAAlB,CAA8B0d,CAA9B,CAEtBxsB,EAAA,CAAOnB,CAAP,CAAAiQ,GAAA,CAAkB,YAAlB,CAAgC0d,CAAhC,CAEAkC,EAAA,CAAgB,CAAA,CAVE,CAapBvB,CAAAxnB,KAAA,CAAwBkpB,CAAxB,CACA,OAAOA,EAhB6B,CAyBtC9mB,EAAA+mB,uBAAA,CAA8BC,QAAQ,EAAG,CACvC/uB,CAAA,CAAOnB,CAAP,CAAAmwB,IAAA,CAAmB,qBAAnB,CAA0CxC,CAA1C,CADuC,CASzCzkB,EAAAknB,iBAAA,CAAwBvC,CAexB3kB,EAAAmnB,SAAA,CAAgBC,QAAQ,EAAG,CACzB,IAAInB,EAAOC,EAAAvpB,KAAA,CAAiB,MAAjB,CACX,OAAOspB,EAAA,CAAOA,CAAA/kB,QAAA,CAAa,sBAAb,CAAqC,EAArC,CAAP,CAAkD,EAFhC,CAoB3BlB,EAAAqnB,MAAA,CAAaC,QAAQ,CAACrnB,CAAD,CAAKsnB,CAAL,CAAYC,CAAZ,CAAsB,CACzC,IAAIC,CAEJF,EAAA,CAAQA,CAAR,EAAiB,CACjBC,EAAA,CAAWA,CAAX,EAAuB/B,CAAAiC,kBAEvBjC,EAAAK,aAAA,CAAyB0B,CAAzB,CACAC,EAAA,CAAY5L,CAAA,CAAW,QAAQ,EAAG,CAChC,OAAO2J,CAAA,CAAgBiC,CAAhB,CACPhC;CAAAG,aAAA,CAAyB3lB,CAAzB,CAA6BunB,CAA7B,CAFgC,CAAtB,CAGTD,CAHS,CAIZ/B,EAAA,CAAgBiC,CAAhB,CAAA,CAA6BD,CAE7B,OAAOC,EAbkC,CA2B3CznB,EAAAqnB,MAAAM,OAAA,CAAoBC,QAAQ,CAACC,CAAD,CAAU,CACpC,GAAIrC,CAAA9sB,eAAA,CAA+BmvB,CAA/B,CAAJ,CAA6C,CAC3C,IAAIL,EAAWhC,CAAA,CAAgBqC,CAAhB,CACf,QAAOrC,CAAA,CAAgBqC,CAAhB,CACPtC,EAAA,CAAasC,CAAb,CACApC,EAAAG,aAAA,CAAyBvqB,CAAzB,CAA+BmsB,CAA/B,CACA,OAAO,CAAA,CALoC,CAO7C,MAAO,CAAA,CAR6B,CAtSiC,CAoTzExV,QAASA,GAAgB,EAAG,CAC1B,IAAA4L,KAAA,CAAY,CAAC,SAAD,CAAY,MAAZ,CAAoB,UAApB,CAAgC,WAAhC,CAA6C,sBAA7C,CACP,QAAQ,CAAC/H,CAAD,CAAY1B,CAAZ,CAAoBc,CAApB,CAAgC5C,CAAhC,CAA6C8C,CAA7C,CAAmE,CAC9E,MAAO,KAAIqP,EAAJ,CAAY3O,CAAZ,CAAqBxD,CAArB,CAAgC8B,CAAhC,CAAsCc,CAAtC,CAAgDE,CAAhD,CADuE,CADpE,CADc,CAyF5BjD,QAASA,GAAqB,EAAG,CAE/B,IAAA0L,KAAA,CAAYC,QAAQ,EAAG,CAGrBiK,QAASA,EAAY,CAACC,CAAD,CAAUxD,CAAV,CAAmB,CA0MtCyD,QAASA,EAAO,CAACC,CAAD,CAAQ,CAClBA,CAAJ,GAAcC,CAAd,GACOC,CAAL,CAEWA,CAFX,GAEwBF,CAFxB,GAGEE,CAHF,CAGaF,CAAAG,EAHb,EACED,CADF,CACaF,CAQb,CAHAI,CAAA,CAAKJ,CAAAG,EAAL,CAAcH,CAAAK,EAAd,CAGA,CAFAD,CAAA,CAAKJ,CAAL,CAAYC,CAAZ,CAEA,CADAA,CACA,CADWD,CACX,CAAAC,CAAAE,EAAA,CAAa,IAVf,CADsB,CAmBxBC,QAASA,EAAI,CAACE,CAAD,CAAYC,CAAZ,CAAuB,CAC9BD,CAAJ,GAAkBC,CAAlB,GACMD,CACJ,GADeA,CAAAD,EACf,CAD6BE,CAC7B,EAAIA,CAAJ,GAAeA,CAAAJ,EAAf,CAA6BG,CAA7B,CAFF,CADkC,CA5NpC,GAAIR,CAAJ,GAAeU,EAAf,CACE,KAAM9wB,EAAA,CAAO,eAAP,CAAA,CAAwB,KAAxB;AAAoEowB,CAApE,CAAN,CAFoC,IAKlCW,EAAO,CAL2B,CAMlCC,EAAQjuB,CAAA,CAAO,EAAP,CAAW6pB,CAAX,CAAoB,CAACqE,GAAIb,CAAL,CAApB,CAN0B,CAOlC1iB,EAAO3F,CAAA,EAP2B,CAQlCmpB,EAAYtE,CAAZsE,EAAuBtE,CAAAsE,SAAvBA,EAA4CC,MAAAC,UARV,CASlCC,EAAUtpB,CAAA,EATwB,CAUlCwoB,EAAW,IAVuB,CAWlCC,EAAW,IAyCf,OAAQM,EAAA,CAAOV,CAAP,CAAR,CAA0B,CAoBxBkB,IAAKA,QAAQ,CAACzwB,CAAD,CAAMY,CAAN,CAAa,CACxB,GAAI,CAAAwC,CAAA,CAAYxC,CAAZ,CAAJ,CAAA,CACA,GAAIyvB,CAAJ,CAAeC,MAAAC,UAAf,CAAiC,CAC/B,IAAIG,EAAWF,CAAA,CAAQxwB,CAAR,CAAX0wB,GAA4BF,CAAA,CAAQxwB,CAAR,CAA5B0wB,CAA2C,CAAC1wB,IAAKA,CAAN,CAA3C0wB,CAEJlB,EAAA,CAAQkB,CAAR,CAH+B,CAM3B1wB,CAAN,GAAa6M,EAAb,EAAoBqjB,CAAA,EACpBrjB,EAAA,CAAK7M,CAAL,CAAA,CAAYY,CAERsvB,EAAJ,CAAWG,CAAX,EACE,IAAAM,OAAA,CAAYhB,CAAA3vB,IAAZ,CAGF,OAAOY,EAdP,CADwB,CApBF,CAiDxB8M,IAAKA,QAAQ,CAAC1N,CAAD,CAAM,CACjB,GAAIqwB,CAAJ,CAAeC,MAAAC,UAAf,CAAiC,CAC/B,IAAIG,EAAWF,CAAA,CAAQxwB,CAAR,CAEf,IAAK0wB,CAAAA,CAAL,CAAe,MAEflB,EAAA,CAAQkB,CAAR,CAL+B,CAQjC,MAAO7jB,EAAA,CAAK7M,CAAL,CATU,CAjDK,CAwExB2wB,OAAQA,QAAQ,CAAC3wB,CAAD,CAAM,CACpB,GAAIqwB,CAAJ,CAAeC,MAAAC,UAAf,CAAiC,CAC/B,IAAIG,EAAWF,CAAA,CAAQxwB,CAAR,CAEf,IAAK0wB,CAAAA,CAAL,CAAe,MAEXA,EAAJ,GAAiBhB,CAAjB,GAA2BA,CAA3B,CAAsCgB,CAAAZ,EAAtC,CACIY,EAAJ,GAAiBf,CAAjB,GAA2BA,CAA3B,CAAsCe,CAAAd,EAAtC,CACAC,EAAA,CAAKa,CAAAd,EAAL,CAAgBc,CAAAZ,EAAhB,CAEA,QAAOU,CAAA,CAAQxwB,CAAR,CATwB,CAY3BA,CAAN,GAAa6M,EAAb,GAEA,OAAOA,CAAA,CAAK7M,CAAL,CACP,CAAAkwB,CAAA,EAHA,CAboB,CAxEE,CAoGxBU,UAAWA,QAAQ,EAAG,CACpB/jB,CAAA,CAAO3F,CAAA,EACPgpB,EAAA,CAAO,CACPM,EAAA,CAAUtpB,CAAA,EACVwoB;CAAA,CAAWC,CAAX,CAAsB,IAJF,CApGE,CAqHxBkB,QAASA,QAAQ,EAAG,CAGlBL,CAAA,CADAL,CACA,CAFAtjB,CAEA,CAFO,IAGP,QAAOojB,CAAA,CAAOV,CAAP,CAJW,CArHI,CA6IxB3e,KAAMA,QAAQ,EAAG,CACf,MAAO1O,EAAA,CAAO,EAAP,CAAWiuB,CAAX,CAAkB,CAACD,KAAMA,CAAP,CAAlB,CADQ,CA7IO,CApDY,CAFxC,IAAID,EAAS,EAiPbX,EAAA1e,KAAA,CAAoBkgB,QAAQ,EAAG,CAC7B,IAAIlgB,EAAO,EACX/Q,EAAA,CAAQowB,CAAR,CAAgB,QAAQ,CAAChI,CAAD,CAAQsH,CAAR,CAAiB,CACvC3e,CAAA,CAAK2e,CAAL,CAAA,CAAgBtH,CAAArX,KAAA,EADuB,CAAzC,CAGA,OAAOA,EALsB,CAmB/B0e,EAAA5hB,IAAA,CAAmBqjB,QAAQ,CAACxB,CAAD,CAAU,CACnC,MAAOU,EAAA,CAAOV,CAAP,CAD4B,CAKrC,OAAOD,EA1Qc,CAFQ,CA+TjCxS,QAASA,GAAsB,EAAG,CAChC,IAAAsI,KAAA,CAAY,CAAC,eAAD,CAAkB,QAAQ,CAAC3L,CAAD,CAAgB,CACpD,MAAOA,EAAA,CAAc,WAAd,CAD6C,CAA1C,CADoB,CAu2ClCvG,QAASA,GAAgB,CAAC9G,CAAD,CAAW4kB,CAAX,CAAkC,CAczDC,QAASA,EAAoB,CAACvkB,CAAD,CAAQwkB,CAAR,CAAuBC,CAAvB,CAAqC,CAChE,IAAIC,EAAe,oCAAnB,CAEIC,EAAWnqB,CAAA,EAEfrH,EAAA,CAAQ6M,CAAR,CAAe,QAAQ,CAAC4kB,CAAD,CAAaC,CAAb,CAAwB,CAC7CD,CAAA,CAAaA,CAAA1R,KAAA,EAEb,IAAI0R,CAAJ,GAAkBE,EAAlB,CACEH,CAAA,CAASE,CAAT,CAAA,CAAsBC,CAAA,CAAaF,CAAb,CADxB,KAAA,CAIA,IAAIjrB,EAAQirB,CAAAjrB,MAAA,CAAiB+qB,CAAjB,CAEZ,IAAK/qB,CAAAA,CAAL,CACE,KAAMorB,EAAA,CAAe,MAAf,CAGFP,CAHE,CAGaK,CAHb,CAGwBD,CAHxB,CAIDH,CAAA,CAAe,gCAAf;AACD,0BALE,CAAN,CAQFE,CAAA,CAASE,CAAT,CAAA,CAAsB,CACpBG,KAAMrrB,CAAA,CAAM,CAAN,CAAA,CAAS,CAAT,CADc,CAEpBsrB,WAAyB,GAAzBA,GAAYtrB,CAAA,CAAM,CAAN,CAFQ,CAGpBurB,SAAuB,GAAvBA,GAAUvrB,CAAA,CAAM,CAAN,CAHU,CAIpBwrB,SAAUxrB,CAAA,CAAM,CAAN,CAAVwrB,EAAsBN,CAJF,CAMlBlrB,EAAA,CAAM,CAAN,CAAJ,GACEmrB,CAAA,CAAaF,CAAb,CADF,CAC6BD,CAAA,CAASE,CAAT,CAD7B,CArBA,CAH6C,CAA/C,CA6BA,OAAOF,EAlCyD,CAiElES,QAASA,EAAwB,CAACvmB,CAAD,CAAO,CACtC,IAAIuC,EAASvC,CAAApE,OAAA,CAAY,CAAZ,CACb,IAAK2G,CAAAA,CAAL,EAAeA,CAAf,GAA0BpJ,CAAA,CAAUoJ,CAAV,CAA1B,CACE,KAAM2jB,EAAA,CAAe,QAAf,CAAwHlmB,CAAxH,CAAN,CAEF,GAAIA,CAAJ,GAAaA,CAAAqU,KAAA,EAAb,CACE,KAAM6R,EAAA,CAAe,QAAf,CAEAlmB,CAFA,CAAN,CANoC,CAYxCwmB,QAASA,EAAmB,CAAC7f,CAAD,CAAY,CACtC,IAAI8f,EAAU9f,CAAA8f,QAAVA,EAAgC9f,CAAAxD,WAAhCsjB,EAAwD9f,CAAA3G,KAEvD,EAAAhM,CAAA,CAAQyyB,CAAR,CAAL,EAAyBvzB,CAAA,CAASuzB,CAAT,CAAzB,EACEnyB,CAAA,CAAQmyB,CAAR,CAAiB,QAAQ,CAACpxB,CAAD,CAAQZ,CAAR,CAAa,CACpC,IAAIqG,EAAQzF,CAAAyF,MAAA,CAAY4rB,CAAZ,CACDrxB,EAAAyJ,UAAAkB,CAAgBlF,CAAA,CAAM,CAAN,CAAA3G,OAAhB6L,CACX,GAAWymB,CAAA,CAAQhyB,CAAR,CAAX,CAA0BqG,CAAA,CAAM,CAAN,CAA1B,CAAqCrG,CAArC,CAHoC,CAAtC,CAOF,OAAOgyB,EAX+B,CA3FiB,IACrDE,EAAgB,EADqC,CAGrDC,EAA2B,mCAH0B,CAIrDC,EAAyB,2BAJ4B,CAKrDC,EAAuBhuB,EAAA,CAAQ,2BAAR,CAL8B;AAMrD4tB,EAAwB,6BAN6B,CAWrDK,EAA4B,yBAXyB,CAYrDd,EAAetqB,CAAA,EAuHnB,KAAAgL,UAAA,CAAiBqgB,QAASC,GAAiB,CAACjnB,CAAD,CAAOknB,CAAP,CAAyB,CAClEpjB,EAAA,CAAU9D,CAAV,CAAgB,MAAhB,CACAmE,GAAA,CAAwBnE,CAAxB,CAA8B,WAA9B,CACI/L,EAAA,CAAS+L,CAAT,CAAJ,EACEumB,CAAA,CAAyBvmB,CAAzB,CA6BA,CA5BA8D,EAAA,CAAUojB,CAAV,CAA4B,kBAA5B,CA4BA,CA3BKP,CAAAhyB,eAAA,CAA6BqL,CAA7B,CA2BL,GA1BE2mB,CAAA,CAAc3mB,CAAd,CACA,CADsB,EACtB,CAAAa,CAAAmE,QAAA,CAAiBhF,CAAjB,CAzIOmnB,WAyIP,CAAgC,CAAC,WAAD,CAAc,mBAAd,CAC9B,QAAQ,CAACtJ,CAAD,CAAYnP,CAAZ,CAA+B,CACrC,IAAI0Y,EAAa,EACjB9yB,EAAA,CAAQqyB,CAAA,CAAc3mB,CAAd,CAAR,CAA6B,QAAQ,CAACknB,CAAD,CAAmB5tB,CAAnB,CAA0B,CAC7D,GAAI,CACF,IAAIqN,EAAYkX,CAAA5c,OAAA,CAAiBimB,CAAjB,CACZxyB,EAAA,CAAWiS,CAAX,CAAJ,CACEA,CADF,CACc,CAAEvF,QAAS3J,EAAA,CAAQkP,CAAR,CAAX,CADd,CAEYvF,CAAAuF,CAAAvF,QAFZ,EAEiCuF,CAAA2d,KAFjC,GAGE3d,CAAAvF,QAHF,CAGsB3J,EAAA,CAAQkP,CAAA2d,KAAR,CAHtB,CAKA3d,EAAA0gB,SAAA,CAAqB1gB,CAAA0gB,SAArB,EAA2C,CAC3C1gB,EAAArN,MAAA,CAAkBA,CAClBqN,EAAA3G,KAAA,CAAiB2G,CAAA3G,KAAjB,EAAmCA,CACnC2G,EAAA8f,QAAA,CAAoBD,CAAA,CAAoB7f,CAApB,CACpBA,KAAAA,EAAAA,CAAAA,CAA0C2gB,EAAA3gB,CAAA2gB,SAhDtD,IAAIA,CAAJ,GAAkB,CAAArzB,CAAA,CAASqzB,CAAT,CAAlB,EAAwC,CAAA,QAAA7uB,KAAA,CAAc6uB,CAAd,CAAxC,EACE,KAAMpB,EAAA,CAAe,aAAf;AAEFoB,CAFE,CA+CkEtnB,CA/ClE,CAAN,CA+CU2G,CAAA2gB,SAAA,CAzCLA,CAyCK,EAzCO,IA0CP3gB,EAAAX,aAAA,CAAyBkhB,CAAAlhB,aACzBohB,EAAAvtB,KAAA,CAAgB8M,CAAhB,CAbE,CAcF,MAAOnI,CAAP,CAAU,CACVkQ,CAAA,CAAkBlQ,CAAlB,CADU,CAfiD,CAA/D,CAmBA,OAAO4oB,EArB8B,CADT,CAAhC,CAyBF,EAAAT,CAAA,CAAc3mB,CAAd,CAAAnG,KAAA,CAAyBqtB,CAAzB,CA9BF,EAgCE5yB,CAAA,CAAQ0L,CAAR,CAAc7K,EAAA,CAAc8xB,EAAd,CAAd,CAEF,OAAO,KArC2D,CA+HpE,KAAArgB,UAAA,CAAiB2gB,QAASC,EAAiB,CAACxnB,CAAD,CAAOwgB,CAAP,CAAgB,CAQzDxb,QAASA,EAAO,CAAC6Y,CAAD,CAAY,CAC1B4J,QAASA,EAAc,CAACvrB,CAAD,CAAK,CAC1B,MAAIxH,EAAA,CAAWwH,CAAX,CAAJ,EAAsBlI,CAAA,CAAQkI,CAAR,CAAtB,CACsB,QAAQ,CAACwrB,CAAD,CAAWC,CAAX,CAAmB,CAC7C,MAAO9J,EAAA5c,OAAA,CAAiB/E,CAAjB,CAAqB,IAArB,CAA2B,CAAC0rB,SAAUF,CAAX,CAAqBG,OAAQF,CAA7B,CAA3B,CADsC,CADjD,CAKSzrB,CANiB,CAU5B,IAAI4rB,EAAatH,CAAAsH,SAAD,EAAsBtH,CAAAuH,YAAtB,CAAiDvH,CAAAsH,SAAjD,CAA4C,EAA5D,CACIE,EAAM,CACR7kB,WAAYA,CADJ,CAER8kB,aAAcC,EAAA,CAAwB1H,CAAArd,WAAxB,CAAd8kB,EAA6DzH,CAAAyH,aAA7DA,EAAqF,OAF7E,CAGRH,SAAUL,CAAA,CAAeK,CAAf,CAHF,CAIRC,YAAaN,CAAA,CAAejH,CAAAuH,YAAf,CAJL,CAKRI,WAAY3H,CAAA2H,WALJ,CAMRhnB,MAAO,EANC,CAORinB,iBAAkB5H,CAAAsF,SAAlBsC,EAAsC,EAP9B,CAQRd,SAAU,GARF;AASRb,QAASjG,CAAAiG,QATD,CAaVnyB,EAAA,CAAQksB,CAAR,CAAiB,QAAQ,CAACjkB,CAAD,CAAM9H,CAAN,CAAW,CACZ,GAAtB,GAAIA,CAAAmH,OAAA,CAAW,CAAX,CAAJ,GAA2BosB,CAAA,CAAIvzB,CAAJ,CAA3B,CAAsC8H,CAAtC,CADkC,CAApC,CAIA,OAAOyrB,EA7BmB,CAP5B,GAAK,CAAA/zB,CAAA,CAAS+L,CAAT,CAAL,CAEE,MADA1L,EAAA,CAAQ0L,CAAR,CAAc7K,EAAA,CAAc6G,EAAA,CAAK,IAAL,CAAWwrB,CAAX,CAAd,CAAd,CACO,CAAA,IAGT,KAAIrkB,EAAaqd,CAAArd,WAAbA,EAAmC,QAAQ,EAAG,EAyClD7O,EAAA,CAAQksB,CAAR,CAAiB,QAAQ,CAACjkB,CAAD,CAAM9H,CAAN,CAAW,CACZ,GAAtB,GAAIA,CAAAmH,OAAA,CAAW,CAAX,CAAJ,GACEoJ,CAAA,CAAQvQ,CAAR,CAEA,CAFe8H,CAEf,CAAI7H,CAAA,CAAWyO,CAAX,CAAJ,GAA4BA,CAAA,CAAW1O,CAAX,CAA5B,CAA8C8H,CAA9C,CAHF,CADkC,CAApC,CAQAyI,EAAAmY,QAAA,CAAkB,CAAC,WAAD,CAElB,OAAO,KAAAxW,UAAA,CAAe3G,CAAf,CAAqBgF,CAArB,CAzDkD,CAiF3D,KAAAqjB,2BAAA,CAAkCC,QAAQ,CAACC,CAAD,CAAS,CACjD,MAAIp1B,EAAA,CAAUo1B,CAAV,CAAJ,EACE9C,CAAA4C,2BAAA,CAAiDE,CAAjD,CACO,CAAA,IAFT,EAIS9C,CAAA4C,2BAAA,EALwC,CA8BnD,KAAAG,4BAAA,CAAmCC,QAAQ,CAACF,CAAD,CAAS,CAClD,MAAIp1B,EAAA,CAAUo1B,CAAV,CAAJ,EACE9C,CAAA+C,4BAAA,CAAkDD,CAAlD,CACO,CAAA,IAFT,EAIS9C,CAAA+C,4BAAA,EALyC,CAoCpD;IAAI1nB,EAAmB,CAAA,CACvB,KAAAA,iBAAA,CAAwB4nB,QAAQ,CAACC,CAAD,CAAU,CACxC,MAAIx1B,EAAA,CAAUw1B,CAAV,CAAJ,EACE7nB,CACO,CADY6nB,CACZ,CAAA,IAFT,EAIO7nB,CALiC,CA4B1C,KAAI8nB,EAAiC,CAAA,CACrC,KAAAA,+BAAA,CAAsCC,QAAQ,CAACF,CAAD,CAAU,CACtD,MAAIx1B,EAAA,CAAUw1B,CAAV,CAAJ,EACEC,CACO,CAD0BD,CAC1B,CAAA,IAFT,EAIOC,CAL+C,CAQxD,KAAIE,EAAM,EAqBV,KAAAC,aAAA,CAAoBC,QAAQ,CAAC3zB,CAAD,CAAQ,CAClC,MAAIwB,UAAA1C,OAAJ,EACE20B,CACO,CADDzzB,CACC,CAAA,IAFT,EAIOyzB,CAL2B,CAQpC,KAAIG,EAAiC,CAAA,CAoBrC,KAAAC,yBAAA,CAAgCC,QAAQ,CAAC9zB,CAAD,CAAQ,CAC9C,MAAIwB,UAAA1C,OAAJ,EACE80B,CACO,CAD0B5zB,CAC1B,CAAA,IAFT,EAIO4zB,CALuC,CAShD,KAAIG,EAAkC,CAAA,CAoBtC,KAAAC,0BAAA,CAAiCC,QAAQ,CAACj0B,CAAD,CAAQ,CAC/C,MAAIwB,UAAA1C,OAAJ,EACEi1B,CACO,CAD2B/zB,CAC3B,CAAA,IAFT,EAIO+zB,CALwC,CAajD,KAAIG,EAAgB5tB,CAAA,EAcpB,KAAA6tB,2BAAA,CAAkCC,QAAQ,CAACC,CAAD,CAAcC,CAAd,CAA4BC,CAA5B,CAAiC,CACzE,IAAIn1B,EAAOi1B,CAAAjnB,YAAA,EAAPhO,CAAmC,GAAnCA,CAAyCk1B,CAAAlnB,YAAA,EAE7C;GAAIhO,CAAJ,GAAW80B,EAAX,EAA4BA,CAAA,CAAc90B,CAAd,CAA5B,GAAmDm1B,CAAnD,CACE,KAAM1D,EAAA,CAAe,aAAf,CAAkHwD,CAAlH,CAA+HC,CAA/H,CAA6IJ,CAAA,CAAc90B,CAAd,CAA7I,CAAiKm1B,CAAjK,CAAN,CAGFL,CAAA,CAAc90B,CAAd,CAAA,CAAqBm1B,CACrB,OAAO,KARkE,CAoB1EC,UAAuC,EAAG,CACzCC,QAASA,EAAe,CAACF,CAAD,CAAMG,CAAN,CAAc,CACpCz1B,CAAA,CAAQy1B,CAAR,CAAgB,QAAQ,CAACC,CAAD,CAAI,CAAET,CAAA,CAAcS,CAAAvnB,YAAA,EAAd,CAAA,CAAiCmnB,CAAnC,CAA5B,CADoC,CAItCE,CAAA,CAAgBG,CAAAC,KAAhB,CAAmC,CACjC,eADiC,CAEjC,aAFiC,CAGjC,aAHiC,CAAnC,CAKAJ,EAAA,CAAgBG,CAAAE,IAAhB,CAAkC,CAAC,SAAD,CAAlC,CACAL,EAAA,CAAgBG,CAAAG,IAAhB,CAAkC,sGAAA,MAAA,CAAA,GAAA,CAAlC,CAUAN,EAAA,CAAgBG,CAAAI,UAAhB,CAAwC,wFAAA,MAAA,CAAA,GAAA,CAAxC,CAOAP,EAAA,CAAgBG,CAAAK,aAAhB,CAA2C,qLAAA,MAAA,CAAA,GAAA,CAA3C,CA5ByC,CAA1CT,CAAD,EA8CA;IAAAhQ,KAAA,CAAY,CACF,WADE,CACW,cADX,CAC2B,mBAD3B,CACgD,kBADhD,CACoE,QADpE,CAEF,aAFE,CAEa,YAFb,CAE2B,MAF3B,CAEmC,UAFnC,CAGV,QAAQ,CAACgE,CAAD,CAAc7O,CAAd,CAA8BN,CAA9B,CAAmD8C,CAAnD,CAAuElB,CAAvE,CACClC,CADD,CACgBoC,CADhB,CAC8BM,CAD9B,CACsC1D,CADtC,CACgD,CAgBxDmd,QAASA,EAAmB,EAAG,CAC7B,GAAI,CACF,GAAM,CAAA,EAAExB,EAAR,CAGE,KADAyB,GACM,CADWpwB,IAAAA,EACX,CAAA8rB,CAAA,CAAe,SAAf,CAA8E4C,CAA9E,CAAN,CAGFtY,CAAAnP,OAAA,CAAkB,QAAQ,EAAG,CAC3B,IAD2B,IAClBnM,EAAI,CADc,CACXY,EAAK00B,EAAAr2B,OAArB,CAA4Ce,CAA5C,CAAgDY,CAAhD,CAAoD,EAAEZ,CAAtD,CACE,GAAI,CACFs1B,EAAA,CAAet1B,CAAf,CAAA,EADE,CAEF,MAAOsJ,CAAP,CAAU,CACVkQ,CAAA,CAAkBlQ,CAAlB,CADU,CAKdgsB,EAAA,CAAiBpwB,IAAAA,EATU,CAA7B,CAPE,CAAJ,OAkBU,CACR2uB,EAAA,EADQ,CAnBmB,CAyB/B0B,QAASA,GAAc,CAACp1B,CAAD,CAAQq1B,CAAR,CAAoB,CACzC,GAAKr1B,CAAAA,CAAL,CACE,MAAOA,EAET,IAAK,CAAApB,CAAA,CAASoB,CAAT,CAAL,CACE,KAAM6wB,EAAA,CAAe,QAAf,CAAuEwE,CAAvE,CAAmFr1B,CAAAuC,SAAA,EAAnF,CAAN,CAwBF,IAbA,IAAIkkB,EAAS,EAAb,CAGI6O,EAAgBtW,CAAA,CAAKhf,CAAL,CAHpB,CAKIu1B,EAAa,qCALjB,CAMI9e,EAAU,IAAArT,KAAA,CAAUkyB,CAAV,CAAA,CAA2BC,CAA3B,CAAwC,KANtD,CASIC,EAAUF,CAAA3xB,MAAA,CAAoB8S,CAApB,CATd,CAYIgf,EAAoBC,IAAAC,MAAA,CAAWH,CAAA12B,OAAX;AAA4B,CAA5B,CAZxB,CAaSe,EAAI,CAAb,CAAgBA,CAAhB,CAAoB41B,CAApB,CAAuC51B,CAAA,EAAvC,CACE,IAAI+1B,EAAe,CAAfA,CAAW/1B,CAAf,CAEA4mB,EAAAA,CAAAA,CAAUhL,CAAAoa,mBAAA,CAAwB7W,CAAA,CAAKwW,CAAA,CAAQI,CAAR,CAAL,CAAxB,CAFV,CAIAnP,EAAAA,CAAAA,EAAU,GAAVA,CAAgBzH,CAAA,CAAKwW,CAAA,CAAQI,CAAR,CAAmB,CAAnB,CAAL,CAAhBnP,CAIEqP,EAAAA,CAAY9W,CAAA,CAAKwW,CAAA,CAAY,CAAZ,CAAQ31B,CAAR,CAAL,CAAA8D,MAAA,CAA2B,IAA3B,CAGhB8iB,EAAA,EAAUhL,CAAAoa,mBAAA,CAAwB7W,CAAA,CAAK8W,CAAA,CAAU,CAAV,CAAL,CAAxB,CAGe,EAAzB,GAAIA,CAAAh3B,OAAJ,GACE2nB,CADF,EACa,GADb,CACmBzH,CAAA,CAAK8W,CAAA,CAAU,CAAV,CAAL,CADnB,CAGA,OAAOrP,EA/CkC,CAmD3CsP,QAASA,EAAU,CAAClyB,CAAD,CAAUmyB,CAAV,CAA4B,CAC7C,GAAIA,CAAJ,CAAsB,CACpB,IAAIr2B,EAAOZ,MAAAY,KAAA,CAAYq2B,CAAZ,CAAX,CACIn2B,CADJ,CACOo2B,CADP,CACU72B,CAELS,EAAA,CAAI,CAAT,KAAYo2B,CAAZ,CAAgBt2B,CAAAb,OAAhB,CAA6Be,CAA7B,CAAiCo2B,CAAjC,CAAoCp2B,CAAA,EAApC,CACET,CACA,CADMO,CAAA,CAAKE,CAAL,CACN,CAAA,IAAA,CAAKT,CAAL,CAAA,CAAY42B,CAAA,CAAiB52B,CAAjB,CANM,CAAtB,IASE,KAAA82B,MAAA,CAAa,EAGf,KAAAC,UAAA,CAAiBtyB,CAb4B,CAqN/CuyB,QAASA,EAAc,CAACvyB,CAAD,CAAUotB,CAAV,CAAoBjxB,CAApB,CAA2B,CAIhDq2B,EAAA7X,UAAA,CAA8B,QAA9B,CAAyCyS,CAAzC,CAAoD,GAChDqF,EAAAA,CAAaD,EAAAzX,WAAA0X,WACjB,KAAIC,EAAYD,CAAA,CAAW,CAAX,CAEhBA,EAAAE,gBAAA,CAA2BD,CAAA5rB,KAA3B,CACA4rB,EAAAv2B,MAAA,CAAkBA,CAClB6D,EAAAyyB,WAAAG,aAAA,CAAgCF,CAAhC,CAVgD,CAalDG,QAASA,GAAY,CAACnE,CAAD,CAAWoE,CAAX,CAAsB,CACzC,GAAI,CACFpE,CAAA3N,SAAA,CAAkB+R,CAAlB,CADE,CAEF,MAAOxtB,CAAP,CAAU,EAH6B,CA9Ta;AAwXxD4C,QAASA,GAAO,CAAC6qB,CAAD,CAAgBC,CAAhB,CAA8BC,CAA9B,CAA2CC,CAA3C,CACIC,CADJ,CAC4B,CACpCJ,CAAN,WAA+B/3B,EAA/B,GAGE+3B,CAHF,CAGkB/3B,CAAA,CAAO+3B,CAAP,CAHlB,CAKA,KAAIK,EACIC,EAAA,CAAaN,CAAb,CAA4BC,CAA5B,CAA0CD,CAA1C,CACaE,CADb,CAC0BC,CAD1B,CAC2CC,CAD3C,CAERjrB,GAAAorB,gBAAA,CAAwBP,CAAxB,CACA,KAAIQ,EAAY,IAChB,OAAOC,SAAqB,CAACvrB,CAAD,CAAQwrB,CAAR,CAAwBnM,CAAxB,CAAiC,CAC3D,GAAKyL,CAAAA,CAAL,CACE,KAAM/F,EAAA,CAAe,WAAf,CAAN,CAEFpiB,EAAA,CAAU3C,CAAV,CAAiB,OAAjB,CAEIkrB,EAAJ,EAA8BA,CAAAO,cAA9B,GAKEzrB,CALF,CAKUA,CAAA0rB,QAAAC,KAAA,EALV,CAQAtM,EAAA,CAAUA,CAAV,EAAqB,EAdsC,KAevDuM,EAA0BvM,CAAAuM,wBAf6B,CAgBzDC,EAAwBxM,CAAAwM,sBACxBC,EAAAA,CAAsBzM,CAAAyM,oBAMpBF,EAAJ,EAA+BA,CAAAG,kBAA/B,GACEH,CADF,CAC4BA,CAAAG,kBAD5B,CAIKT,EAAL,GA6CA,CA7CA,CA0CF,CADI/zB,CACJ,CAzCgDu0B,CAyChD,EAzCgDA,CAwCpB,CAAc,CAAd,CAC5B,EAG6B,eAApB,GAAAh0B,EAAA,CAAUP,CAAV,CAAA,EAAuCd,EAAAhD,KAAA,CAAc8D,CAAd,CAAAoC,MAAA,CAA0B,KAA1B,CAAvC,CAA0E,KAA1E,CAAkF,MAH3F,CACS,MA3CP,CAUEqyB,EAAA,CANgB,MAAlB,GAAIV,CAAJ,CAMcv4B,CAAA,CACVk5B,EAAA,CAAaX,CAAb,CAAwBv4B,CAAA,CAAO,aAAP,CAAAkK,OAAA,CAA6B6tB,CAA7B,CAAA5tB,KAAA,EAAxB,CADU,CANd,CASWsuB,CAAJ,CAGO1pB,EAAAvM,MAAA9B,KAAA,CAA2Bq3B,CAA3B,CAHP;AAKOA,CAGd,IAAIe,CAAJ,CACE,IAASK,IAAAA,CAAT,GAA2BL,EAA3B,CACEG,CAAA7rB,KAAA,CAAe,GAAf,CAAqB+rB,CAArB,CAAsC,YAAtC,CAAoDL,CAAA,CAAsBK,CAAtB,CAAAC,SAApD,CAIJlsB,GAAAmsB,eAAA,CAAuBJ,CAAvB,CAAkChsB,CAAlC,CAEIwrB,EAAJ,EAAoBA,CAAA,CAAeQ,CAAf,CAA0BhsB,CAA1B,CAChBmrB,EAAJ,EAAqBA,CAAA,CAAgBnrB,CAAhB,CAAuBgsB,CAAvB,CAAkCA,CAAlC,CAA6CJ,CAA7C,CAEhBJ,EAAL,GACEV,CADF,CACkBK,CADlB,CACoC,IADpC,CAGA,OAAOa,EA9DoD,CAXnB,CAsG5CZ,QAASA,GAAY,CAACiB,CAAD,CAAWtB,CAAX,CAAyBuB,CAAzB,CAAuCtB,CAAvC,CAAoDC,CAApD,CACGC,CADH,CAC2B,CAqD9CC,QAASA,EAAe,CAACnrB,CAAD,CAAQqsB,CAAR,CAAkBC,CAAlB,CAAgCV,CAAhC,CAAyD,CAAA,IAC/DW,CAD+D,CAClDh1B,CADkD,CAC5Ci1B,CAD4C,CAChCz4B,CADgC,CAC7BY,CAD6B,CACpB83B,CADoB,CAE3EC,CAGJ,IAAIC,CAAJ,CAOE,IAHAD,CAGK,CAHgB71B,KAAJ,CADIw1B,CAAAr5B,OACJ,CAGZ,CAAAe,CAAA,CAAI,CAAT,CAAYA,CAAZ,CAAgB64B,CAAA55B,OAAhB,CAAgCe,CAAhC,EAAqC,CAArC,CACE84B,CACA,CADMD,CAAA,CAAQ74B,CAAR,CACN,CAAA24B,CAAA,CAAeG,CAAf,CAAA,CAAsBR,CAAA,CAASQ,CAAT,CAT1B,KAYEH,EAAA,CAAiBL,CAGdt4B,EAAA,CAAI,CAAT,KAAYY,CAAZ,CAAiBi4B,CAAA55B,OAAjB,CAAiCe,CAAjC,CAAqCY,CAArC,CAAA,CACE4C,CAIA,CAJOm1B,CAAA,CAAeE,CAAA,CAAQ74B,CAAA,EAAR,CAAf,CAIP,CAHA+4B,CAGA,CAHaF,CAAA,CAAQ74B,CAAA,EAAR,CAGb,CAFAw4B,CAEA,CAFcK,CAAA,CAAQ74B,CAAA,EAAR,CAEd,CAAI+4B,CAAJ,EACMA,CAAA9sB,MAAJ,EACEwsB,CACA,CADaxsB,CAAA2rB,KAAA,EACb,CAAA1rB,EAAAmsB,eAAA,CAAuBr5B,CAAA,CAAOwE,CAAP,CAAvB,CAAqCi1B,CAArC,CAFF,EAIEA,CAJF,CAIexsB,CAiBf,CAbEysB,CAaF,CAdIK,CAAAC,wBAAJ,CAC2BC,EAAA,CACrBhtB,CADqB,CACd8sB,CAAA9F,WADc,CACS4E,CADT,CAD3B,CAIYqB,CAAAH,CAAAG,sBAAL,EAAyCrB,CAAzC,CACoBA,CADpB,CAGKA,CAAAA,CAAL,EAAgCb,CAAhC,CACoBiC,EAAA,CAAwBhtB,CAAxB,CAA+B+qB,CAA/B,CADpB,CAIoB,IAG3B,CAAA+B,CAAA,CAAWP,CAAX,CAAwBC,CAAxB,CAAoCj1B,CAApC,CAA0C+0B,CAA1C,CAAwDG,CAAxD,CAtBF,EAwBWF,CAxBX,EAyBEA,CAAA,CAAYvsB,CAAZ,CAAmBzI,CAAAsb,WAAnB;AAAoC5Z,IAAAA,EAApC,CAA+C2yB,CAA/C,CAlD2E,CA7CjF,IAR8C,IAC1CgB,EAAU,EADgC,CAI1CM,EAAcr6B,CAAA,CAAQw5B,CAAR,CAAda,EAAoCb,CAApCa,WAAwDn6B,EAJd,CAK1Co6B,CAL0C,CAKnClH,CALmC,CAKXpT,CALW,CAKcua,CALd,CAK2BT,CAL3B,CAQrC54B,EAAI,CAAb,CAAgBA,CAAhB,CAAoBs4B,CAAAr5B,OAApB,CAAqCe,CAAA,EAArC,CAA0C,CACxCo5B,CAAA,CAAQ,IAAIlD,CAIC,GAAb,GAAI/N,EAAJ,EACEmR,EAAA,CAA0BhB,CAA1B,CAAoCt4B,CAApC,CAAuCm5B,CAAvC,CAKFjH,EAAA,CAAaqH,EAAA,CAAkBjB,CAAA,CAASt4B,CAAT,CAAlB,CAA+B,EAA/B,CAAmCo5B,CAAnC,CAAgD,CAAN,GAAAp5B,CAAA,CAAUi3B,CAAV,CAAwB/xB,IAAAA,EAAlE,CACmBgyB,CADnB,CAQb,EALA6B,CAKA,CALc7G,CAAAjzB,OAAD,CACPu6B,EAAA,CAAsBtH,CAAtB,CAAkCoG,CAAA,CAASt4B,CAAT,CAAlC,CAA+Co5B,CAA/C,CAAsDpC,CAAtD,CAAoEuB,CAApE,CACwB,IADxB,CAC8B,EAD9B,CACkC,EADlC,CACsCpB,CADtC,CADO,CAGP,IAEN,GAAkB4B,CAAA9sB,MAAlB,EACEC,EAAAorB,gBAAA,CAAwB8B,CAAA9C,UAAxB,CAGFkC,EAAA,CAAeO,CAAD,EAAeA,CAAAU,SAAf,EACE,EAAA3a,CAAA,CAAawZ,CAAA,CAASt4B,CAAT,CAAA8e,WAAb,CADF,EAEC7f,CAAA6f,CAAA7f,OAFD,CAGR,IAHQ,CAIRo4B,EAAA,CAAavY,CAAb,CACGia,CAAA,EACEA,CAAAC,wBADF,EACwC,CAACD,CAAAG,sBADzC,GAEOH,CAAA9F,WAFP,CAEgC+D,CAHnC,CAKN,IAAI+B,CAAJ,EAAkBP,CAAlB,CACEK,CAAAl0B,KAAA,CAAa3E,CAAb,CAAgB+4B,CAAhB,CAA4BP,CAA5B,CAEA,CADAa,CACA,CADc,CAAA,CACd,CAAAT,CAAA,CAAkBA,CAAlB,EAAqCG,CAIvC5B,EAAA,CAAyB,IAvCe,CA2C1C,MAAOkC,EAAA,CAAcjC,CAAd,CAAgC,IAnDO,CA6GhDkC,QAASA,GAAyB,CAAChB,CAAD,CAAWQ,CAAX,CAAgBK,CAAhB,CAA6B,CAC7D,IAAI31B,EAAO80B,CAAA,CAASQ,CAAT,CAAX,CACI72B,EAASuB,CAAAye,WADb,CAEIyX,CAEJ,IAAIl2B,CAAA4F,SAAJ,GAAsBC,EAAtB,CAIA,IAAA,CAAA,CAAA,CAAa,CACXqwB,CAAA,CAAUz3B,CAAA,CAASuB,CAAAmM,YAAT;AAA4B2oB,CAAA,CAASQ,CAAT,CAAe,CAAf,CACtC,IAAKY,CAAAA,CAAL,EAAgBA,CAAAtwB,SAAhB,GAAqCC,EAArC,CACE,KAGF7F,EAAAm2B,UAAA,EAAkCD,CAAAC,UAE9BD,EAAAzX,WAAJ,EACEyX,CAAAzX,WAAAI,YAAA,CAA+BqX,CAA/B,CAEEP,EAAJ,EAAmBO,CAAnB,GAA+BpB,CAAA,CAASQ,CAAT,CAAe,CAAf,CAA/B,EACER,CAAAh0B,OAAA,CAAgBw0B,CAAhB,CAAsB,CAAtB,CAAyB,CAAzB,CAZS,CATgD,CA0B/DG,QAASA,GAAuB,CAAChtB,CAAD,CAAQ+qB,CAAR,CAAsB4C,CAAtB,CAAiD,CAC/EC,QAASA,EAAiB,CAACC,CAAD,CAAmBC,CAAnB,CAA4BC,CAA5B,CAAyCjC,CAAzC,CAA8DkC,CAA9D,CAA+E,CAElGH,CAAL,GACEA,CACA,CADmB7tB,CAAA2rB,KAAA,CAAW,CAAA,CAAX,CAAkBqC,CAAlB,CACnB,CAAAH,CAAAI,cAAA,CAAiC,CAAA,CAFnC,CAKA,OAAOlD,EAAA,CAAa8C,CAAb,CAA+BC,CAA/B,CAAwC,CAC7ClC,wBAAyB+B,CADoB,CAE7C9B,sBAAuBkC,CAFsB,CAG7CjC,oBAAqBA,CAHwB,CAAxC,CAPgG,CAgBzG,IAAIoC,EAAaN,CAAAO,QAAbD,CAAyC1zB,CAAA,EAA7C,CACS4zB,CAAT,KAASA,CAAT,GAAqBrD,EAAAoD,QAArB,CAEID,CAAA,CAAWE,CAAX,CAAA,CADErD,CAAAoD,QAAA,CAAqBC,CAArB,CAAJ,CACyBpB,EAAA,CAAwBhtB,CAAxB,CAA+B+qB,CAAAoD,QAAA,CAAqBC,CAArB,CAA/B,CAA+DT,CAA/D,CADzB,CAGyB,IAI3B,OAAOC,EA1BwE,CAuCjFN,QAASA,GAAiB,CAAC/1B,CAAD,CAAO0uB,CAAP,CAAmBkH,CAAnB,CAA0BnC,CAA1B,CAAuCC,CAAvC,CAAwD,CAAA,IAE5EoD,EAAWlB,CAAA/C,MAFiE,CAI5Eh1B,CAGJ,QANemC,CAAA4F,SAMf,EACE,KA5hPgByU,CA4hPhB,CAEExc,CAAA,CAAW0C,EAAA,CAAUP,CAAV,CAGX+2B,EAAA,CAAarI,CAAb,CACIsI,EAAA,CAAmBn5B,CAAnB,CADJ,CACkC,GADlC,CACuC41B,CADvC,CACoDC,CADpD,CAIA,KATF,IASWxzB,CATX,CASiBoH,CATjB;AASuB2vB,CATvB,CAS8Bt6B,CAT9B,CASqCu6B,CATrC,CASoDC,EAASn3B,CAAAizB,WAT7D,CAUW51B,EAAI,CAVf,CAUkBC,EAAK65B,CAAL75B,EAAe65B,CAAA17B,OAD/B,CAC8C4B,CAD9C,CACkDC,CADlD,CACsDD,CAAA,EADtD,CAC2D,CACzD,IAAI+5B,EAAgB,CAAA,CAApB,CACIC,EAAc,CAAA,CADlB,CAGIC,EAAW,CAAA,CAHf,CAGsBC,EAAW,CAAA,CAHjC,CAGwCC,EAAY,CAAA,CAHpD,CAIIC,CAEJv3B,EAAA,CAAOi3B,CAAA,CAAO95B,CAAP,CACPiK,EAAA,CAAOpH,CAAAoH,KACP3K,EAAA,CAAQuD,CAAAvD,MAERs6B,EAAA,CAAQD,EAAA,CAAmB1vB,CAAAyC,YAAA,EAAnB,CAGR,EAAKmtB,CAAL,CAAqBD,CAAA70B,MAAA,CAAYs1B,EAAZ,CAArB,GACEJ,CAKA,CALgC,MAKhC,GALWJ,CAAA,CAAc,CAAd,CAKX,CAJAK,CAIA,CAJgC,MAIhC,GAJWL,CAAA,CAAc,CAAd,CAIX,CAHAM,CAGA,CAHiC,IAGjC,GAHYN,CAAA,CAAc,CAAd,CAGZ,CAAA5vB,CAAA,CAAOA,CAAA7C,QAAA,CAAakzB,EAAb,CAA4B,EAA5B,CAAA5tB,YAAA,EAAAigB,OAAA,CAEG,CAFH,CAEOkN,CAAA,CAAc,CAAd,CAAAz7B,OAFP,CAAAgJ,QAAA,CAEwC,OAFxC,CAEiD,QAAQ,CAACrC,CAAD,CAAQyH,CAAR,CAAgB,CAC5E,MAAOA,EAAAoQ,YAAA,EADqE,CAFzE,CANT,GAaYwd,CAbZ,CAagCR,CAAA70B,MAAA,CAAYw1B,EAAZ,CAbhC,GAasEC,EAAA,CAAwBJ,CAAA,CAAkB,CAAlB,CAAxB,CAbtE,GAcEL,CAEA,CAFgB9vB,CAEhB,CADA+vB,CACA,CADc/vB,CAAA0iB,OAAA,CAAY,CAAZ,CAAe1iB,CAAA7L,OAAf,CAA6B,CAA7B,CACd,CADgD,KAChD,CAAA6L,CAAA,CAAOA,CAAA0iB,OAAA,CAAY,CAAZ,CAAe1iB,CAAA7L,OAAf,CAA6B,CAA7B,CAhBT,CAmBA,IAAI87B,CAAJ,EAAgBC,CAAhB,CACE5B,CAAA,CAAMqB,CAAN,CAGA,CAHet6B,CAGf,CAFAm6B,CAAA,CAASG,CAAT,CAEA,CAFkB/2B,CAAAoH,KAElB,CAAIiwB,CAAJ,CACEO,EAAA,CAAqB93B,CAArB,CAA2B0uB,CAA3B,CAAuCuI,CAAvC,CAA8C3vB,CAA9C,CADF,CAGoBonB,CAunC5BvtB,KAAA,CACE42B,EAAA,CAAqBngB,CAArB,CAA6BE,CAA7B,CAAyC9B,CAAzC,CAxnCsCihB,CAwnCtC,CAxnC6C3vB,CAwnC7C,CAAgG,CAAA,CAAhG,CADF,CA9nCM,KASO,CAGL2vB,CAAA,CAAQD,EAAA,CAAmB1vB,CAAAyC,YAAA,EAAnB,CACR+sB,EAAA,CAASG,CAAT,CAAA,CAAkB3vB,CAElB,IAAIgwB,CAAJ,EAAiB,CAAA1B,CAAA35B,eAAA,CAAqBg7B,CAArB,CAAjB,CACErB,CAAA,CAAMqB,CAAN,CACA;AADet6B,CACf,CAAI4iB,EAAA,CAAmBvf,CAAnB,CAAyBi3B,CAAzB,CAAJ,GACErB,CAAA,CAAMqB,CAAN,CADF,CACiB,CAAA,CADjB,CAKFe,GAAA,CAA4Bh4B,CAA5B,CAAkC0uB,CAAlC,CAA8C/xB,CAA9C,CAAqDs6B,CAArD,CAA4DK,CAA5D,CACAP,EAAA,CAAarI,CAAb,CAAyBuI,CAAzB,CAAgC,GAAhC,CAAqCxD,CAArC,CAAkDC,CAAlD,CAAmE0D,CAAnE,CACcC,CADd,CAdK,CA1CkD,CA6D1C,OAAjB,GAAIx5B,CAAJ,EAA0D,QAA1D,GAA4BmC,CAAAgH,aAAA,CAAkB,MAAlB,CAA5B,EAGEhH,CAAA8d,aAAA,CAAkB,cAAlB,CAAkC,KAAlC,CAIF,IAAK6S,CAAAA,EAAL,CAAgC,KAChC2C,EAAA,CAAYtzB,CAAAszB,UACR94B,EAAA,CAAS84B,CAAT,CAAJ,GAEIA,CAFJ,CAEgBA,CAAA2E,QAFhB,CAIA,IAAI18B,CAAA,CAAS+3B,CAAT,CAAJ,EAAyC,EAAzC,GAA2BA,CAA3B,CACE,IAAA,CAAQlxB,CAAR,CAAgB+rB,CAAApT,KAAA,CAA4BuY,CAA5B,CAAhB,CAAA,CACE2D,CAIA,CAJQD,EAAA,CAAmB50B,CAAA,CAAM,CAAN,CAAnB,CAIR,CAHI20B,CAAA,CAAarI,CAAb,CAAyBuI,CAAzB,CAAgC,GAAhC,CAAqCxD,CAArC,CAAkDC,CAAlD,CAGJ,GAFEkC,CAAA,CAAMqB,CAAN,CAEF,CAFiBtb,CAAA,CAAKvZ,CAAA,CAAM,CAAN,CAAL,CAEjB,EAAAkxB,CAAA,CAAYA,CAAAtJ,OAAA,CAAiB5nB,CAAAxB,MAAjB,CAA+BwB,CAAA,CAAM,CAAN,CAAA3G,OAA/B,CAGhB,MACF,MAAKoK,EAAL,CACEqyB,EAAA,CAA4BxJ,CAA5B,CAAwC1uB,CAAAm2B,UAAxC,CACA,MACF,MA1nPgBgC,CA0nPhB,CACE,GAAK3H,CAAAA,EAAL,CAA+B,KAC/B4H,EAAA,CAAyBp4B,CAAzB,CAA+B0uB,CAA/B,CAA2CkH,CAA3C,CAAkDnC,CAAlD,CAA+DC,CAA/D,CApGJ,CAwGAhF,CAAAnyB,KAAA,CAAgB87B,EAAhB,CACA,OAAO3J,EAhHyE,CAmHlF0J,QAASA,EAAwB,CAACp4B,CAAD,CAAO0uB,CAAP,CAAmBkH,CAAnB,CAA0BnC,CAA1B,CAAuCC,CAAvC,CAAwD,CAGvF,GAAI,CACF,IAAItxB,EAAQ8rB,CAAAnT,KAAA,CAA8B/a,CAAAm2B,UAA9B,CACZ,IAAI/zB,CAAJ,CAAW,CACT,IAAI60B,EAAQD,EAAA,CAAmB50B,CAAA,CAAM,CAAN,CAAnB,CACR20B,EAAA,CAAarI,CAAb,CAAyBuI,CAAzB,CAAgC,GAAhC,CAAqCxD,CAArC,CAAkDC,CAAlD,CAAJ,GACEkC,CAAA,CAAMqB,CAAN,CADF,CACiBtb,CAAA,CAAKvZ,CAAA,CAAM,CAAN,CAAL,CADjB,CAFS,CAFT,CAQF,MAAO0D,CAAP,CAAU,EAX2E,CAjwBjC;AA2xBxDwyB,QAASA,EAAS,CAACt4B,CAAD,CAAOu4B,CAAP,CAAkBC,CAAlB,CAA2B,CAC3C,IAAIxsB,EAAQ,EAAZ,CACIysB,EAAQ,CACZ,IAAIF,CAAJ,EAAiBv4B,CAAAuH,aAAjB,EAAsCvH,CAAAuH,aAAA,CAAkBgxB,CAAlB,CAAtC,EACE,EAAG,CACD,GAAKv4B,CAAAA,CAAL,CACE,KAAMwtB,EAAA,CAAe,SAAf,CAEI+K,CAFJ,CAEeC,CAFf,CAAN,CAvqPYne,CA2qPd,GAAIra,CAAA4F,SAAJ,GACM5F,CAAAuH,aAAA,CAAkBgxB,CAAlB,CACJ,EADkCE,CAAA,EAClC,CAAIz4B,CAAAuH,aAAA,CAAkBixB,CAAlB,CAAJ,EAAgCC,CAAA,EAFlC,CAIAzsB,EAAA7K,KAAA,CAAWnB,CAAX,CACAA,EAAA,CAAOA,CAAAmM,YAXN,CAAH,MAYiB,CAZjB,CAYSssB,CAZT,CADF,KAeEzsB,EAAA7K,KAAA,CAAWnB,CAAX,CAGF,OAAOxE,EAAA,CAAOwQ,CAAP,CArBoC,CAgC7C0sB,QAASA,EAA0B,CAACC,CAAD,CAASJ,CAAT,CAAoBC,CAApB,CAA6B,CAC9D,MAAOI,SAA4B,CAACnwB,CAAD,CAAQjI,CAAR,CAAiBo1B,CAAjB,CAAwBY,CAAxB,CAAqChD,CAArC,CAAmD,CACpFhzB,CAAA,CAAU83B,CAAA,CAAU93B,CAAA,CAAQ,CAAR,CAAV,CAAsB+3B,CAAtB,CAAiCC,CAAjC,CACV,OAAOG,EAAA,CAAOlwB,CAAP,CAAcjI,CAAd,CAAuBo1B,CAAvB,CAA8BY,CAA9B,CAA2ChD,CAA3C,CAF6E,CADxB,CAkBhEqF,QAASA,EAAoB,CAACC,CAAD,CAAQvF,CAAR,CAAuBC,CAAvB,CAAqCC,CAArC,CAAkDC,CAAlD,CAAmEC,CAAnE,CAA2F,CACtH,IAAIoF,CAEJ,OAAID,EAAJ,CACSpwB,EAAA,CAAQ6qB,CAAR,CAAuBC,CAAvB,CAAqCC,CAArC,CAAkDC,CAAlD,CAAmEC,CAAnE,CADT,CAGoBqF,QAAwB,EAAG,CACxCD,CAAL,GACEA,CAIA,CAJWrwB,EAAA,CAAQ6qB,CAAR,CAAuBC,CAAvB,CAAqCC,CAArC,CAAkDC,CAAlD,CAAmEC,CAAnE,CAIX,CAAAJ,CAAA,CAAgBC,CAAhB,CAA+BG,CAA/B,CAAwD,IAL1D,CAOA,OAAOoF,EAAAp1B,MAAA,CAAe,IAAf,CAAqBxF,SAArB,CARsC,CANuE,CAyCxH63B,QAASA,GAAqB,CAACtH,CAAD,CAAauK,CAAb,CAA0BC,CAA1B,CAAyC1F,CAAzC,CACC2F,CADD,CACeC,CADf,CACyCC,CADzC,CACqDC,CADrD,CAEC3F,CAFD,CAEyB,CA6SrD4F,QAASA,EAAU,CAACC,CAAD,CAAMC,CAAN,CAAYlB,CAAZ,CAAuBC,CAAvB,CAAgC,CACjD,GAAIgB,CAAJ,CAAS,CACHjB,CAAJ,GAAeiB,CAAf;AAAqBd,CAAA,CAA2Bc,CAA3B,CAAgCjB,CAAhC,CAA2CC,CAA3C,CAArB,CACAgB,EAAAzL,QAAA,CAAc9f,CAAA8f,QACdyL,EAAAvM,cAAA,CAAoBA,CACpB,IAAIyM,CAAJ,GAAiCzrB,CAAjC,EAA8CA,CAAA0rB,eAA9C,CACEH,CAAA,CAAMI,EAAA,CAAmBJ,CAAnB,CAAwB,CAAChvB,aAAc,CAAA,CAAf,CAAxB,CAER6uB,EAAAl4B,KAAA,CAAgBq4B,CAAhB,CAPO,CAST,GAAIC,CAAJ,CAAU,CACJlB,CAAJ,GAAekB,CAAf,CAAsBf,CAAA,CAA2Be,CAA3B,CAAiClB,CAAjC,CAA4CC,CAA5C,CAAtB,CACAiB,EAAA1L,QAAA,CAAe9f,CAAA8f,QACf0L,EAAAxM,cAAA,CAAqBA,CACrB,IAAIyM,CAAJ,GAAiCzrB,CAAjC,EAA8CA,CAAA0rB,eAA9C,CACEF,CAAA,CAAOG,EAAA,CAAmBH,CAAnB,CAAyB,CAACjvB,aAAc,CAAA,CAAf,CAAzB,CAET8uB,EAAAn4B,KAAA,CAAiBs4B,CAAjB,CAPQ,CAVuC,CAqBnDlE,QAASA,EAAU,CAACP,CAAD,CAAcvsB,CAAd,CAAqBoxB,CAArB,CAA+B9E,CAA/B,CAA6CsB,CAA7C,CAAgE,CA8IjFyD,QAASA,EAA0B,CAACrxB,CAAD,CAAQsxB,CAAR,CAAuBxF,CAAvB,CAA4CsC,CAA5C,CAAsD,CACvF,IAAIvC,CAEC50B,GAAA,CAAQ+I,CAAR,CAAL,GACEouB,CAGA,CAHWtC,CAGX,CAFAA,CAEA,CAFsBwF,CAEtB,CADAA,CACA,CADgBtxB,CAChB,CAAAA,CAAA,CAAQ/G,IAAAA,EAJV,CAOIs4B,EAAJ,GACE1F,CADF,CAC0B2F,CAD1B,CAGK1F,EAAL,GACEA,CADF,CACwByF,CAAA,CAAgC9K,CAAAzwB,OAAA,EAAhC,CAAoDywB,CAD5E,CAGA,IAAI2H,CAAJ,CAAc,CAKZ,IAAIqD,EAAmB7D,CAAAO,QAAA,CAA0BC,CAA1B,CACvB,IAAIqD,CAAJ,CACE,MAAOA,EAAA,CAAiBzxB,CAAjB,CAAwBsxB,CAAxB,CAAuCzF,CAAvC,CAA8DC,CAA9D,CAAmF4F,CAAnF,CACF,IAAIh7B,CAAA,CAAY+6B,CAAZ,CAAJ,CACL,KAAM1M,EAAA,CAAe,QAAf,CAGLqJ,CAHK,CAGKtxB,EAAA,CAAY2pB,CAAZ,CAHL,CAAN,CATU,CAAd,IAeE,OAAOmH,EAAA,CAAkB5tB,CAAlB,CAAyBsxB,CAAzB,CAAwCzF,CAAxC,CAA+DC,CAA/D,CAAoF4F,CAApF,CA/B8E,CA9IR,IAC7E39B,CAD6E,CAC1EY,CAD0E,CACtEu7B,CADsE,CAC9DnuB,CAD8D,CAChD4vB,CADgD,CAC/BH,CAD+B,CACXzG,CADW,CACGtE,CAGhF+J,EAAJ,GAAoBY,CAApB,EACEjE,CACA,CADQsD,CACR,CAAAhK,CAAA,CAAWgK,CAAApG,UAFb,GAIE5D,CACA;AADW1zB,CAAA,CAAOq+B,CAAP,CACX,CAAAjE,CAAA,CAAQ,IAAIlD,CAAJ,CAAexD,CAAf,CAAyBgK,CAAzB,CALV,CAQAkB,EAAA,CAAkB3xB,CACdixB,EAAJ,CACElvB,CADF,CACiB/B,CAAA2rB,KAAA,CAAW,CAAA,CAAX,CADjB,CAEWiG,CAFX,GAGED,CAHF,CAGoB3xB,CAAA0rB,QAHpB,CAMIkC,EAAJ,GAGE7C,CAGA,CAHesG,CAGf,CAFAtG,CAAAgB,kBAEA,CAFiC6B,CAEjC,CAAA7C,CAAA8G,aAAA,CAA4BC,QAAQ,CAAC1D,CAAD,CAAW,CAC7C,MAAO,CAAE,CAAAR,CAAAO,QAAA,CAA0BC,CAA1B,CADoC,CANjD,CAWI2D,EAAJ,GACEP,CADF,CACuBQ,EAAA,CAAiBvL,CAAjB,CAA2B0G,CAA3B,CAAkCpC,CAAlC,CAAgDgH,CAAhD,CAAsEhwB,CAAtE,CAAoF/B,CAApF,CAA2FixB,CAA3F,CADvB,CAIIA,EAAJ,GAEEhxB,EAAAmsB,eAAA,CAAuB3F,CAAvB,CAAiC1kB,CAAjC,CAA+C,CAAA,CAA/C,CAAqD,EAAEkwB,CAAF,GAAwBA,CAAxB,GAA8ChB,CAA9C,EACjDgB,CADiD,GAC3BhB,CAAAiB,oBAD2B,EAArD,CAQA,CANAjyB,EAAAorB,gBAAA,CAAwB5E,CAAxB,CAAkC,CAAA,CAAlC,CAMA,CALA1kB,CAAAowB,kBAKA,CAJIlB,CAAAkB,kBAIJ,CAHAC,CAGA,CAHmBC,EAAA,CAA4BryB,CAA5B,CAAmCmtB,CAAnC,CAA0CprB,CAA1C,CACWA,CAAAowB,kBADX,CAEWlB,CAFX,CAGnB,CAAImB,CAAAE,cAAJ,EACEvwB,CAAAwwB,IAAA,CAAiB,UAAjB,CAA6BH,CAAAE,cAA7B,CAXJ,CAgBA,KAASzzB,CAAT,GAAiB2yB,EAAjB,CAAqC,CAC/BgB,CAAAA,CAAsBT,CAAA,CAAqBlzB,CAArB,CACtBmD,EAAAA,CAAawvB,CAAA,CAAmB3yB,CAAnB,CACjB,KAAI8lB,GAAW6N,CAAAC,WAAAxL,iBAEfjlB,EAAAmqB,SAAA,CAAsBnqB,CAAA,EACtBykB,EAAAtmB,KAAA,CAAc,GAAd,CAAoBqyB,CAAA3zB,KAApB,CAA+C,YAA/C,CAA6DmD,CAAAmqB,SAA7D,CACAnqB;CAAA0wB,YAAA,CACEL,EAAA,CAA4BV,CAA5B,CAA6CxE,CAA7C,CAAoDnrB,CAAAmqB,SAApD,CAAyExH,EAAzE,CAAmF6N,CAAnF,CARiC,CAYrCr/B,CAAA,CAAQ4+B,CAAR,CAA8B,QAAQ,CAACS,CAAD,CAAsB3zB,CAAtB,CAA4B,CAChE,IAAIymB,EAAUkN,CAAAlN,QACVkN,EAAAvL,iBAAJ,EAA6C,CAAAp0B,CAAA,CAAQyyB,CAAR,CAA7C,EAAiEvzB,CAAA,CAASuzB,CAAT,CAAjE,EACE9vB,CAAA,CAAOg8B,CAAA,CAAmB3yB,CAAnB,CAAAstB,SAAP,CAA0CwG,CAAA,CAAe9zB,CAAf,CAAqBymB,CAArB,CAA8BmB,CAA9B,CAAwC+K,CAAxC,CAA1C,CAH8D,CAAlE,CAQAr+B,EAAA,CAAQq+B,CAAR,CAA4B,QAAQ,CAACxvB,CAAD,CAAa,CAC/C,IAAI4wB,EAAqB5wB,CAAAmqB,SACzB,IAAI54B,CAAA,CAAWq/B,CAAAC,WAAX,CAAJ,CACE,GAAI,CACFD,CAAAC,WAAA,CAA8B7wB,CAAA0wB,YAAAI,eAA9B,CADE,CAEF,MAAOz1B,CAAP,CAAU,CACVkQ,CAAA,CAAkBlQ,CAAlB,CADU,CAId,GAAI9J,CAAA,CAAWq/B,CAAAG,QAAX,CAAJ,CACE,GAAI,CACFH,CAAAG,QAAA,EADE,CAEF,MAAO11B,CAAP,CAAU,CACVkQ,CAAA,CAAkBlQ,CAAlB,CADU,CAIV9J,CAAA,CAAWq/B,CAAAI,SAAX,CAAJ,GACErB,CAAAx6B,OAAA,CAAuB,QAAQ,EAAG,CAAEy7B,CAAAI,SAAA,EAAF,CAAlC,CACA,CAAAJ,CAAAI,SAAA,EAFF,CAIIz/B,EAAA,CAAWq/B,CAAAK,WAAX,CAAJ,EACEtB,CAAAY,IAAA,CAAoB,UAApB,CAAgCW,QAA0B,EAAG,CAC3DN,CAAAK,WAAA,EAD2D,CAA7D,CArB6C,CAAjD,CA4BKl/B,EAAA,CAAI,CAAT,KAAYY,CAAZ,CAAiBi8B,CAAA59B,OAAjB,CAAoCe,CAApC,CAAwCY,CAAxC,CAA4CZ,CAAA,EAA5C,CACEm8B,CACA,CADSU,CAAA,CAAW78B,CAAX,CACT,CAAAo/B,EAAA,CAAajD,CAAb,CACIA,CAAAnuB,aAAA,CAAsBA,CAAtB,CAAqC/B,CADzC,CAEIymB,CAFJ,CAGI0G,CAHJ,CAII+C,CAAA5K,QAJJ,EAIsBqN,CAAA,CAAezC,CAAA1L,cAAf;AAAqC0L,CAAA5K,QAArC,CAAqDmB,CAArD,CAA+D+K,CAA/D,CAJtB,CAKIzG,CALJ,CAYF,KAAI2G,EAAe1xB,CACfixB,EAAJ,GAAiCA,CAAAtK,SAAjC,EAA+G,IAA/G,GAAsEsK,CAAArK,YAAtE,IACE8K,CADF,CACiB3vB,CADjB,CAGIwqB,EAAJ,EACEA,CAAA,CAAYmF,CAAZ,CAA0BN,CAAAve,WAA1B,CAA+C5Z,IAAAA,EAA/C,CAA0D20B,CAA1D,CAIF,KAAK75B,CAAL,CAAS88B,CAAA79B,OAAT,CAA8B,CAA9B,CAAsC,CAAtC,EAAiCe,CAAjC,CAAyCA,CAAA,EAAzC,CACEm8B,CACA,CADSW,CAAA,CAAY98B,CAAZ,CACT,CAAAo/B,EAAA,CAAajD,CAAb,CACIA,CAAAnuB,aAAA,CAAsBA,CAAtB,CAAqC/B,CADzC,CAEIymB,CAFJ,CAGI0G,CAHJ,CAII+C,CAAA5K,QAJJ,EAIsBqN,CAAA,CAAezC,CAAA1L,cAAf,CAAqC0L,CAAA5K,QAArC,CAAqDmB,CAArD,CAA+D+K,CAA/D,CAJtB,CAKIzG,CALJ,CAUF53B,EAAA,CAAQq+B,CAAR,CAA4B,QAAQ,CAACxvB,CAAD,CAAa,CAC3C4wB,CAAAA,CAAqB5wB,CAAAmqB,SACrB54B,EAAA,CAAWq/B,CAAAQ,UAAX,CAAJ,EACER,CAAAQ,UAAA,EAH6C,CAAjD,CArIiF,CAjUnFlI,CAAA,CAAyBA,CAAzB,EAAmD,EAuBnD,KAxBqD,IAGjDmI,EAAmB,CAACzP,MAAAC,UAH6B,CAIjD+N,EAAoB1G,CAAA0G,kBAJ6B,CAKjDG,EAAuB7G,CAAA6G,qBAL0B,CAMjDd,EAA2B/F,CAAA+F,yBANsB,CAOjDgB,EAAoB/G,CAAA+G,kBAP6B,CAQjDqB,EAA4BpI,CAAAoI,0BARqB,CASjDC,EAAyB,CAAA,CATwB,CAUjDC,EAAc,CAAA,CAVmC,CAWjDjC,EAAgCrG,CAAAqG,8BAXiB,CAYjDkC,EAAehD,CAAApG,UAAfoJ,CAAyC1gC,CAAA,CAAOy9B,CAAP,CAZQ,CAajDhrB,CAbiD,CAcjDgf,CAdiD;AAejDkP,CAfiD,CAiBjDC,EAAoB5I,CAjB6B,CAkBjDmF,CAlBiD,CAmBjD0D,GAAiC,CAAA,CAnBgB,CAoBjDC,GAAqC,CAAA,CApBY,CAqBjDC,CArBiD,CAwB5C//B,GAAI,CAxBwC,CAwBrCY,EAAKsxB,CAAAjzB,OAArB,CAAwCe,EAAxC,CAA4CY,CAA5C,CAAgDZ,EAAA,EAAhD,CAAqD,CACnDyR,CAAA,CAAYygB,CAAA,CAAWlyB,EAAX,CACZ,KAAI+7B,EAAYtqB,CAAAuuB,QAAhB,CACIhE,GAAUvqB,CAAAwuB,MAGVlE,EAAJ,GACE2D,CADF,CACiB5D,CAAA,CAAUW,CAAV,CAAuBV,CAAvB,CAAkCC,EAAlC,CADjB,CAGA2D,EAAA,CAAYz6B,IAAAA,EAEZ,IAAIo6B,CAAJ,CAAuB7tB,CAAA0gB,SAAvB,CACE,KAKF,IAFA4N,CAEA,CAFiBtuB,CAAAxF,MAEjB,CAIOwF,CAAAohB,YAeL,GAdM70B,CAAA,CAAS+hC,CAAT,CAAJ,EAGEG,EAAA,CAAkB,oBAAlB,CAAwChD,CAAxC,EAAoEW,CAApE,CACkBpsB,CADlB,CAC6BiuB,CAD7B,CAEA,CAAAxC,CAAA,CAA2BzrB,CAL7B,EASEyuB,EAAA,CAAkB,oBAAlB,CAAwChD,CAAxC,CAAkEzrB,CAAlE,CACkBiuB,CADlB,CAKJ,EAAA7B,CAAA,CAAoBA,CAApB,EAAyCpsB,CAG3Cgf,EAAA,CAAgBhf,CAAA3G,KAQhB,IAAK+0B,CAAAA,EAAL,GAAyCpuB,CAAAxJ,QAAzC,GAA+DwJ,CAAAohB,YAA/D,EAAwFphB,CAAAmhB,SAAxF,GACQnhB,CAAAwhB,WADR,EACiCkN,CAAA1uB,CAAA0uB,MADjC,EACoD,CAG5C,IAASC,CAAT,CAAyBpgC,EAAzB,CAA6B,CAA7B,CAAiCqgC,EAAjC,CAAsDnO,CAAA,CAAWkO,CAAA,EAAX,CAAtD,CAAA,CACI,GAAKC,EAAApN,WAAL,EAAuCkN,CAAAE,EAAAF,MAAvC,EACQE,EAAAp4B,QADR,GACuCo4B,EAAAxN,YADvC,EACyEwN,EAAAzN,SADzE,EACwG,CACpGkN,EAAA,CAAqC,CAAA,CACrC,MAFoG,CAM5GD,EAAA,CAAiC,CAAA,CAXW,CAc/ChN,CAAAphB,CAAAohB,YAAL,EAA8BphB,CAAAxD,WAA9B,GACE+vB,CAGA,CAHuBA,CAGvB,EAH+Cv3B,CAAA,EAG/C,CAFAy5B,EAAA,CAAkB,GAAlB,CAAyBzP,CAAzB,CAAyC,cAAzC;AACIuN,CAAA,CAAqBvN,CAArB,CADJ,CACyChf,CADzC,CACoDiuB,CADpD,CAEA,CAAA1B,CAAA,CAAqBvN,CAArB,CAAA,CAAsChf,CAJxC,CASA,IAFAsuB,CAEA,CAFiBtuB,CAAAwhB,WAEjB,CAWE,GAVAuM,CAUI,CAVqB,CAAA,CAUrB,CALC/tB,CAAA0uB,MAKD,GAJFD,EAAA,CAAkB,cAAlB,CAAkCX,CAAlC,CAA6D9tB,CAA7D,CAAwEiuB,CAAxE,CACA,CAAAH,CAAA,CAA4B9tB,CAG1B,EAAmB,SAAnB,GAAAsuB,CAAJ,CACEvC,CAQA,CARgC,CAAA,CAQhC,CAPA8B,CAOA,CAPmB7tB,CAAA0gB,SAOnB,CANAwN,CAMA,CANYD,CAMZ,CALAA,CAKA,CALehD,CAAApG,UAKf,CAJIt3B,CAAA,CAAOkN,EAAAo0B,gBAAA,CAAwB7P,CAAxB,CAAuCiM,CAAA,CAAcjM,CAAd,CAAvC,CAAP,CAIJ,CAHAgM,CAGA,CAHciD,CAAA,CAAa,CAAb,CAGd,CAFAa,EAAA,CAAY5D,CAAZ,CAlsRHj7B,EAAAhC,KAAA,CAksRuCigC,CAlsRvC,CAA+B,CAA/B,CAksRG,CAAgDlD,CAAhD,CAEA,CAAAmD,CAAA,CAAoBvD,CAAA,CAAqByD,EAArB,CAAyDH,CAAzD,CAAoE3I,CAApE,CAAkFsI,CAAlF,CACQkB,CADR,EAC4BA,CAAA11B,KAD5B,CACmD,CAQzCy0B,0BAA2BA,CARc,CADnD,CATtB,KAoBO,CAEL,IAAIkB,GAAQh6B,CAAA,EAEZ,IAAKzI,CAAA,CAAS+hC,CAAT,CAAL,CAEO,CAILJ,CAAA,CAAY9hC,CAAAyJ,SAAA4W,uBAAA,EAEZ,KAAIwiB,GAAUj6B,CAAA,EAAd,CACIk6B,EAAcl6B,CAAA,EAGlBrH,EAAA,CAAQ2gC,CAAR,CAAwB,QAAQ,CAACa,CAAD,CAAkBvG,CAAlB,CAA4B,CAE1D,IAAIlJ,EAA0C,GAA1CA,GAAYyP,CAAAl6B,OAAA,CAAuB,CAAvB,CAChBk6B,EAAA,CAAkBzP,CAAA,CAAWyP,CAAAh3B,UAAA,CAA0B,CAA1B,CAAX,CAA0Cg3B,CAE5DF,GAAA,CAAQE,CAAR,CAAA,CAA2BvG,CAK3BoG,GAAA,CAAMpG,CAAN,CAAA,CAAkB,IAIlBsG,EAAA,CAAYtG,CAAZ,CAAA,CAAwBlJ,CAdkC,CAA5D,CAkBA/xB,EAAA,CAAQsgC,CAAAmB,SAAA,EAAR,CAAiC,QAAQ,CAACr9B,CAAD,CAAO,CAC9C,IAAI62B,EAAWqG,EAAA,CAAQlG,EAAA,CAAmBz2B,EAAA,CAAUP,CAAV,CAAnB,CAAR,CACX62B,EAAJ,EACEsG,CAAA,CAAYtG,CAAZ,CAEA,CAFwB,CAAA,CAExB,CADAoG,EAAA,CAAMpG,CAAN,CACA,CADkBoG,EAAA,CAAMpG,CAAN,CAClB,EADqCx8B,CAAAyJ,SAAA4W,uBAAA,EACrC;AAAAuiB,EAAA,CAAMpG,CAAN,CAAAjc,YAAA,CAA4B5a,CAA5B,CAHF,EAKEm8B,CAAAvhB,YAAA,CAAsB5a,CAAtB,CAP4C,CAAhD,CAYApE,EAAA,CAAQuhC,CAAR,CAAqB,QAAQ,CAACG,CAAD,CAASzG,CAAT,CAAmB,CAC9C,GAAKyG,CAAAA,CAAL,CACE,KAAM9P,EAAA,CAAe,SAAf,CAA8EqJ,CAA9E,CAAN,CAF4C,CAAhD,CAMA,KAASA,IAAAA,CAAT,GAAqBoG,GAArB,CACMA,EAAA,CAAMpG,CAAN,CAAJ,GAEM0G,CACJ,CADuB/hC,CAAA,CAAOyhC,EAAA,CAAMpG,CAAN,CAAAvb,WAAP,CACvB,CAAA2hB,EAAA,CAAMpG,CAAN,CAAA,CAAkBgC,CAAA,CAAqByD,EAArB,CAAyDiB,CAAzD,CAA2E/J,CAA3E,CAHpB,CAOF2I,EAAA,CAAY3gC,CAAA,CAAO2gC,CAAA7gB,WAAP,CAtDP,CAFP,IACE6gB,EAAA,CAAY3gC,CAAA,CAAOygB,EAAA,CAAYgd,CAAZ,CAAP,CAAAoE,SAAA,EA0DdnB,EAAA12B,MAAA,EACA42B,EAAA,CAAoBvD,CAAA,CAAqByD,EAArB,CAAyDH,CAAzD,CAAoE3I,CAApE,CAAkF9xB,IAAAA,EAAlF,CAChBA,IAAAA,EADgB,CACL,CAAEwyB,cAAejmB,CAAA0rB,eAAfzF,EAA2CjmB,CAAAuvB,WAA7C,CADK,CAEpBpB,EAAAxF,QAAA,CAA4BqG,EAlEvB,CAsET,GAAIhvB,CAAAmhB,SAAJ,CAWE,GAVA6M,CAUIx3B,CAVU,CAAA,CAUVA,CATJi4B,EAAA,CAAkB,UAAlB,CAA8BhC,CAA9B,CAAiDzsB,CAAjD,CAA4DiuB,CAA5D,CASIz3B,CARJi2B,CAQIj2B,CARgBwJ,CAQhBxJ,CANJ83B,CAMI93B,CANczI,CAAA,CAAWiS,CAAAmhB,SAAX,CAAD,CACXnhB,CAAAmhB,SAAA,CAAmB8M,CAAnB,CAAiChD,CAAjC,CADW,CAEXjrB,CAAAmhB,SAIF3qB,CAFJ83B,CAEI93B,CAFag5B,EAAA,CAAoBlB,CAApB,CAEb93B,CAAAwJ,CAAAxJ,QAAJ,CAAuB,CACrBu4B,CAAA,CAAmB/uB,CAIjBkuB,EAAA,CAniOJxhB,EAAA5a,KAAA,CAgiOuBw8B,CAhiOvB,CAgiOE,CAGcmB,EAAA,CAAehJ,EAAA,CAAazmB,CAAA0vB,kBAAb,CAA0ChiB,CAAA,CAAK4gB,CAAL,CAA1C,CAAf,CAHd,CACc,EAIdtD,EAAA,CAAckD,CAAA,CAAU,CAAV,CAEd,IAAyB,CAAzB,GAAIA,CAAA1gC,OAAJ,EAt9PY4e,CAs9PZ,GAA8B4e,CAAArzB,SAA9B,CACE,KAAM4nB,EAAA,CAAe,OAAf;AAEFP,CAFE,CAEa,EAFb,CAAN,CAKF8P,EAAA,CAAY5D,CAAZ,CAA0B+C,CAA1B,CAAwCjD,CAAxC,CAEI2E,EAAAA,CAAmB,CAAC/K,MAAO,EAAR,CAOnBgL,EAAAA,CAAqB9H,EAAA,CAAkBkD,CAAlB,CAA+B,EAA/B,CAAmC2E,CAAnC,CACzB,KAAIE,GAAwBpP,CAAA5tB,OAAA,CAAkBtE,EAAlB,CAAsB,CAAtB,CAAyBkyB,CAAAjzB,OAAzB,EAA8Ce,EAA9C,CAAkD,CAAlD,EAE5B,EAAIk9B,CAAJ,EAAgCW,CAAhC,GAIE0D,EAAA,CAAmBF,CAAnB,CAAuCnE,CAAvC,CAAiEW,CAAjE,CAEF3L,EAAA,CAAaA,CAAAvrB,OAAA,CAAkB06B,CAAlB,CAAA16B,OAAA,CAA6C26B,EAA7C,CACbE,GAAA,CAAwB9E,CAAxB,CAAuC0E,CAAvC,CAEAxgC,EAAA,CAAKsxB,CAAAjzB,OApCgB,CAAvB,IAsCEygC,EAAAv2B,KAAA,CAAkB42B,CAAlB,CAIJ,IAAItuB,CAAAohB,YAAJ,CACE4M,CAiBA,CAjBc,CAAA,CAiBd,CAhBAS,EAAA,CAAkB,UAAlB,CAA8BhC,CAA9B,CAAiDzsB,CAAjD,CAA4DiuB,CAA5D,CAgBA,CAfAxB,CAeA,CAfoBzsB,CAepB,CAbIA,CAAAxJ,QAaJ,GAZEu4B,CAYF,CAZqB/uB,CAYrB,EARAsnB,CAQA,CARa0I,EAAA,CAAmBvP,CAAA5tB,OAAA,CAAkBtE,EAAlB,CAAqBkyB,CAAAjzB,OAArB,CAAyCe,EAAzC,CAAnB,CAAgE0/B,CAAhE,CACThD,CADS,CACMC,CADN,CACoB6C,CADpB,EAC8CI,CAD9C,CACiE/C,CADjE,CAC6EC,CAD7E,CAC0F,CACjGkB,qBAAsBA,CAD2E,CAEjGH,kBAAoBA,CAApBA,GAA0CpsB,CAA1CosB,EAAwDA,CAFyC,CAGjGX,yBAA0BA,CAHuE,CAIjGgB,kBAAmBA,CAJ8E,CAKjGqB,0BAA2BA,CALsE,CAD1F,CAQb,CAAA3+B,CAAA,CAAKsxB,CAAAjzB,OAlBP,KAmBO,IAAIwS,CAAAvF,QAAJ,CACL,GAAI,CACFiwB,CAAA,CAAS1qB,CAAAvF,QAAA,CAAkBwzB,CAAlB,CAAgChD,CAAhC,CAA+CkD,CAA/C,CACT,KAAItgC,EAAUmS,CAAA0sB,oBAAV7+B,EAA2CmS,CAC3CjS,EAAA,CAAW28B,CAAX,CAAJ,CACEY,CAAA,CAAW,IAAX,CAAiBj2B,EAAA,CAAKxH,CAAL,CAAc68B,CAAd,CAAjB,CAAwCJ,CAAxC,CAAmDC,EAAnD,CADF;AAEWG,CAFX,EAGEY,CAAA,CAAWj2B,EAAA,CAAKxH,CAAL,CAAc68B,CAAAa,IAAd,CAAX,CAAsCl2B,EAAA,CAAKxH,CAAL,CAAc68B,CAAAc,KAAd,CAAtC,CAAkElB,CAAlE,CAA6EC,EAA7E,CANA,CAQF,MAAO1yB,EAAP,CAAU,CACVkQ,CAAA,CAAkBlQ,EAAlB,CAAqBP,EAAA,CAAY22B,CAAZ,CAArB,CADU,CAKVjuB,CAAAgoB,SAAJ,GACEV,CAAAU,SACA,CADsB,CAAA,CACtB,CAAA6F,CAAA,CAAmBzJ,IAAA6L,IAAA,CAASpC,CAAT,CAA2B7tB,CAAA0gB,SAA3B,CAFrB,CAlQmD,CAyQrD4G,CAAA9sB,MAAA,CAAmB4xB,CAAnB,EAAoE,CAAA,CAApE,GAAwCA,CAAA5xB,MACxC8sB,EAAAC,wBAAA,CAAqCwG,CACrCzG,EAAAG,sBAAA,CAAmCuG,CACnC1G,EAAA9F,WAAA,CAAwB2M,CAExBzI,EAAAqG,8BAAA,CAAuDA,CAGvD,OAAOzE,EAzS8C,CAqfvD6F,QAASA,EAAc,CAACnO,CAAD,CAAgBc,CAAhB,CAAyBmB,CAAzB,CAAmC+K,CAAnC,CAAuD,CAC5E,IAAIt9B,CAEJ,IAAIpB,CAAA,CAASwyB,CAAT,CAAJ,CAAuB,CACrB,IAAI3rB,EAAQ2rB,CAAA3rB,MAAA,CAAc4rB,CAAd,CACR1mB,EAAAA,CAAOymB,CAAA3nB,UAAA,CAAkBhE,CAAA,CAAM,CAAN,CAAA3G,OAAlB,CACX,KAAI0iC,EAAc/7B,CAAA,CAAM,CAAN,CAAd+7B,EAA0B/7B,CAAA,CAAM,CAAN,CAA9B,CACIurB,EAAwB,GAAxBA,GAAWvrB,CAAA,CAAM,CAAN,CAGK,KAApB,GAAI+7B,CAAJ,CACEjP,CADF,CACaA,CAAAzwB,OAAA,EADb,CAME9B,CANF,EAKEA,CALF,CAKUs9B,CALV,EAKgCA,CAAA,CAAmB3yB,CAAnB,CALhC,GAMmB3K,CAAAi4B,SAGnB,IAAKj4B,CAAAA,CAAL,CAAY,CACV,IAAIyhC,EAAW,GAAXA,CAAiB92B,CAAjB82B,CAAwB,YAK1BzhC,EAAA,CAHkB,IAApB,GAAIwhC,CAAJ,EAA4BjP,CAAA,CAAS,CAAT,CAA5B,EArwQe5U,CAqwQf,GAA2C4U,CAAA,CAAS,CAAT,CAAAtpB,SAA3C,CAGU,IAHV,CAKUu4B,CAAA,CAAcjP,CAAAxkB,cAAA,CAAuB0zB,CAAvB,CAAd,CAAiDlP,CAAAtmB,KAAA,CAAcw1B,CAAd,CARjD,CAYZ,GAAKzhC,CAAAA,CAAL;AAAegxB,CAAAA,CAAf,CACE,KAAMH,EAAA,CAAe,OAAf,CAEFlmB,CAFE,CAEI2lB,CAFJ,CAAN,CA7BmB,CAAvB,IAiCO,IAAI3xB,CAAA,CAAQyyB,CAAR,CAAJ,CAEL,IADApxB,CACgBS,CADR,EACQA,CAAPZ,CAAOY,CAAH,CAAGA,CAAAA,CAAAA,CAAK2wB,CAAAtyB,OAArB,CAAqCe,CAArC,CAAyCY,CAAzC,CAA6CZ,CAAA,EAA7C,CACEG,CAAA,CAAMH,CAAN,CAAA,CAAW4+B,CAAA,CAAenO,CAAf,CAA8Bc,CAAA,CAAQvxB,CAAR,CAA9B,CAA0C0yB,CAA1C,CAAoD+K,CAApD,CAHR,KAKIz/B,EAAA,CAASuzB,CAAT,CAAJ,GACLpxB,CACA,CADQ,EACR,CAAAf,CAAA,CAAQmyB,CAAR,CAAiB,QAAQ,CAACtjB,CAAD,CAAa4zB,CAAb,CAAuB,CAC9C1hC,CAAA,CAAM0hC,CAAN,CAAA,CAAkBjD,CAAA,CAAenO,CAAf,CAA8BxiB,CAA9B,CAA0CykB,CAA1C,CAAoD+K,CAApD,CAD4B,CAAhD,CAFK,CAOP,OAAOt9B,EAAP,EAAgB,IAhD4D,CAmD9E89B,QAASA,GAAgB,CAACvL,CAAD,CAAW0G,CAAX,CAAkBpC,CAAlB,CAAgCgH,CAAhC,CAAsDhwB,CAAtD,CAAoE/B,CAApE,CAA2EixB,CAA3E,CAAqG,CAC5H,IAAIO,EAAqBh3B,CAAA,EAAzB,CACSq7B,CAAT,KAASA,CAAT,GAA0B9D,EAA1B,CAAgD,CAC9C,IAAIvsB,EAAYusB,CAAA,CAAqB8D,CAArB,CAAhB,CACI9Z,EAAS,CACX+Z,OAAQtwB,CAAA,GAAcyrB,CAAd,EAA0CzrB,CAAA0rB,eAA1C,CAAqEnvB,CAArE,CAAoF/B,CADjF,CAEXymB,SAAUA,CAFC,CAGXC,OAAQyG,CAHG,CAIX4I,YAAahL,CAJF,CADb,CAQI/oB,EAAawD,CAAAxD,WACE,IAAnB,GAAIA,CAAJ,GACEA,CADF,CACemrB,CAAA,CAAM3nB,CAAA3G,KAAN,CADf,CAII+zB,EAAAA,CAAqB3lB,CAAA,CAAYjL,CAAZ,CAAwB+Z,CAAxB,CAAgC,CAAA,CAAhC,CAAsCvW,CAAAshB,aAAtC,CAMzB0K,EAAA,CAAmBhsB,CAAA3G,KAAnB,CAAA,CAAqC+zB,CACrCnM,EAAAtmB,KAAA,CAAc,GAAd,CAAoBqF,CAAA3G,KAApB,CAAqC,YAArC,CAAmD+zB,CAAAzG,SAAnD,CArB8C,CAuBhD,MAAOqF,EAzBqH,CAkC9H8D,QAASA,GAAkB,CAACrP,CAAD,CAAalkB,CAAb,CAA2Bi0B,CAA3B,CAAqC,CAC9D,IAD8D,IACrDphC,EAAI,CADiD,CAC9CC,EAAKoxB,CAAAjzB,OAArB,CAAwC4B,CAAxC,CAA4CC,CAA5C,CAAgDD,CAAA,EAAhD,CACEqxB,CAAA,CAAWrxB,CAAX,CAAA,CAAgBmB,EAAA,CAAQkwB,CAAA,CAAWrxB,CAAX,CAAR,CAAuB,CAACs8B,eAAgBnvB,CAAjB;AAA+BgzB,WAAYiB,CAA3C,CAAvB,CAF4C,CAoBhE1H,QAASA,EAAY,CAAC2H,CAAD,CAAcp3B,CAAd,CAAoB+B,CAApB,CAA8BoqB,CAA9B,CAA2CC,CAA3C,CAA4DiL,CAA5D,CACCC,CADD,CACc,CACjC,GAAIt3B,CAAJ,GAAaosB,CAAb,CAA8B,MAAO,KACrC,KAAItxB,EAAQ,IACZ,IAAI6rB,CAAAhyB,eAAA,CAA6BqL,CAA7B,CAAJ,CAAwC,CAClBonB,CAAAA,CAAavJ,CAAA1b,IAAA,CAAcnC,CAAd,CAnkE1BmnB,WAmkE0B,CAAjC,KADsC,IAElCjyB,EAAI,CAF8B,CAE3BY,EAAKsxB,CAAAjzB,OADhB,CACmCe,CADnC,CACuCY,CADvC,CAC2CZ,CAAA,EAD3C,CAGE,GADAyR,CACI,CADQygB,CAAA,CAAWlyB,CAAX,CACR,EAAC2C,CAAA,CAAYs0B,CAAZ,CAAD,EAA6BA,CAA7B,CAA2CxlB,CAAA0gB,SAA3C,GAC2C,EAD3C,GACC1gB,CAAA2gB,SAAA/tB,QAAA,CAA2BwI,CAA3B,CADL,CACkD,CAC5Cs1B,CAAJ,GACE1wB,CADF,CACczP,EAAA,CAAQyP,CAAR,CAAmB,CAACuuB,QAASmC,CAAV,CAAyBlC,MAAOmC,CAAhC,CAAnB,CADd,CAGA,IAAK1D,CAAAjtB,CAAAitB,WAAL,CAA2B,CAEEjtB,IAAAA,EADZA,CACYA,CADZA,CACYA,CAAW3G,EAAA2G,CAAA3G,KAAX2G,CA3hEjCmf,EAAW,CACb5iB,aAAc,IADD,CAEbklB,iBAAkB,IAFL,CAIXl1B,EAAA,CAASyT,CAAAxF,MAAT,CAAJ,GACqC,CAAA,CAAnC,GAAIwF,CAAAyhB,iBAAJ,EACEtC,CAAAsC,iBAEA,CAF4B1C,CAAA,CAAqB/e,CAAAxF,MAArB,CACqBwkB,CADrB,CACoC,CAAA,CADpC,CAE5B,CAAAG,CAAA5iB,aAAA,CAAwB,EAH1B,EAKE4iB,CAAA5iB,aALF,CAK0BwiB,CAAA,CAAqB/e,CAAAxF,MAArB,CACqBwkB,CADrB,CACoC,CAAA,CADpC,CAN5B,CAUIzyB,EAAA,CAASyT,CAAAyhB,iBAAT,CAAJ,GACEtC,CAAAsC,iBADF,CAEM1C,CAAA,CAAqB/e,CAAAyhB,iBAArB;AAAiDzC,CAAjD,CAAgE,CAAA,CAAhE,CAFN,CAIA,IAAIG,CAAAsC,iBAAJ,EAAkCjlB,CAAAwD,CAAAxD,WAAlC,CAEE,KAAM+iB,EAAA,CAAe,QAAf,CAEAP,CAFA,CAAN,CAsgEYG,CAAAA,CAAWnf,CAAAitB,WAAX9N,CAlgEPA,CAogEO5yB,EAAA,CAAS4yB,CAAA5iB,aAAT,CAAJ,GACEyD,CAAA2sB,kBADF,CACgCxN,CAAA5iB,aADhC,CAHyB,CAO3Bk0B,CAAAv9B,KAAA,CAAiB8M,CAAjB,CACA7L,EAAA,CAAQ6L,CAZwC,CALd,CAqBxC,MAAO7L,EAxB0B,CAoCnCy1B,QAASA,GAAuB,CAACvwB,CAAD,CAAO,CACrC,GAAI2mB,CAAAhyB,eAAA,CAA6BqL,CAA7B,CAAJ,CACE,IADsC,IAClBonB,EAAavJ,CAAA1b,IAAA,CAAcnC,CAAd,CArmE1BmnB,WAqmE0B,CADK,CAElCjyB,EAAI,CAF8B,CAE3BY,EAAKsxB,CAAAjzB,OADhB,CACmCe,CADnC,CACuCY,CADvC,CAC2CZ,CAAA,EAD3C,CAGE,GADAyR,CACI4wB,CADQnQ,CAAA,CAAWlyB,CAAX,CACRqiC,CAAA5wB,CAAA4wB,aAAJ,CACE,MAAO,CAAA,CAIb,OAAO,CAAA,CAV8B,CAqBvCb,QAASA,GAAuB,CAACjhC,CAAD,CAAMQ,CAAN,CAAW,CAAA,IACrCuhC,EAAUvhC,CAAAs1B,MAD2B,CAErCkM,EAAUhiC,CAAA81B,MAGdj3B,EAAA,CAAQmB,CAAR,CAAa,QAAQ,CAACJ,CAAD,CAAQZ,CAAR,CAAa,CACV,GAAtB,GAAIA,CAAAmH,OAAA,CAAW,CAAX,CAAJ,GACM3F,CAAA,CAAIxB,CAAJ,CAOJ,EAPgBwB,CAAA,CAAIxB,CAAJ,CAOhB,GAP6BY,CAO7B,GALIA,CAKJ,CANMA,CAAAlB,OAAJ,CACEkB,CADF,GACoB,OAAR,GAAAZ,CAAA,CAAkB,GAAlB,CAAwB,GADpC,EAC2CwB,CAAA,CAAIxB,CAAJ,CAD3C,EAGUwB,CAAA,CAAIxB,CAAJ,CAGZ,EAAAgB,CAAAiiC,KAAA,CAASjjC,CAAT,CAAcY,CAAd,CAAqB,CAAA,CAArB,CAA2BmiC,CAAA,CAAQ/iC,CAAR,CAA3B,CARF,CADgC,CAAlC,CAcAH,EAAA,CAAQ2B,CAAR,CAAa,QAAQ,CAACZ,CAAD,CAAQZ,CAAR,CAAa,CAK3BgB,CAAAd,eAAA,CAAmBF,CAAnB,CAAL;AAAkD,GAAlD,GAAgCA,CAAAmH,OAAA,CAAW,CAAX,CAAhC,GACEnG,CAAA,CAAIhB,CAAJ,CAEA,CAFWY,CAEX,CAAY,OAAZ,GAAIZ,CAAJ,EAA+B,OAA/B,GAAuBA,CAAvB,GACEgjC,CAAA,CAAQhjC,CAAR,CADF,CACiB+iC,CAAA,CAAQ/iC,CAAR,CADjB,CAHF,CALgC,CAAlC,CAnByC,CAmC3CkiC,QAASA,GAAkB,CAACvP,CAAD,CAAawN,CAAb,CAA2BjN,CAA3B,CACvB8F,CADuB,CACTqH,CADS,CACU/C,CADV,CACsBC,CADtB,CACmC3F,CADnC,CAC2D,CAAA,IAChFsL,EAAY,EADoE,CAEhFC,CAFgF,CAGhFC,CAHgF,CAIhFC,EAA4BlD,CAAA,CAAa,CAAb,CAJoD,CAKhFmD,EAAqB3Q,CAAApK,MAAA,EAL2D,CAMhFgb,EAAuB9gC,EAAA,CAAQ6gC,CAAR,CAA4B,CACjDhQ,YAAa,IADoC,CAC9BI,WAAY,IADkB,CACZhrB,QAAS,IADG,CACGk2B,oBAAqB0E,CADxB,CAA5B,CANyD,CAShFhQ,EAAerzB,CAAA,CAAWqjC,CAAAhQ,YAAX,CAAD,CACRgQ,CAAAhQ,YAAA,CAA+B6M,CAA/B,CAA6CjN,CAA7C,CADQ,CAERoQ,CAAAhQ,YAX0E,CAYhFsO,EAAoB0B,CAAA1B,kBAExBzB,EAAA12B,MAAA,EAEAsT,EAAA,CAAiBuW,CAAjB,CAAAkQ,KAAA,CACQ,QAAQ,CAACC,CAAD,CAAU,CAAA,IAClBvG,CADkB,CACyB/D,CAE/CsK,EAAA,CAAU/B,EAAA,CAAoB+B,CAApB,CAEV,IAAIH,CAAA56B,QAAJ,CAAgC,CAI5B03B,CAAA,CAriPJxhB,EAAA5a,KAAA,CAkiPuBy/B,CAliPvB,CAkiPE,CAGc9B,EAAA,CAAehJ,EAAA,CAAaiJ,CAAb,CAAgChiB,CAAA,CAAK6jB,CAAL,CAAhC,CAAf,CAHd,CACc,EAIdvG,EAAA,CAAckD,CAAA,CAAU,CAAV,CAEd,IAAyB,CAAzB,GAAIA,CAAA1gC,OAAJ,EAx9QY4e,CAw9QZ,GAA8B4e,CAAArzB,SAA9B,CACE,KAAM4nB,EAAA,CAAe,OAAf,CAEF6R,CAAA/3B,KAFE,CAEuB+nB,CAFvB,CAAN,CAKFoQ,CAAA,CAAoB,CAAC5M,MAAO,EAAR,CACpBkK,GAAA,CAAYhI,CAAZ,CAA0BmH,CAA1B,CAAwCjD,CAAxC,CACA,KAAI4E,EAAqB9H,EAAA,CAAkBkD,CAAlB,CAA+B,EAA/B,CAAmCwG,CAAnC,CAErBjlC,EAAA,CAAS6kC,CAAA52B,MAAT,CAAJ,EAGEs1B,EAAA,CAAmBF,CAAnB,CAAuC,CAAA,CAAvC,CAEFnP,EAAA;AAAamP,CAAA16B,OAAA,CAA0BurB,CAA1B,CACbsP,GAAA,CAAwB/O,CAAxB,CAAgCwQ,CAAhC,CAxB8B,CAAhC,IA0BExG,EACA,CADcmG,CACd,CAAAlD,CAAAv2B,KAAA,CAAkB65B,CAAlB,CAGF9Q,EAAAxmB,QAAA,CAAmBo3B,CAAnB,CAEAJ,EAAA,CAA0BlJ,EAAA,CAAsBtH,CAAtB,CAAkCuK,CAAlC,CAA+ChK,CAA/C,CACtBmN,CADsB,CACHF,CADG,CACWmD,CADX,CAC+BhG,CAD/B,CAC2CC,CAD3C,CAEtB3F,CAFsB,CAG1B/3B,EAAA,CAAQm5B,CAAR,CAAsB,QAAQ,CAAC/0B,CAAD,CAAOxD,CAAP,CAAU,CAClCwD,CAAJ,GAAai5B,CAAb,GACElE,CAAA,CAAav4B,CAAb,CADF,CACoB0/B,CAAA,CAAa,CAAb,CADpB,CADsC,CAAxC,CAOA,KAFAiD,CAEA,CAF2BtL,EAAA,CAAaqI,CAAA,CAAa,CAAb,CAAA5gB,WAAb,CAAyC8gB,CAAzC,CAE3B,CAAO6C,CAAAxjC,OAAP,CAAA,CAAyB,CACnBgN,CAAAA,CAAQw2B,CAAA3a,MAAA,EACRob,EAAAA,CAAyBT,CAAA3a,MAAA,EAFN,KAGnBqb,EAAkBV,CAAA3a,MAAA,EAHC,CAInB+R,EAAoB4I,CAAA3a,MAAA,EAJD,CAKnBuV,EAAWqC,CAAA,CAAa,CAAb,CAEf,IAAI0D,CAAAn3B,CAAAm3B,YAAJ,CAAA,CAEA,GAAIF,CAAJ,GAA+BN,CAA/B,CAA0D,CACxD,IAAIS,EAAaH,CAAApM,UAEXK,EAAAqG,8BAAN,EACIqF,CAAA56B,QADJ,GAGEo1B,CAHF,CAGa5d,EAAA,CAAYgd,CAAZ,CAHb,CAKA8D,GAAA,CAAY4C,CAAZ,CAA6BnkC,CAAA,CAAOkkC,CAAP,CAA7B,CAA6D7F,CAA7D,CAGAxG,GAAA,CAAa73B,CAAA,CAAOq+B,CAAP,CAAb,CAA+BgG,CAA/B,CAXwD,CAcxD3K,CAAA,CADEgK,CAAA1J,wBAAJ,CAC2BC,EAAA,CAAwBhtB,CAAxB,CAA+By2B,CAAAzP,WAA/B,CAAmE4G,CAAnE,CAD3B,CAG2BA,CAE3B6I,EAAA,CAAwBC,CAAxB,CAAkD12B,CAAlD,CAAyDoxB,CAAzD,CAAmE9E,CAAnE,CACEG,CADF,CApBA,CAPuB,CA8BzB+J,CAAA,CAAY,IA7EU,CAD1B,CAAAa,MAAA,CA+EW,QAAQ,CAACj4B,CAAD,CAAQ,CACnBtI,EAAA,CAAQsI,CAAR,CAAJ,EACEmO,CAAA,CAAkBnO,CAAlB,CAFqB,CA/E3B,CAqFA,OAAOk4B,SAA0B,CAACC,CAAD,CAAoBv3B,CAApB,CAA2BzI,CAA3B,CAAiCwJ,CAAjC,CAA8C6sB,CAA9C,CAAiE,CAC5FnB,CAAAA,CAAyBmB,CACzB5tB,EAAAm3B,YAAJ,GACIX,CAAJ,CACEA,CAAA99B,KAAA,CAAesH,CAAf;AACezI,CADf,CAEewJ,CAFf,CAGe0rB,CAHf,CADF,EAMMgK,CAAA1J,wBAGJ,GAFEN,CAEF,CAF2BO,EAAA,CAAwBhtB,CAAxB,CAA+By2B,CAAAzP,WAA/B,CAAmE4G,CAAnE,CAE3B,EAAA6I,CAAA,CAAwBC,CAAxB,CAAkD12B,CAAlD,CAAyDzI,CAAzD,CAA+DwJ,CAA/D,CAA4E0rB,CAA5E,CATF,CADA,CAFgG,CArGd,CA0HtFmD,QAASA,GAAU,CAAC71B,CAAD,CAAIC,CAAJ,CAAO,CACxB,IAAIw9B,EAAOx9B,CAAAksB,SAAPsR,CAAoBz9B,CAAAmsB,SACxB,OAAa,EAAb,GAAIsR,CAAJ,CAAuBA,CAAvB,CACIz9B,CAAA8E,KAAJ,GAAe7E,CAAA6E,KAAf,CAA+B9E,CAAA8E,KAAD,CAAU7E,CAAA6E,KAAV,CAAqB,EAArB,CAAyB,CAAvD,CACO9E,CAAA5B,MADP,CACiB6B,CAAA7B,MAJO,CAO1B87B,QAASA,GAAiB,CAACwD,CAAD,CAAOC,CAAP,CAA0BlyB,CAA1B,CAAqCzN,CAArC,CAA8C,CAEtE4/B,QAASA,EAAuB,CAACC,CAAD,CAAa,CAC3C,MAAOA,EAAA,CACJ,YADI,CACWA,CADX,CACwB,GADxB,CAEL,EAHyC,CAM7C,GAAIF,CAAJ,CACE,KAAM3S,EAAA,CAAe,UAAf,CACF2S,CAAA74B,KADE,CACsB84B,CAAA,CAAwBD,CAAA7yB,aAAxB,CADtB,CAEFW,CAAA3G,KAFE,CAEc84B,CAAA,CAAwBnyB,CAAAX,aAAxB,CAFd,CAE+D4yB,CAF/D,CAEqE36B,EAAA,CAAY/E,CAAZ,CAFrE,CAAN,CAToE,CAgBxE03B,QAASA,GAA2B,CAACxJ,CAAD,CAAa4R,CAAb,CAAmB,CACrD,IAAIC,EAAgBjqB,CAAA,CAAagqB,CAAb,CAAmB,CAAA,CAAnB,CAChBC,EAAJ,EACE7R,CAAAvtB,KAAA,CAAgB,CACdwtB,SAAU,CADI,CAEdjmB,QAAS83B,QAAiC,CAACC,CAAD,CAAe,CACnDC,CAAAA,CAAqBD,CAAAhiC,OAAA,EAAzB,KACIkiC,EAAmB,CAAEllC,CAAAilC,CAAAjlC,OAIrBklC,EAAJ,EAAsBj4B,EAAAk4B,kBAAA,CAA0BF,CAA1B,CAEtB,OAAOG,SAA8B,CAACp4B,CAAD,CAAQzI,CAAR,CAAc,CACjD,IAAIvB,EAASuB,CAAAvB,OAAA,EACRkiC;CAAL,EAAuBj4B,EAAAk4B,kBAAA,CAA0BniC,CAA1B,CACvBiK,GAAAo4B,iBAAA,CAAyBriC,CAAzB,CAAiC8hC,CAAAQ,YAAjC,CACAt4B,EAAA7I,OAAA,CAAa2gC,CAAb,CAA4BS,QAAiC,CAACrkC,CAAD,CAAQ,CACnEqD,CAAA,CAAK,CAAL,CAAAm2B,UAAA,CAAoBx5B,CAD+C,CAArE,CAJiD,CARI,CAF3C,CAAhB,CAHmD,CA2BvD+3B,QAASA,GAAY,CAACpyB,CAAD,CAAO8sB,CAAP,CAAiB,CACpC9sB,CAAA,CAAO7B,CAAA,CAAU6B,CAAV,EAAkB,MAAlB,CACP,QAAQA,CAAR,EACA,KAAK,KAAL,CACA,KAAK,MAAL,CACE,IAAI2+B,EAAU5mC,CAAAyJ,SAAA+W,cAAA,CAA8B,KAA9B,CACdomB,EAAA9lB,UAAA,CAAoB,GAApB,CAA0B7Y,CAA1B,CAAiC,GAAjC,CAAuC8sB,CAAvC,CAAkD,IAAlD,CAAyD9sB,CAAzD,CAAgE,GAChE,OAAO2+B,EAAA3lB,WAAA,CAAmB,CAAnB,CAAAA,WACT,SACE,MAAO8T,EAPT,CAFoC,CActC8R,QAASA,GAAqB,CAACrjC,CAAD,CAAWsjC,CAAX,CAA+B,CAC3D,GAA2B,QAA3B,GAAIA,CAAJ,CACE,MAAO/oB,EAAAoZ,KAIT,IAA2B,KAA3B,GAAI2P,CAAJ,EAA2D,OAA3D,GAAoCA,CAApC,CACE,MAAwE,EAAxE,GAAI,CAAC,KAAD,CAAQ,OAAR,CAAiB,OAAjB,CAA0B,QAA1B,CAAoC,OAApC,CAAAtgC,QAAA,CAAqDhD,CAArD,CAAJ,CACSua,CAAAwZ,aADT,CAGOxZ,CAAAuZ,UACF,IAA2B,WAA3B,GAAIwP,CAAJ,CAEL,MAAiB,OAAjB,GAAItjC,CAAJ,CAAiCua,CAAAuZ,UAAjC;AACiB,GAAjB,GAAI9zB,CAAJ,CAA6Bua,CAAAsZ,IAA7B,CACOtZ,CAAAwZ,aACF,IAEW,MAFX,GAEF/zB,CAFE,EAE4C,QAF5C,GAEqBsjC,CAFrB,EAKW,MALX,GAKFtjC,CALE,EAK4C,MAL5C,GAKqBsjC,CALrB,EAOW,MAPX,GAOFtjC,CAPE,EAO4C,MAP5C,GAOqBsjC,CAPrB,CASL,MAAO/oB,EAAAwZ,aACF,IAAiB,GAAjB,GAAI/zB,CAAJ,GAAgD,MAAhD,GAAyBsjC,CAAzB,EAC2C,QAD3C,GACoBA,CADpB,EAEL,MAAO/oB,EAAAsZ,IA5BkD,CAgC7D0P,QAASA,GAAqB,CAACvjC,CAAD,CAAWwjC,CAAX,CAA+B,CAC3D,IAAIphC,EAAOohC,CAAAt3B,YAAA,EACX,OAAO8mB,EAAA,CAAchzB,CAAd,CAAyB,GAAzB,CAA+BoC,CAA/B,CAAP,EAA+C4wB,CAAA,CAAc,IAAd,CAAqB5wB,CAArB,CAFY,CAK7DqhC,QAASA,GAA2B,CAAC3kC,CAAD,CAAQ,CAC1C,MAAOo1B,GAAA,CAAe3Z,CAAA1a,QAAA,CAAaf,CAAb,CAAf,CAAoC,gBAApC,CADmC,CAG5Cm7B,QAASA,GAAoB,CAAC93B,CAAD,CAAO0uB,CAAP,CAAmBd,CAAnB,CAA6B2T,CAA7B,CAAuC,CAClE,GAAIlT,CAAAtuB,KAAA,CAA+BwhC,CAA/B,CAAJ,CACE,KAAM/T,EAAA,CAAe,aAAf,CAAN,CAGE3vB,CAAAA,CAAW0C,EAAA,CAAUP,CAAV,CACf,KAAIwhC,EAAiBJ,EAAA,CAAsBvjC,CAAtB,CAAgC0jC,CAAhC,CAArB,CAEIE,EAAY5iC,EAEC,SAAjB,GAAI0iC,CAAJ,EAA2C,KAA3C,GAA8B1jC,CAA9B,EAAiE,QAAjE,GAAoDA,CAApD,CAEW2jC,CAFX,GAGEC,CAHF,CAGcrpB,CAAAspB,WAAAp+B,KAAA,CAAqB8U,CAArB,CAA2BopB,CAA3B,CAHd,EACEC,CADF,CACcH,EAKd5S,EAAAvtB,KAAA,CAAgB,CACdwtB,SAAU,GADI,CAEdjmB,QAASi5B,QAAwB,CAACC,CAAD,CAAI1hC,CAAJ,CAAU,CACzC,IAAI2hC;AAAejqB,CAAA,CAAO1X,CAAA,CAAK0tB,CAAL,CAAP,CAAnB,CACIkU,EAAclqB,CAAA,CAAO1X,CAAA,CAAK0tB,CAAL,CAAP,CAAuBmU,QAAmB,CAACl+B,CAAD,CAAM,CAEhE,MAAOuU,EAAA1a,QAAA,CAAamG,CAAb,CAFyD,CAAhD,CAKlB,OAAO,CACL21B,IAAKwI,QAAwB,CAACv5B,CAAD,CAAQymB,CAAR,CAAkB,CAC7C+S,QAASA,EAAc,EAAG,CACxB,IAAIC,EAAYL,CAAA,CAAap5B,CAAb,CAChBymB,EAAA,CAAS,CAAT,CAAA,CAAYqS,CAAZ,CAAA,CAAwBE,CAAA,CAAUS,CAAV,CAFA,CAK1BD,CAAA,EACAx5B,EAAA7I,OAAA,CAAakiC,CAAb,CAA0BG,CAA1B,CAP6C,CAD1C,CAPkC,CAF7B,CAAhB,CAhBkE,CA8CpEjK,QAASA,GAA2B,CAACh4B,CAAD,CAAO0uB,CAAP,CAAmB/xB,CAAnB,CAA0B2K,CAA1B,CAAgCgwB,CAAhC,CAA0C,CAC5E,IAAIz5B,EAAW0C,EAAA,CAAUP,CAAV,CAAf,CACIwhC,EAAiBN,EAAA,CAAsBrjC,CAAtB,CAAgCyJ,CAAhC,CADrB,CAGI66B,EAAe/T,CAAA,CAAqB9mB,CAArB,CAAf66B,EAA6C7K,CAHjD,CAKIiJ,EAAgBjqB,CAAA,CAAa3Z,CAAb,CAHKylC,CAAC9K,CAGN,CAAwCkK,CAAxC,CAAwDW,CAAxD,CAGpB,IAAK5B,CAAL,CAAA,CAEA,GAAa,UAAb,GAAIj5B,CAAJ,EAAwC,QAAxC,GAA2BzJ,CAA3B,CACE,KAAM2vB,EAAA,CAAe,UAAf,CAEFjoB,EAAA,CAAYvF,CAAZ,CAFE,CAAN,CAKF,GAAIquB,CAAAtuB,KAAA,CAA+BuH,CAA/B,CAAJ,CACE,KAAMkmB,EAAA,CAAe,aAAf,CAAN,CAGFkB,CAAAvtB,KAAA,CAAgB,CACdwtB,SAAU,GADI,CAEdjmB,QAASA,QAAQ,EAAG,CAChB,MAAO,CACL8wB,IAAK6I,QAAiC,CAAC55B,CAAD,CAAQjI,CAAR,CAAiBN,CAAjB,CAAuB,CACvDoiC,CAAAA,CAAepiC,CAAAoiC,YAAfA,GAAoCpiC,CAAAoiC,YAApCA,CAAuDr/B,CAAA,EAAvDq/B,CAGJ,KAAIC,EAAWriC,CAAA,CAAKoH,CAAL,CACXi7B,EAAJ,GAAiB5lC,CAAjB,GAIE4jC,CACA,CADgBgC,CAChB,EAD4BjsB,CAAA,CAAaisB,CAAb,CAAuB,CAAA,CAAvB,CAA6Bf,CAA7B,CAA6CW,CAA7C,CAC5B,CAAAxlC,CAAA,CAAQ4lC,CALV,CAUKhC,EAAL,GAKArgC,CAAA,CAAKoH,CAAL,CAGA,CAHai5B,CAAA,CAAc93B,CAAd,CAGb,CADA+5B,CAACF,CAAA,CAAYh7B,CAAZ,CAADk7B,GAAuBF,CAAA,CAAYh7B,CAAZ,CAAvBk7B,CAA2C,EAA3CA,UACA,CAD0D,CAAA,CAC1D,CAAA5iC,CAACM,CAAAoiC,YAAD1iC;AAAqBM,CAAAoiC,YAAA,CAAiBh7B,CAAjB,CAAAm7B,QAArB7iC,EAAuD6I,CAAvD7I,QAAA,CACS2gC,CADT,CACwBS,QAAiC,CAACuB,CAAD,CAAWG,CAAX,CAAqB,CAO7D,OAAb,GAAIp7B,CAAJ,EAAwBi7B,CAAxB,GAAqCG,CAArC,CACExiC,CAAAyiC,aAAA,CAAkBJ,CAAlB,CAA4BG,CAA5B,CADF,CAGExiC,CAAA8+B,KAAA,CAAU13B,CAAV,CAAgBi7B,CAAhB,CAVwE,CAD9E,CARA,CAf2D,CADxD,CADS,CAFN,CAAhB,CAZA,CAT4E,CA+E9ExF,QAASA,GAAW,CAAChI,CAAD,CAAe6N,CAAf,CAAiCC,CAAjC,CAA0C,CAAA,IACxDC,EAAuBF,CAAA,CAAiB,CAAjB,CADiC,CAExDG,EAAcH,CAAAnnC,OAF0C,CAGxDgD,EAASqkC,CAAArkB,WAH+C,CAIxDjiB,CAJwD,CAIrDY,CAEP,IAAI23B,CAAJ,CACE,IAAKv4B,CAAO,CAAH,CAAG,CAAAY,CAAA,CAAK23B,CAAAt5B,OAAjB,CAAsCe,CAAtC,CAA0CY,CAA1C,CAA8CZ,CAAA,EAA9C,CACE,GAAIu4B,CAAA,CAAav4B,CAAb,CAAJ,GAAwBsmC,CAAxB,CAA8C,CAC5C/N,CAAA,CAAav4B,CAAA,EAAb,CAAA,CAAoBqmC,CACJG,EAAAA,CAAK3lC,CAAL2lC,CAASD,CAATC,CAAuB,CAAvC,KAAS,IACA1lC,EAAKy3B,CAAAt5B,OADd,CAEK4B,CAFL,CAESC,CAFT,CAEaD,CAAA,EAAA,CAAK2lC,CAAA,EAFlB,CAGMA,CAAJ,CAAS1lC,CAAT,CACEy3B,CAAA,CAAa13B,CAAb,CADF,CACoB03B,CAAA,CAAaiO,CAAb,CADpB,CAGE,OAAOjO,CAAA,CAAa13B,CAAb,CAGX03B,EAAAt5B,OAAA,EAAuBsnC,CAAvB,CAAqC,CAKjChO,EAAAj5B,QAAJ,GAA6BgnC,CAA7B,GACE/N,CAAAj5B,QADF,CACyB+mC,CADzB,CAGA,MAnB4C,CAwB9CpkC,CAAJ,EACEA,CAAAwkC,aAAA,CAAoBJ,CAApB,CAA6BC,CAA7B,CAOEroB,EAAAA,CAAWpgB,CAAAyJ,SAAA4W,uBAAA,EACf,KAAKle,CAAL,CAAS,CAAT,CAAYA,CAAZ,CAAgBumC,CAAhB,CAA6BvmC,CAAA,EAA7B,CACEie,CAAAG,YAAA,CAAqBgoB,CAAA,CAAiBpmC,CAAjB,CAArB,CAGEhB,EAAA0nC,QAAA,CAAeJ,CAAf,CAAJ,GAIEtnC,CAAAoN,KAAA,CAAYi6B,CAAZ,CAAqBrnC,CAAAoN,KAAA,CAAYk6B,CAAZ,CAArB,CAGA,CAAAtnC,CAAA,CAAOsnC,CAAP,CAAAtY,IAAA,CAAiC,UAAjC,CAPF,CAYAhvB,EAAAoP,UAAA,CAAiB6P,CAAA2B,iBAAA,CAA0B,GAA1B,CAAjB,CAGA;IAAK5f,CAAL,CAAS,CAAT,CAAYA,CAAZ,CAAgBumC,CAAhB,CAA6BvmC,CAAA,EAA7B,CACE,OAAOomC,CAAA,CAAiBpmC,CAAjB,CAETomC,EAAA,CAAiB,CAAjB,CAAA,CAAsBC,CACtBD,EAAAnnC,OAAA,CAA0B,CAhEkC,CAoE9Dm+B,QAASA,GAAkB,CAACp2B,CAAD,CAAK2/B,CAAL,CAAiB,CAC1C,MAAOllC,EAAA,CAAO,QAAQ,EAAG,CAAE,MAAOuF,EAAAG,MAAA,CAAS,IAAT,CAAexF,SAAf,CAAT,CAAlB,CAAyDqF,CAAzD,CAA6D2/B,CAA7D,CADmC,CAK5CvH,QAASA,GAAY,CAACjD,CAAD,CAASlwB,CAAT,CAAgBymB,CAAhB,CAA0B0G,CAA1B,CAAiCY,CAAjC,CAA8ChD,CAA9C,CAA4D,CAC/E,GAAI,CACFmF,CAAA,CAAOlwB,CAAP,CAAcymB,CAAd,CAAwB0G,CAAxB,CAA+BY,CAA/B,CAA4ChD,CAA5C,CADE,CAEF,MAAO1tB,CAAP,CAAU,CACVkQ,CAAA,CAAkBlQ,CAAlB,CAAqBP,EAAA,CAAY2pB,CAAZ,CAArB,CADU,CAHmE,CAQjFkU,QAASA,GAAmB,CAACxV,CAAD,CAAWX,CAAX,CAA0B,CACpD,GAAIiD,CAAJ,CACE,KAAM1C,EAAA,CAAe,aAAf,CAEJI,CAFI,CAEMX,CAFN,CAAN,CAFkD,CAStD6N,QAASA,GAA2B,CAACryB,CAAD,CAAQmtB,CAAR,CAAe30B,CAAf,CAA4BmsB,CAA5B,CAAsCnf,CAAtC,CAAiD,CAoInFo1B,QAASA,EAAa,CAACtnC,CAAD,CAAMunC,CAAN,CAAoBC,CAApB,CAAmC,CACnDvnC,CAAA,CAAWiF,CAAAq6B,WAAX,CAAJ,EAA2C,CAAA/4B,EAAA,CAAc+gC,CAAd,CAA4BC,CAA5B,CAA3C,GAEOzR,EAcL,GAbErpB,CAAA+6B,aAAA,CAAmB3R,CAAnB,CACA,CAAAC,EAAA,CAAiB,EAYnB,EATK2R,CASL,GAREA,CACA,CADU,EACV,CAAA3R,EAAA3wB,KAAA,CAAoBuiC,CAApB,CAOF,EAJID,CAAA,CAAQ1nC,CAAR,CAIJ,GAHEwnC,CAGF,CAHkBE,CAAA,CAAQ1nC,CAAR,CAAAwnC,cAGlB,EAAAE,CAAA,CAAQ1nC,CAAR,CAAA,CAAe,IAAI4nC,EAAJ,CAAiBJ,CAAjB,CAAgCD,CAAhC,CAhBjB,CADuD,CAqBzDI,QAASA,EAAoB,EAAG,CAC9BziC,CAAAq6B,WAAA,CAAuBmI,CAAvB,CAEAA,EAAA,CAAU/hC,IAAAA,EAHoB,CAxJhC,IAAIkiC,EAAwB,EAA5B,CACIrI,EAAiB,EADrB,CAEIkI,CAEJ7nC,EAAA,CAAQwxB,CAAR,CAAkByW,QAA0B,CAACxW,CAAD,CAAaC,CAAb,CAAwB,CAAA,IAC9DM,EAAWP,CAAAO,SADmD,CAElED,EAAWN,CAAAM,SAFuD;AAIlEmW,CAJkE,CAKlEC,CALkE,CAKvDC,CALuD,CAK5CC,CAEtB,QAJO5W,CAAAI,KAIP,EAEE,KAAK,GAAL,CACOE,CAAL,EAAkB1xB,EAAAC,KAAA,CAAoB05B,CAApB,CAA2BhI,CAA3B,CAAlB,GACEwV,EAAA,CAAoBxV,CAApB,CAA8B3f,CAAA3G,KAA9B,CACA,CAAArG,CAAA,CAAYqsB,CAAZ,CAAA,CAAyBsI,CAAA,CAAMhI,CAAN,CAAzB,CAA2ClsB,IAAAA,EAF7C,CAKAwiC,EAAA,CAActO,CAAAuO,SAAA,CAAevW,CAAf,CAAyB,QAAQ,CAACjxB,CAAD,CAAQ,CACrD,GAAIpB,CAAA,CAASoB,CAAT,CAAJ,EAAuB5B,EAAA,CAAU4B,CAAV,CAAvB,CAEE0mC,CAAA,CAAc/V,CAAd,CAAyB3wB,CAAzB,CADesE,CAAAyhC,CAAYpV,CAAZoV,CACf,CACA,CAAAzhC,CAAA,CAAYqsB,CAAZ,CAAA,CAAyB3wB,CAJ0B,CAAzC,CAOdi5B,EAAA0M,YAAA,CAAkB1U,CAAlB,CAAA6U,QAAA,CAAsCh6B,CACtCq7B,EAAA,CAAYlO,CAAA,CAAMhI,CAAN,CACRryB,EAAA,CAASuoC,CAAT,CAAJ,CAGE7iC,CAAA,CAAYqsB,CAAZ,CAHF,CAG2BhX,CAAA,CAAawtB,CAAb,CAAA,CAAwBr7B,CAAxB,CAH3B,CAIW1N,EAAA,CAAU+oC,CAAV,CAJX,GAOE7iC,CAAA,CAAYqsB,CAAZ,CAPF,CAO2BwW,CAP3B,CASAvI,EAAA,CAAejO,CAAf,CAAA,CAA4B,IAAIqW,EAAJ,CAAiBS,EAAjB,CAAuCnjC,CAAA,CAAYqsB,CAAZ,CAAvC,CAC5BsW,EAAAziC,KAAA,CAA2B+iC,CAA3B,CACA,MAEF,MAAK,GAAL,CACE,GAAK,CAAAjoC,EAAAC,KAAA,CAAoB05B,CAApB,CAA2BhI,CAA3B,CAAL,CAA2C,CACzC,GAAID,CAAJ,CAAc,KACdyV,GAAA,CAAoBxV,CAApB,CAA8B3f,CAAA3G,KAA9B,CACAsuB,EAAA,CAAMhI,CAAN,CAAA,CAAkBlsB,IAAAA,EAHuB,CAK3C,GAAIisB,CAAJ,EAAiB,CAAAiI,CAAA,CAAMhI,CAAN,CAAjB,CAAkC,KAElCmW,EAAA,CAAYnsB,CAAA,CAAOge,CAAA,CAAMhI,CAAN,CAAP,CAEVqW,EAAA,CADEF,CAAAM,QAAJ,CACY3hC,EADZ,CAGYH,EAEZyhC,EAAA,CAAYD,CAAAO,OAAZ,EAAgC,QAAQ,EAAG,CAEzCR,CAAA,CAAY7iC,CAAA,CAAYqsB,CAAZ,CAAZ,CAAqCyW,CAAA,CAAUt7B,CAAV,CACrC,MAAM+kB,EAAA,CAAe,WAAf,CAEFoI,CAAA,CAAMhI,CAAN,CAFE,CAEeA,CAFf,CAEyB3f,CAAA3G,KAFzB,CAAN,CAHyC,CAO3Cw8B,EAAA,CAAY7iC,CAAA,CAAYqsB,CAAZ,CAAZ,CAAqCyW,CAAA,CAAUt7B,CAAV,CACjC87B,EAAAA,CAAmBA,QAAyB,CAACC,CAAD,CAAc,CACvDP,CAAA,CAAQO,CAAR,CAAqBvjC,CAAA,CAAYqsB,CAAZ,CAArB,CAAL,GAEO2W,CAAA,CAAQO,CAAR,CAAqBV,CAArB,CAAL,CAKEE,CAAA,CAAUv7B,CAAV,CAAiB+7B,CAAjB,CAA+BvjC,CAAA,CAAYqsB,CAAZ,CAA/B,CALF,CAEErsB,CAAA,CAAYqsB,CAAZ,CAFF,CAE2BkX,CAJ7B,CAWA,OADAV,EACA;AADYU,CAXgD,CAc9DD,EAAAE,UAAA,CAA6B,CAAA,CAE3BP,EAAA,CADE7W,CAAAK,WAAJ,CACgBjlB,CAAAi8B,iBAAA,CAAuB9O,CAAA,CAAMhI,CAAN,CAAvB,CAAwC2W,CAAxC,CADhB,CAGgB97B,CAAA7I,OAAA,CAAagY,CAAA,CAAOge,CAAA,CAAMhI,CAAN,CAAP,CAAwB2W,CAAxB,CAAb,CAAwD,IAAxD,CAA8DR,CAAAM,QAA9D,CAEhBT,EAAAziC,KAAA,CAA2B+iC,CAA3B,CACA,MAEF,MAAK,GAAL,CACE,GAAK,CAAAjoC,EAAAC,KAAA,CAAoB05B,CAApB,CAA2BhI,CAA3B,CAAL,CAA2C,CACzC,GAAID,CAAJ,CAAc,KACdyV,GAAA,CAAoBxV,CAApB,CAA8B3f,CAAA3G,KAA9B,CACAsuB,EAAA,CAAMhI,CAAN,CAAA,CAAkBlsB,IAAAA,EAHuB,CAK3C,GAAIisB,CAAJ,EAAiB,CAAAiI,CAAA,CAAMhI,CAAN,CAAjB,CAAkC,KAElCmW,EAAA,CAAYnsB,CAAA,CAAOge,CAAA,CAAMhI,CAAN,CAAP,CACZ,KAAI+W,EAAYZ,CAAAM,QAAhB,CAEIO,EAAe3jC,CAAA,CAAYqsB,CAAZ,CAAfsX,CAAwCb,CAAA,CAAUt7B,CAAV,CAC5C8yB,EAAA,CAAejO,CAAf,CAAA,CAA4B,IAAIqW,EAAJ,CAAiBS,EAAjB,CAAuCnjC,CAAA,CAAYqsB,CAAZ,CAAvC,CAE5B4W,EAAA,CAAcz7B,CAAA,CAAM4kB,CAAAK,WAAA,CAAwB,kBAAxB,CAA6C,QAAnD,CAAA,CAA6DqW,CAA7D,CAAwEc,QAA+B,CAACtC,CAAD,CAAWG,CAAX,CAAqB,CACxI,GAAIA,CAAJ,GAAiBH,CAAjB,CAA2B,CACzB,GAAIG,CAAJ,GAAiBkC,CAAjB,EAAkCD,CAAlC,EAA+CjiC,EAAA,CAAOggC,CAAP,CAAiBkC,CAAjB,CAA/C,CACE,MAEFlC,EAAA,CAAWkC,CAJc,CAM3BvB,CAAA,CAAc/V,CAAd,CAAyBiV,CAAzB,CAAmCG,CAAnC,CACAzhC,EAAA,CAAYqsB,CAAZ,CAAA,CAAyBiV,CAR+G,CAA5H,CAWdqB,EAAAziC,KAAA,CAA2B+iC,CAA3B,CACA,MAEF,MAAK,GAAL,CACOvW,CAAL,EAAkB1xB,EAAAC,KAAA,CAAoB05B,CAApB,CAA2BhI,CAA3B,CAAlB,EACEwV,EAAA,CAAoBxV,CAApB,CAA8B3f,CAAA3G,KAA9B,CAGFy8B,EAAA,CAAYnO,CAAA35B,eAAA,CAAqB2xB,CAArB,CAAA,CAAiChW,CAAA,CAAOge,CAAA,CAAMhI,CAAN,CAAP,CAAjC,CAA2DhvB,CAGvE,IAAImlC,CAAJ,GAAkBnlC,CAAlB,EAA0B+uB,CAA1B,CAAoC,KAEpC1sB,EAAA,CAAYqsB,CAAZ,CAAA,CAAyB,QAAQ,CAAC9I,CAAD,CAAS,CACxC,MAAOuf,EAAA,CAAUt7B,CAAV;AAAiB+b,CAAjB,CADiC,CAjH9C,CAPkE,CAApE,CA0JA,OAAO,CACL+W,eAAgBA,CADX,CAELR,cAAe6I,CAAAnoC,OAAfs/B,EAA+CA,QAAsB,EAAG,CACtE,IADsE,IAC7Dv+B,EAAI,CADyD,CACtDY,EAAKwmC,CAAAnoC,OAArB,CAAmDe,CAAnD,CAAuDY,CAAvD,CAA2D,EAAEZ,CAA7D,CACEonC,CAAA,CAAsBpnC,CAAtB,CAAA,EAFoE,CAFnE,CA/J4E,CA3+DrF,IAAIsoC,GAAmB,KAAvB,CACI9R,GAAoB34B,CAAAyJ,SAAA+W,cAAA,CAA8B,KAA9B,CADxB,CAII2V,GAA2BD,CAJ/B,CAKII,GAA4BD,CALhC,CAQIL,GAAeD,CARnB,CAWI0B,EA+FJY,EAAAtQ,UAAA,CAAuB,CAgBrB2iB,WAAY/N,EAhBS,CA8BrBgO,UAAWA,QAAQ,CAACC,CAAD,CAAW,CACxBA,CAAJ,EAAkC,CAAlC,CAAgBA,CAAAxpC,OAAhB,EACEiZ,CAAA6M,SAAA,CAAkB,IAAAuR,UAAlB,CAAkCmS,CAAlC,CAF0B,CA9BT,CA+CrBC,aAAcA,QAAQ,CAACD,CAAD,CAAW,CAC3BA,CAAJ,EAAkC,CAAlC,CAAgBA,CAAAxpC,OAAhB,EACEiZ,CAAA8M,YAAA,CAAqB,IAAAsR,UAArB,CAAqCmS,CAArC,CAF6B,CA/CZ,CAiErBtC,aAAcA,QAAQ,CAAC3kB,CAAD,CAAa6hB,CAAb,CAAyB,CAC7C,IAAIsF,EAAQC,EAAA,CAAgBpnB,CAAhB,CAA4B6hB,CAA5B,CACRsF,EAAJ,EAAaA,CAAA1pC,OAAb,EACEiZ,CAAA6M,SAAA,CAAkB,IAAAuR,UAAlB,CAAkCqS,CAAlC,CAIF,EADIE,CACJ,CADeD,EAAA,CAAgBvF,CAAhB,CAA4B7hB,CAA5B,CACf,GAAgBqnB,CAAA5pC,OAAhB,EACEiZ,CAAA8M,YAAA,CAAqB,IAAAsR,UAArB,CAAqCuS,CAArC,CAR2C,CAjE1B,CAsFrBrG,KAAMA,QAAQ,CAACjjC,CAAD,CAAMY,CAAN,CAAa2oC,CAAb,CAAwB1X,CAAxB,CAAkC,CAAA,IAM1C2X;AAAahmB,EAAA,CADN,IAAAuT,UAAA9yB,CAAe,CAAfA,CACM,CAAyBjE,CAAzB,CAN6B,CAO1CypC,EAzuLHC,EAAA,CAyuLmC1pC,CAzuLnC,CAkuL6C,CAQ1C2pC,EAAW3pC,CAGXwpC,EAAJ,EACE,IAAAzS,UAAA7yB,KAAA,CAAoBlE,CAApB,CAAyBY,CAAzB,CACA,CAAAixB,CAAA,CAAW2X,CAFb,EAGWC,CAHX,GAIE,IAAA,CAAKA,CAAL,CACA,CADmB7oC,CACnB,CAAA+oC,CAAA,CAAWF,CALb,CAQA,KAAA,CAAKzpC,CAAL,CAAA,CAAYY,CAGRixB,EAAJ,CACE,IAAAiF,MAAA,CAAW92B,CAAX,CADF,CACoB6xB,CADpB,EAGEA,CAHF,CAGa,IAAAiF,MAAA,CAAW92B,CAAX,CAHb,IAKI,IAAA82B,MAAA,CAAW92B,CAAX,CALJ,CAKsB6xB,CALtB,CAKiClkB,EAAA,CAAW3N,CAAX,CAAgB,GAAhB,CALjC,CAYiB,MAAjB,GAHWwE,EAAA1C,CAAU,IAAAi1B,UAAVj1B,CAGX,EAAkC,QAAlC,GAA0B9B,CAA1B,GACE,IAAA,CAAKA,CAAL,CADF,CACcY,CADd,CACsBo1B,EAAA,CAAep1B,CAAf,CAAsB,uBAAtB,CADtB,CAIkB,EAAA,CAAlB,GAAI2oC,CAAJ,GACgB,IAAd,GAAI3oC,CAAJ,EAAsBwC,CAAA,CAAYxC,CAAZ,CAAtB,CACE,IAAAm2B,UAAA6S,WAAA,CAA0B/X,CAA1B,CADF,CAGMkX,EAAA/kC,KAAA,CAAsB6tB,CAAtB,CAAJ,CAMM2X,CAAJ,EAA4B,CAAA,CAA5B,GAAkB5oC,CAAlB,CACE,IAAAm2B,UAAA6S,WAAA,CAA0B/X,CAA1B,CADF,CAGE,IAAAkF,UAAA5yB,KAAA,CAAoB0tB,CAApB,CAA8BjxB,CAA9B,CATJ,CAYEo2B,CAAA,CAAe,IAAAD,UAAA,CAAe,CAAf,CAAf,CAAkClF,CAAlC,CAA4CjxB,CAA5C,CAhBN,CAuBA,EADI2lC,CACJ,CADkB,IAAAA,YAClB,GACE1mC,CAAA,CAAQ0mC,CAAA,CAAYoD,CAAZ,CAAR,CAA+B,QAAQ,CAACliC,CAAD,CAAK,CAC1C,GAAI,CACFA,CAAA,CAAG7G,CAAH,CADE,CAEF,MAAOmJ,CAAP,CAAU,CACVkQ,CAAA,CAAkBlQ,CAAlB,CADU,CAH8B,CAA5C,CA9D4C,CAtF3B,CAkLrBq+B,SAAUA,QAAQ,CAACpoC,CAAD,CAAMyH,CAAN,CAAU,CAAA,IACtBoyB,EAAQ,IADc;AAEtB0M,EAAe1M,CAAA0M,YAAfA,GAAqC1M,CAAA0M,YAArCA,CAAyDr/B,CAAA,EAAzDq/B,CAFsB,CAGtBsD,EAAatD,CAAA,CAAYvmC,CAAZ,CAAb6pC,GAAkCtD,CAAA,CAAYvmC,CAAZ,CAAlC6pC,CAAqD,EAArDA,CAEJA,EAAAzkC,KAAA,CAAeqC,CAAf,CACAsU,EAAAnY,WAAA,CAAsB,QAAQ,EAAG,CAC1BimC,CAAApD,QAAL,EAA0B,CAAA5M,CAAA35B,eAAA,CAAqBF,CAArB,CAA1B,EAAwDoD,CAAA,CAAYy2B,CAAA,CAAM75B,CAAN,CAAZ,CAAxD,EAEEyH,CAAA,CAAGoyB,CAAA,CAAM75B,CAAN,CAAH,CAH6B,CAAjC,CAOA,OAAO,SAAQ,EAAG,CAChB2E,EAAA,CAAYklC,CAAZ,CAAuBpiC,CAAvB,CADgB,CAbQ,CAlLP,CA5GiC,KAwUpDqiC,GAAcvvB,CAAAuvB,YAAA,EAxUsC,CAyUpDC,GAAYxvB,CAAAwvB,UAAA,EAzUwC,CA0UpDrI,GAAuC,IAAjB,GAACoI,EAAD,EAAwC,IAAxC,GAAyBC,EAAzB,CAChBjnC,EADgB,CAEhB4+B,QAA4B,CAACrO,CAAD,CAAW,CACvC,MAAOA,EAAA3qB,QAAA,CAAiB,OAAjB,CAA0BohC,EAA1B,CAAAphC,QAAA,CAA+C,KAA/C,CAAsDqhC,EAAtD,CADgC,CA5UO,CA+UpDpO,GAAoB,6BA/UgC,CAgVpDE,GAAuB,aAE3BlvB,GAAAo4B,iBAAA,CAA2B14B,CAAA,CAAmB04B,QAAyB,CAAC5R,CAAD,CAAW6W,CAAX,CAAoB,CACzF,IAAI3Y,EAAW8B,CAAAtmB,KAAA,CAAc,UAAd,CAAXwkB,EAAwC,EAExC9xB,EAAA,CAAQyqC,CAAR,CAAJ,CACE3Y,CADF,CACaA,CAAAjqB,OAAA,CAAgB4iC,CAAhB,CADb,CAGE3Y,CAAAjsB,KAAA,CAAc4kC,CAAd,CAGF7W,EAAAtmB,KAAA,CAAc,UAAd,CAA0BwkB,CAA1B,CATyF,CAAhE,CAUvBxuB,CAEJ8J,GAAAk4B,kBAAA,CAA4Bx4B,CAAA,CAAmBw4B,QAA0B,CAAC1R,CAAD,CAAW,CAClFmE,EAAA,CAAanE,CAAb;AAAuB,YAAvB,CADkF,CAAxD,CAExBtwB,CAEJ8J,GAAAmsB,eAAA,CAAyBzsB,CAAA,CAAmBysB,QAAuB,CAAC3F,CAAD,CAAWzmB,CAAX,CAAkBu9B,CAAlB,CAA4BC,CAA5B,CAAwC,CAEzG/W,CAAAtmB,KAAA,CADeo9B,CAAA5H,CAAY6H,CAAA,CAAa,yBAAb,CAAyC,eAArD7H,CAAwE,QACvF,CAAwB31B,CAAxB,CAFyG,CAAlF,CAGrB7J,CAEJ8J,GAAAorB,gBAAA,CAA0B1rB,CAAA,CAAmB0rB,QAAwB,CAAC5E,CAAD,CAAW8W,CAAX,CAAqB,CACxF3S,EAAA,CAAanE,CAAb,CAAuB8W,CAAA,CAAW,kBAAX,CAAgC,UAAvD,CADwF,CAAhE,CAEtBpnC,CAEJ8J,GAAAo0B,gBAAA,CAA0BoJ,QAAQ,CAACjZ,CAAD,CAAgBkZ,CAAhB,CAAyB,CACzD,IAAI3G,EAAU,EACVp3B,EAAJ,GACEo3B,CACA,CADU,GACV,EADiBvS,CACjB,EADkC,EAClC,EADwC,IACxC,CAAIkZ,CAAJ,GAAa3G,CAAb,EAAwB2G,CAAxB,CAAkC,GAAlC,CAFF,CAIA,OAAO9rC,EAAAyJ,SAAAsiC,cAAA,CAA8B5G,CAA9B,CANkD,CAS3D,OAAO92B,GApXiD,CAJ9C,CAtmB6C,CAkwF3Di7B,QAASA,GAAY,CAAC0C,CAAD,CAAWC,CAAX,CAAoB,CACvC,IAAA/C,cAAA,CAAqB8C,CACrB,KAAA/C,aAAA,CAAoBgD,CAFmB,CAczCtP,QAASA,GAAkB,CAAC1vB,CAAD,CAAO,CAChC,MAAOA,EAAA7C,QAAA,CACIkzB,EADJ,CACmB,EADnB,CAAAlzB,QAAA,CAEI8hC,EAFJ,CAE0B,QAAQ,CAAC3E,CAAD,CAAI/3B,CAAJ,CAAY0c,CAAZ,CAAoB,CACzD,MAAOA,EAAA,CAAS1c,CAAAoQ,YAAA,EAAT,CAAgCpQ,CADkB,CAFtD,CADyB,CAoElCu7B,QAASA,GAAe,CAACoB,CAAD,CAAOC,CAAP,CAAa,CAAA,IAC/BpV;AAAS,EADsB,CAE/BqV,EAAUF,CAAAlmC,MAAA,CAAW,KAAX,CAFqB,CAG/BqmC,EAAUF,CAAAnmC,MAAA,CAAW,KAAX,CAHqB,CAM1B9D,EAAI,CADb,EAAA,CACA,IAAA,CAAgBA,CAAhB,CAAoBkqC,CAAAjrC,OAApB,CAAoCe,CAAA,EAApC,CAAyC,CAEvC,IADA,IAAIoqC,EAAQF,CAAA,CAAQlqC,CAAR,CAAZ,CACSa,EAAI,CAAb,CAAgBA,CAAhB,CAAoBspC,CAAAlrC,OAApB,CAAoC4B,CAAA,EAApC,CACE,GAAIupC,CAAJ,GAAcD,CAAA,CAAQtpC,CAAR,CAAd,CAA0B,SAAS,CAErCg0B,EAAA,GAA2B,CAAhB,CAAAA,CAAA51B,OAAA,CAAoB,GAApB,CAA0B,EAArC,EAA2CmrC,CALJ,CAOzC,MAAOvV,EAb4B,CAgBrCqM,QAASA,GAAc,CAACmJ,CAAD,CAAU,CAC/BA,CAAA,CAAUrrC,CAAA,CAAOqrC,CAAP,CACV,KAAIrqC,EAAIqqC,CAAAprC,OAER,IAAS,CAAT,EAAIe,CAAJ,CACE,MAAOqqC,EAGT,KAAA,CAAOrqC,CAAA,EAAP,CAAA,CAAY,CACV,IAAIwD,EAAO6mC,CAAA,CAAQrqC,CAAR,CACX,EAvoSoB27B,CAuoSpB,GAAIn4B,CAAA4F,SAAJ,EACI5F,CAAA4F,SADJ,GACsBC,EADtB,EACkE,EADlE,GACwC7F,CAAAm2B,UAAAxa,KAAA,EADxC,GAEK7a,EAAA5E,KAAA,CAAY2qC,CAAZ,CAAqBrqC,CAArB,CAAwB,CAAxB,CAJK,CAOZ,MAAOqqC,EAfwB,CAsBjCrX,QAASA,GAAuB,CAAC/kB,CAAD,CAAaq8B,CAAb,CAAoB,CAClD,GAAIA,CAAJ,EAAavrC,CAAA,CAASurC,CAAT,CAAb,CAA8B,MAAOA,EACrC,IAAIvrC,CAAA,CAASkP,CAAT,CAAJ,CAA0B,CACxB,IAAIrI,EAAQ2kC,EAAAhsB,KAAA,CAAetQ,CAAf,CACZ,IAAIrI,CAAJ,CAAW,MAAOA,EAAA,CAAM,CAAN,CAFM,CAFwB,CAqBpDuT,QAASA,GAAmB,EAAG,CAC7B,IAAI6gB,EAAc,EAOlB,KAAAvR,IAAA,CAAW+hB,QAAQ,CAAC1/B,CAAD,CAAO,CACxB,MAAOkvB,EAAAv6B,eAAA,CAA2BqL,CAA3B,CADiB,CAY1B,KAAA2/B,SAAA,CAAgBC,QAAQ,CAAC5/B,CAAD,CAAO3F,CAAP,CAAoB,CAC1C8J,EAAA,CAAwBnE,CAAxB;AAA8B,YAA9B,CACI9M,EAAA,CAAS8M,CAAT,CAAJ,CACErJ,CAAA,CAAOu4B,CAAP,CAAoBlvB,CAApB,CADF,CAGEkvB,CAAA,CAAYlvB,CAAZ,CAHF,CAGsB3F,CALoB,CAS5C,KAAAwf,KAAA,CAAY,CAAC,WAAD,CAAc,QAAQ,CAACgE,CAAD,CAAY,CA0G5CgiB,QAASA,EAAa,CAAC3iB,CAAD,CAAS4iB,CAAT,CAAqBxS,CAArB,CAA+BttB,CAA/B,CAAqC,CACzD,GAAMkd,CAAAA,CAAN,EAAgB,CAAAhqB,CAAA,CAASgqB,CAAA+Z,OAAT,CAAhB,CACE,KAAMrjC,EAAA,CAAO,aAAP,CAAA,CAAsB,OAAtB,CAEJoM,CAFI,CAEE8/B,CAFF,CAAN,CAKF5iB,CAAA+Z,OAAA,CAAc6I,CAAd,CAAA,CAA4BxS,CAP6B,CA/E3D,MAAOlf,SAAoB,CAAC2xB,CAAD,CAAa7iB,CAAb,CAAqB8iB,CAArB,CAA4BR,CAA5B,CAAmC,CAAA,IAQxDlS,CARwD,CAQvCjzB,CARuC,CAQ1BylC,CAClCE,EAAA,CAAkB,CAAA,CAAlB,GAAQA,CACJR,EAAJ,EAAavrC,CAAA,CAASurC,CAAT,CAAb,GACEM,CADF,CACeN,CADf,CAIA,IAAIvrC,CAAA,CAAS8rC,CAAT,CAAJ,CAA0B,CACxBjlC,CAAA,CAAQilC,CAAAjlC,MAAA,CAAiB2kC,EAAjB,CACR,IAAK3kC,CAAAA,CAAL,CACE,KAAMmlC,GAAA,CAAkB,SAAlB,CAE8CF,CAF9C,CAAN,CAIF1lC,CAAA,CAAcS,CAAA,CAAM,CAAN,CACdglC,EAAA,CAAaA,CAAb,EAA2BhlC,CAAA,CAAM,CAAN,CAC3BilC,EAAA,CAAa7Q,CAAAv6B,eAAA,CAA2B0F,CAA3B,CAAA,CACP60B,CAAA,CAAY70B,CAAZ,CADO,CAEP+J,EAAA,CAAO8Y,CAAA+Z,OAAP,CAAsB58B,CAAtB,CAAmC,CAAA,CAAnC,CAEN,IAAK0lC,CAAAA,CAAL,CACE,KAAME,GAAA,CAAkB,SAAlB,CACuD5lC,CADvD,CAAN,CAIF4J,EAAA,CAAY87B,CAAZ,CAAwB1lC,CAAxB,CAAqC,CAAA,CAArC,CAlBwB,CAqB1B,GAAI2lC,CAAJ,CAmBE,MARIE,EAQG,CARmBplB,CAAC9mB,CAAA,CAAQ+rC,CAAR,CAAA,CACzBA,CAAA,CAAWA,CAAA5rC,OAAX,CAA+B,CAA/B,CADyB,CACW4rC,CADZjlB,WAQnB,CANPwS,CAMO,CANIl5B,MAAAiD,OAAA,CAAc6oC,CAAd,EAAqC,IAArC,CAMJ,CAJHJ,CAIG,EAHLD,CAAA,CAAc3iB,CAAd,CAAsB4iB,CAAtB,CAAkCxS,CAAlC,CAA4CjzB,CAA5C,EAA2D0lC,CAAA//B,KAA3D,CAGK,CAAArJ,CAAA,CAAOwpC,QAAwB,EAAG,CACvC,IAAIrkB,EAAS+B,CAAA5c,OAAA,CAAiB8+B,CAAjB,CAA6BzS,CAA7B,CAAuCpQ,CAAvC,CAA+C7iB,CAA/C,CACTyhB;CAAJ,GAAewR,CAAf,GAA4Bp6B,CAAA,CAAS4oB,CAAT,CAA5B,EAAgDpnB,CAAA,CAAWonB,CAAX,CAAhD,IACEwR,CACA,CADWxR,CACX,CAAIgkB,CAAJ,EAEED,CAAA,CAAc3iB,CAAd,CAAsB4iB,CAAtB,CAAkCxS,CAAlC,CAA4CjzB,CAA5C,EAA2D0lC,CAAA//B,KAA3D,CAJJ,CAOA,OAAOstB,EATgC,CAAlC,CAUJ,CACDA,SAAUA,CADT,CAEDwS,WAAYA,CAFX,CAVI,CAgBTxS,EAAA,CAAWzP,CAAApC,YAAA,CAAsBskB,CAAtB,CAAkC7iB,CAAlC,CAA0C7iB,CAA1C,CAEPylC,EAAJ,EACED,CAAA,CAAc3iB,CAAd,CAAsB4iB,CAAtB,CAAkCxS,CAAlC,CAA4CjzB,CAA5C,EAA2D0lC,CAAA//B,KAA3D,CAGF,OAAOstB,EA5EqD,CA3BlB,CAAlC,CA7BiB,CA6K/B/e,QAASA,GAAiB,EAAG,CAC3B,IAAAsL,KAAA,CAAY,CAAC,SAAD,CAAY,QAAQ,CAAC9mB,CAAD,CAAS,CACvC,MAAOmB,EAAA,CAAOnB,CAAAyJ,SAAP,CADgC,CAA7B,CADe,CAY7BiS,QAASA,GAA0B,EAAG,CACpC,IAAAoL,KAAA,CAAY,CAAC,WAAD,CAAc,YAAd,CAA4B,QAAQ,CAACvL,CAAD,CAAYkC,CAAZ,CAAwB,CAUtE4vB,QAASA,EAAc,EAAG,CACxBC,CAAA,CAASC,CAAAD,OADe,CAT1B,IAAIC,EAAMhyB,CAAA,CAAU,CAAV,CAAV,CACI+xB,EAASC,CAATD,EAAgBC,CAAAD,OAEpB/xB,EAAAtL,GAAA,CAAa,kBAAb,CAAiCo9B,CAAjC,CAEA5vB,EAAAkjB,IAAA,CAAe,UAAf,CAA2B,QAAQ,EAAG,CACpCplB,CAAA4U,IAAA,CAAc,kBAAd,CAAkCkd,CAAlC,CADoC,CAAtC,CAQA,OAAO,SAAQ,EAAG,CAChB,MAAOC,EADS,CAdoD,CAA5D,CADwB,CAiEtC1xB,QAASA,GAAyB,EAAG,CACnC,IAAAkL,KAAA,CAAY,CAAC,MAAD,CAAS,QAAQ,CAACzJ,CAAD,CAAO,CAClC,MAAO,SAAQ,CAACmwB,CAAD;AAAYC,CAAZ,CAAmB,CAChCpwB,CAAA7P,MAAAlE,MAAA,CAAiB+T,CAAjB,CAAuBvZ,SAAvB,CADgC,CADA,CAAxB,CADuB,CAyCrC4pC,QAASA,GAAc,CAACzW,CAAD,CAAI,CACzB,MAAI92B,EAAA,CAAS82B,CAAT,CAAJ,CACS9zB,EAAA,CAAO8zB,CAAP,CAAA,CAAYA,CAAA0W,YAAA,EAAZ,CAA8BjkC,EAAA,CAAOutB,CAAP,CADvC,CAGOA,CAJkB,CAS3Bva,QAASA,GAA4B,EAAG,CAiBtC,IAAAoK,KAAA,CAAYC,QAAQ,EAAG,CACrB,MAAO6mB,SAA0B,CAACC,CAAD,CAAS,CACxC,GAAKA,CAAAA,CAAL,CAAa,MAAO,EACpB,KAAI5hC,EAAQ,EACZjK,GAAA,CAAc6rC,CAAd,CAAsB,QAAQ,CAACvrC,CAAD,CAAQZ,CAAR,CAAa,CAC3B,IAAd,GAAIY,CAAJ,EAAsBwC,CAAA,CAAYxC,CAAZ,CAAtB,EAA4CX,CAAA,CAAWW,CAAX,CAA5C,GACIrB,CAAA,CAAQqB,CAAR,CAAJ,CACEf,CAAA,CAAQe,CAAR,CAAe,QAAQ,CAAC20B,CAAD,CAAI,CACzBhrB,CAAAnF,KAAA,CAAWqF,EAAA,CAAezK,CAAf,CAAX,CAAkC,GAAlC,CAAwCyK,EAAA,CAAeuhC,EAAA,CAAezW,CAAf,CAAf,CAAxC,CADyB,CAA3B,CADF,CAKEhrB,CAAAnF,KAAA,CAAWqF,EAAA,CAAezK,CAAf,CAAX,CAAiC,GAAjC,CAAuCyK,EAAA,CAAeuhC,EAAA,CAAeprC,CAAf,CAAf,CAAvC,CANF,CADyC,CAA3C,CAWA,OAAO2J,EAAAG,KAAA,CAAW,GAAX,CAdiC,CADrB,CAjBe,CAsCxCwQ,QAASA,GAAkC,EAAG,CA6C5C,IAAAkK,KAAA,CAAYC,QAAQ,EAAG,CACrB,MAAO+mB,SAAkC,CAACD,CAAD,CAAS,CAMhDE,QAASA,EAAS,CAACC,CAAD,CAAchhC,CAAd,CAAsBihC,CAAtB,CAAgC,CAC5ChtC,CAAA,CAAQ+sC,CAAR,CAAJ,CACEzsC,CAAA,CAAQysC,CAAR,CAAqB,QAAQ,CAAC1rC,CAAD,CAAQiE,CAAR,CAAe,CAC1CwnC,CAAA,CAAUzrC,CAAV,CAAiB0K,CAAjB,CAA0B,GAA1B,EAAiC7M,CAAA,CAASmC,CAAT,CAAA,CAAkBiE,CAAlB,CAA0B,EAA3D,EAAiE,GAAjE,CAD0C,CAA5C,CADF,CAIWpG,CAAA,CAAS6tC,CAAT,CAAJ,EAA8B,CAAA7qC,EAAA,CAAO6qC,CAAP,CAA9B,CACLhsC,EAAA,CAAcgsC,CAAd,CAA2B,QAAQ,CAAC1rC,CAAD,CAAQZ,CAAR,CAAa,CAC9CqsC,CAAA,CAAUzrC,CAAV,CAAiB0K,CAAjB,EACKihC,CAAA,CAAW,EAAX,CAAgB,GADrB,EAEIvsC,CAFJ,EAGKusC,CAAA,CAAW,EAAX,CAAgB,GAHrB,EAD8C,CAAhD,CADK;CAQDtsC,CAAA,CAAWqsC,CAAX,CAGJ,GAFEA,CAEF,CAFgBA,CAAA,EAEhB,EAAA/hC,CAAAnF,KAAA,CAAWqF,EAAA,CAAea,CAAf,CAAX,CAAoC,GAApC,EACoB,IAAf,EAAAghC,CAAA,CAAsB,EAAtB,CAA2B7hC,EAAA,CAAeuhC,EAAA,CAAeM,CAAf,CAAf,CADhC,EAXK,CALyC,CALlD,GAAKH,CAAAA,CAAL,CAAa,MAAO,EACpB,KAAI5hC,EAAQ,EACZ8hC,EAAA,CAAUF,CAAV,CAAkB,EAAlB,CAAsB,CAAA,CAAtB,CACA,OAAO5hC,EAAAG,KAAA,CAAW,GAAX,CAJyC,CAD7B,CA7CqB,CA4E9C8hC,QAASA,GAA4B,CAAC3/B,CAAD,CAAO4/B,CAAP,CAAgB,CACnD,GAAIjtC,CAAA,CAASqN,CAAT,CAAJ,CAAoB,CAElB,IAAI6/B,EAAW7/B,CAAAnE,QAAA,CAAaikC,EAAb,CAAqC,EAArC,CAAA/sB,KAAA,EAEf,IAAI8sB,CAAJ,CAAc,CACZ,IAAIE,EAAcH,CAAA,CAAQ,cAAR,CAAlB,CACII,EAAqBD,CAArBC,EAA+E,CAA/EA,GAAqCD,CAAA9nC,QAAA,CAAoBgoC,EAApB,CADzC,CAGI,CAAA,EAAAD,CAAA,CAAAA,CAAA,IAmBN,CAnBM,EAkBFE,CAlBE,CAAsBxqC,CAkBZ8D,MAAA,CAAU2mC,EAAV,CAlBV,GAmBcC,EAAA,CAAUF,CAAA,CAAU,CAAV,CAAV,CAAA/oC,KAAA,CAnBQzB,CAmBR,CAnBd,CAAJ,IAAI,CAAJ,CACE,GAAI,CACFsK,CAAA,CAAOzE,EAAA,CAASskC,CAAT,CADL,CAEF,MAAO3iC,CAAP,CAAU,CACV,GAAK8iC,CAAAA,CAAL,CACE,MAAOhgC,EAET,MAAMqgC,GAAA,CAAY,SAAZ,CACgBrgC,CADhB,CACsB9C,CADtB,CAAN,CAJU,CAPF,CAJI,CAsBpB,MAAO8C,EAvB4C,CAqCrDsgC,QAASA,GAAY,CAACV,CAAD,CAAU,CAAA,IACzB3sB,EAAS5Y,CAAA,EADgB,CACHzG,CAQtBjB,EAAA,CAASitC,CAAT,CAAJ,CACE5sC,CAAA,CAAQ4sC,CAAAloC,MAAA,CAAc,IAAd,CAAR,CAA6B,QAAQ,CAAC6oC,CAAD,CAAO,CAC1C3sC,CAAA,CAAI2sC,CAAAtoC,QAAA,CAAa,GAAb,CACS,KAAA,EAAAJ,CAAA,CAAUkb,CAAA,CAAKwtB,CAAAnf,OAAA,CAAY,CAAZ,CAAextB,CAAf,CAAL,CAAV,CAAoC,EAAA,CAAAmf,CAAA,CAAKwtB,CAAAnf,OAAA,CAAYxtB,CAAZ,CAAgB,CAAhB,CAAL,CAR/CT,EAAJ,GACE8f,CAAA,CAAO9f,CAAP,CADF,CACgB8f,CAAA,CAAO9f,CAAP,CAAA,CAAc8f,CAAA,CAAO9f,CAAP,CAAd,CAA4B,IAA5B,CAAmC8H,CAAnC,CAAyCA,CADzD,CAM4C,CAA5C,CADF,CAKWrJ,CAAA,CAASguC,CAAT,CALX;AAME5sC,CAAA,CAAQ4sC,CAAR,CAAiB,QAAQ,CAACY,CAAD,CAAYC,CAAZ,CAAuB,CACjC,IAAA,EAAA5oC,CAAA,CAAU4oC,CAAV,CAAA,CAAsB,EAAA1tB,CAAA,CAAKytB,CAAL,CAZjCrtC,EAAJ,GACE8f,CAAA,CAAO9f,CAAP,CADF,CACgB8f,CAAA,CAAO9f,CAAP,CAAA,CAAc8f,CAAA,CAAO9f,CAAP,CAAd,CAA4B,IAA5B,CAAmC8H,CAAnC,CAAyCA,CADzD,CAWgD,CAAhD,CAKF,OAAOgY,EApBsB,CAoC/BytB,QAASA,GAAa,CAACd,CAAD,CAAU,CAC9B,IAAIe,CAEJ,OAAO,SAAQ,CAACjiC,CAAD,CAAO,CACfiiC,CAAL,GAAiBA,CAAjB,CAA+BL,EAAA,CAAaV,CAAb,CAA/B,CAEA,OAAIlhC,EAAJ,EACM3K,CAIGA,CAJK4sC,CAAA,CAAW9oC,CAAA,CAAU6G,CAAV,CAAX,CAIL3K,CAHO+E,IAAAA,EAGP/E,GAHHA,CAGGA,GAFLA,CAEKA,CAFG,IAEHA,EAAAA,CALT,EAQO4sC,CAXa,CAHQ,CA8BhCC,QAASA,GAAa,CAAC5gC,CAAD,CAAO4/B,CAAP,CAAgBiB,CAAhB,CAAwBC,CAAxB,CAA6B,CACjD,GAAI1tC,CAAA,CAAW0tC,CAAX,CAAJ,CACE,MAAOA,EAAA,CAAI9gC,CAAJ,CAAU4/B,CAAV,CAAmBiB,CAAnB,CAGT7tC,EAAA,CAAQ8tC,CAAR,CAAa,QAAQ,CAAClmC,CAAD,CAAK,CACxBoF,CAAA,CAAOpF,CAAA,CAAGoF,CAAH,CAAS4/B,CAAT,CAAkBiB,CAAlB,CADiB,CAA1B,CAIA,OAAO7gC,EAT0C,CA0BnDiO,QAASA,GAAa,EAAG,CAsDvB,IAAI8yB,EAAW,IAAAA,SAAXA,CAA2B,CAE7BC,kBAAmB,CAACrB,EAAD,CAFU,CAK7BsB,iBAAkB,CAAC,QAAQ,CAACC,CAAD,CAAI,CAC7B,MAAOtvC,EAAA,CAASsvC,CAAT,CAAA,EA7mWmB,eA6mWnB,GA7mWJ5qC,EAAAhD,KAAA,CA6mW2B4tC,CA7mW3B,CA6mWI,EAnmWmB,eAmmWnB,GAnmWJ5qC,EAAAhD,KAAA,CAmmWyC4tC,CAnmWzC,CAmmWI,EAxmWmB,mBAwmWnB,GAxmWJ5qC,EAAAhD,KAAA,CAwmW2D4tC,CAxmW3D,CAwmWI,CAA4D/lC,EAAA,CAAO+lC,CAAP,CAA5D,CAAwEA,CADlD,CAAb,CALW,CAU7BtB,QAAS,CACPuB,OAAQ,CACN,OAAU,mCADJ,CADD;AAIPtQ,KAAQprB,EAAA,CAAY27B,EAAZ,CAJD,CAKPxd,IAAQne,EAAA,CAAY27B,EAAZ,CALD,CAMPC,MAAQ57B,EAAA,CAAY27B,EAAZ,CAND,CAVoB,CAmB7BE,eAAgB,YAnBa,CAoB7BC,eAAgB,cApBa,CAsB7BC,gBAAiB,sBAtBY,CAwB7BC,mBAAoB,UAxBS,CAA/B,CA2BIC,EAAgB,CAAA,CAoBpB,KAAAA,cAAA,CAAqBC,QAAQ,CAAC5tC,CAAD,CAAQ,CACnC,MAAIlC,EAAA,CAAUkC,CAAV,CAAJ,EACE2tC,CACO,CADS,CAAE3tC,CAAAA,CACX,CAAA,IAFT,EAIO2tC,CAL4B,CAqBrC,KAAIE,EAAuB,IAAAC,aAAvBD,CAA2C,EAA/C,CA0CIE,EAAyB,IAAAA,uBAAzBA,CAAuD,EAE3D,KAAAvpB,KAAA,CAAY,CAAC,UAAD,CAAa,cAAb,CAA6B,gBAA7B,CAA+C,eAA/C,CAAgE,YAAhE,CAA8E,IAA9E,CAAoF,WAApF,CAAiG,MAAjG,CACR,QAAQ,CAAC7L,CAAD,CAAW4B,CAAX,CAAyB0C,CAAzB,CAAyCpE,CAAzC,CAAwDsC,CAAxD,CAAoEE,CAApE,CAAwEmN,CAAxE,CAAmF/M,CAAnF,CAAyF,CA0lBnGxB,QAASA,EAAK,CAAC+zB,CAAD,CAAgB,CA+C5BC,QAASA,EAAiB,CAACC,CAAD,CAAUJ,CAAV,CAAwB,CAChD,IADgD,IACvCjuC,EAAI,CADmC,CAChCY,EAAKqtC,CAAAhvC,OAArB,CAA0Ce,CAA1C,CAA8CY,CAA9C,CAAA,CAAmD,CACjD,IAAI0tC,EAASL,CAAA,CAAajuC,CAAA,EAAb,CAAb,CACIuuC,EAAWN,CAAA,CAAajuC,CAAA,EAAb,CAEfquC;CAAA,CAAUA,CAAAtL,KAAA,CAAauL,CAAb,CAAqBC,CAArB,CAJuC,CAOnDN,CAAAhvC,OAAA,CAAsB,CAEtB,OAAOovC,EAVyC,CAiBlDG,QAASA,EAAgB,CAACxC,CAAD,CAAUjuC,CAAV,CAAkB,CAAA,IACrC0wC,CADqC,CACtBC,EAAmB,EAEtCtvC,EAAA,CAAQ4sC,CAAR,CAAiB,QAAQ,CAAC2C,CAAD,CAAWC,CAAX,CAAmB,CACtCpvC,CAAA,CAAWmvC,CAAX,CAAJ,EACEF,CACA,CADgBE,CAAA,CAAS5wC,CAAT,CAChB,CAAqB,IAArB,EAAI0wC,CAAJ,GACEC,CAAA,CAAiBE,CAAjB,CADF,CAC6BH,CAD7B,CAFF,EAMEC,CAAA,CAAiBE,CAAjB,CANF,CAM6BD,CAPa,CAA5C,CAWA,OAAOD,EAdkC,CA+D3CtB,QAASA,EAAiB,CAACyB,CAAD,CAAW,CAEnC,IAAIC,EAAOrtC,CAAA,CAAO,EAAP,CAAWotC,CAAX,CACXC,EAAA1iC,KAAA,CAAY4gC,EAAA,CAAc6B,CAAAziC,KAAd,CAA6ByiC,CAAA7C,QAA7B,CAA+C6C,CAAA5B,OAA/C,CACclvC,CAAAqvC,kBADd,CAEMH,EAAAA,CAAA4B,CAAA5B,OAAlB,OAj5BC,IAi5BM,EAj5BCA,CAi5BD,EAj5BoB,GAi5BpB,CAj5BWA,CAi5BX,CACH6B,CADG,CAEHtzB,CAAAuzB,OAAA,CAAUD,CAAV,CAP+B,CA7HrC,GAAK,CAAA9wC,CAAA,CAASmwC,CAAT,CAAL,CACE,KAAMzvC,EAAA,CAAO,OAAP,CAAA,CAAgB,QAAhB,CAA0FyvC,CAA1F,CAAN,CAGF,GAAK,CAAApvC,CAAA,CAAS6c,CAAA1a,QAAA,CAAaitC,CAAAjiB,IAAb,CAAT,CAAL,CACE,KAAMxtB,EAAA,CAAO,OAAP,CAAA,CAAgB,QAAhB,CAAsHyvC,CAAAjiB,IAAtH,CAAN,CAGF,IAAInuB,EAAS0D,CAAA,CAAO,CAClB6O,OAAQ,KADU,CAElB+8B,iBAAkBF,CAAAE,iBAFA,CAGlBD,kBAAmBD,CAAAC,kBAHD,CAIlBQ,gBAAiBT,CAAAS,gBAJC,CAKlBC,mBAAoBV,CAAAU,mBALF,CAAP;AAMVM,CANU,CAQbpwC,EAAAiuC,QAAA,CA+DAgD,QAAqB,CAACjxC,CAAD,CAAS,CAAA,IACxBkxC,EAAa9B,CAAAnB,QADW,CAExBkD,EAAaztC,CAAA,CAAO,EAAP,CAAW1D,CAAAiuC,QAAX,CAFW,CAGxBmD,CAHwB,CAGTC,CAHS,CAGeC,CAHf,CAK5BJ,EAAaxtC,CAAA,CAAO,EAAP,CAAWwtC,CAAA1B,OAAX,CAA8B0B,CAAA,CAAWhrC,CAAA,CAAUlG,CAAAuS,OAAV,CAAX,CAA9B,CAGb,EAAA,CACA,IAAK6+B,CAAL,GAAsBF,EAAtB,CAAkC,CAChCG,CAAA,CAAyBnrC,CAAA,CAAUkrC,CAAV,CAEzB,KAAKE,CAAL,GAAsBH,EAAtB,CACE,GAAIjrC,CAAA,CAAUorC,CAAV,CAAJ,GAAiCD,CAAjC,CACE,SAAS,CAIbF,EAAA,CAAWC,CAAX,CAAA,CAA4BF,CAAA,CAAWE,CAAX,CATI,CAalC,MAAOX,EAAA,CAAiBU,CAAjB,CAA6Br9B,EAAA,CAAY9T,CAAZ,CAA7B,CAtBqB,CA/Db,CAAaowC,CAAb,CACjBpwC,EAAAuS,OAAA,CAAgB8B,EAAA,CAAUrU,CAAAuS,OAAV,CAChBvS,EAAA6vC,gBAAA,CAAyB7uC,CAAA,CAAShB,CAAA6vC,gBAAT,CAAA,CACrBjlB,CAAA1b,IAAA,CAAclP,CAAA6vC,gBAAd,CADqB,CACmB7vC,CAAA6vC,gBAE5C90B,EAAA8T,6BAAA,CAAsC,OAAtC,CAEA,KAAI0iB,EAAsB,EAA1B,CACIC,EAAuB,EACvBlB,EAAAA,CAAU7yB,CAAAg0B,QAAA,CAAWzxC,CAAX,CAGdqB,EAAA,CAAQqwC,CAAR,CAA8B,QAAQ,CAACC,CAAD,CAAc,CAClD,CAAIA,CAAAC,QAAJ,EAA2BD,CAAAE,aAA3B,GACEN,CAAA5jC,QAAA,CAA4BgkC,CAAAC,QAA5B,CAAiDD,CAAAE,aAAjD,CAEF,EAAIF,CAAAb,SAAJ,EAA4Ba,CAAAG,cAA5B,GACEN,CAAA5qC,KAAA,CAA0B+qC,CAAAb,SAA1B,CAAgDa,CAAAG,cAAhD,CALgD,CAApD,CASAxB;CAAA,CAAUD,CAAA,CAAkBC,CAAlB,CAA2BiB,CAA3B,CACVjB,EAAA,CAAUA,CAAAtL,KAAA,CAkEV+M,QAAsB,CAAC/xC,CAAD,CAAS,CAC7B,IAAIiuC,EAAUjuC,CAAAiuC,QAAd,CACI+D,EAAU/C,EAAA,CAAcjvC,CAAAqO,KAAd,CAA2B0gC,EAAA,CAAcd,CAAd,CAA3B,CAAmD9mC,IAAAA,EAAnD,CAA8DnH,CAAAsvC,iBAA9D,CAGV1qC,EAAA,CAAYotC,CAAZ,CAAJ,EACE3wC,CAAA,CAAQ4sC,CAAR,CAAiB,QAAQ,CAAC7rC,CAAD,CAAQyuC,CAAR,CAAgB,CACb,cAA1B,GAAI3qC,CAAA,CAAU2qC,CAAV,CAAJ,EACE,OAAO5C,CAAA,CAAQ4C,CAAR,CAF8B,CAAzC,CAOEjsC,EAAA,CAAY5E,CAAAiyC,gBAAZ,CAAJ,EAA4C,CAAArtC,CAAA,CAAYwqC,CAAA6C,gBAAZ,CAA5C,GACEjyC,CAAAiyC,gBADF,CAC2B7C,CAAA6C,gBAD3B,CAKA,OAAOC,EAAA,CAAQlyC,CAAR,CAAgBgyC,CAAhB,CAAAhN,KAAA,CAA8BqK,CAA9B,CAAiDA,CAAjD,CAlBsB,CAlErB,CACViB,EAAA,CAAUD,CAAA,CAAkBC,CAAlB,CAA2BkB,CAA3B,CAGV,OAFAlB,EAEA,CAFUA,CAAA6B,QAAA,CAkBVC,QAAmC,EAAG,CACpCr3B,CAAA4T,6BAAA,CAAsCtqB,CAAtC,CAA4C,OAA5C,CADoC,CAlB5B,CA1CkB,CA4T9B6tC,QAASA,EAAO,CAAClyC,CAAD,CAASgyC,CAAT,CAAkB,CA2EhCK,QAASA,EAAmB,CAACC,CAAD,CAAgB,CAC1C,GAAIA,CAAJ,CAAmB,CACjB,IAAIC,EAAgB,EACpBlxC,EAAA,CAAQixC,CAAR,CAAuB,QAAQ,CAACjtB,CAAD,CAAe7jB,CAAf,CAAoB,CACjD+wC,CAAA,CAAc/wC,CAAd,CAAA,CAAqB,QAAQ,CAAC8jB,CAAD,CAAQ,CASnCktB,QAASA,EAAgB,EAAG,CAC1BntB,CAAA,CAAaC,CAAb,CAD0B,CARxByqB,CAAJ,CACExyB,CAAAk1B,YAAA,CAAuBD,CAAvB,CADF,CAEWj1B,CAAAm1B,QAAJ,CACLF,CAAA,EADK,CAGLj1B,CAAAnP,OAAA,CAAkBokC,CAAlB,CANiC,CADY,CAAnD,CAeA,OAAOD,EAjBU,CADuB,CA6B5CI,QAASA,EAAI,CAACzD,CAAD;AAAS4B,CAAT,CAAmB8B,CAAnB,CAAkCC,CAAlC,CAA8CC,CAA9C,CAAyD,CAUpEC,QAASA,EAAkB,EAAG,CAC5BC,CAAA,CAAelC,CAAf,CAAyB5B,CAAzB,CAAiC0D,CAAjC,CAAgDC,CAAhD,CAA4DC,CAA5D,CAD4B,CAT1BrpB,CAAJ,GAlrCC,GAmrCC,EAAcylB,CAAd,EAnrCyB,GAmrCzB,CAAcA,CAAd,CACEzlB,CAAAwI,IAAA,CAAU9D,CAAV,CAAe,CAAC+gB,CAAD,CAAS4B,CAAT,CAAmBnC,EAAA,CAAaiE,CAAb,CAAnB,CAAgDC,CAAhD,CAA4DC,CAA5D,CAAf,CADF,CAIErpB,CAAA0I,OAAA,CAAahE,CAAb,CALJ,CAaI4hB,EAAJ,CACExyB,CAAAk1B,YAAA,CAAuBM,CAAvB,CADF,EAGEA,CAAA,EACA,CAAKx1B,CAAAm1B,QAAL,EAAyBn1B,CAAAnP,OAAA,EAJ3B,CAdoE,CA0BtE4kC,QAASA,EAAc,CAAClC,CAAD,CAAW5B,CAAX,CAAmBjB,CAAnB,CAA4B4E,CAA5B,CAAwCC,CAAxC,CAAmD,CAExE5D,CAAA,CAAoB,EAAX,EAAAA,CAAA,CAAeA,CAAf,CAAwB,CAEjC,EA/sCC,GA+sCA,EAAUA,CAAV,EA/sC0B,GA+sC1B,CAAUA,CAAV,CAAoB+D,CAAAxB,QAApB,CAAuCwB,CAAAjC,OAAxC,EAAyD,CACvD3iC,KAAMyiC,CADiD,CAEvD5B,OAAQA,CAF+C,CAGvDjB,QAASc,EAAA,CAAcd,CAAd,CAH8C,CAIvDjuC,OAAQA,CAJ+C,CAKvD6yC,WAAYA,CAL2C,CAMvDC,UAAWA,CAN4C,CAAzD,CAJwE,CAc1EI,QAASA,EAAwB,CAACrqB,CAAD,CAAS,CACxCmqB,CAAA,CAAenqB,CAAAxa,KAAf,CAA4Bwa,CAAAqmB,OAA5B,CAA2Cp7B,EAAA,CAAY+U,CAAAolB,QAAA,EAAZ,CAA3C,CAA0EplB,CAAAgqB,WAA1E,CAA6FhqB,CAAAiqB,UAA7F,CADwC,CAI1CK,QAASA,EAAgB,EAAG,CAC1B,IAAIpY,EAAM1e,CAAA+2B,gBAAA9sC,QAAA,CAA8BtG,CAA9B,CACG,GAAb,GAAI+6B,CAAJ,EAAgB1e,CAAA+2B,gBAAA7sC,OAAA,CAA6Bw0B,CAA7B,CAAkC,CAAlC,CAFU,CApJI,IAC5BkY,EAAWx1B,CAAA4S,MAAA,EADiB,CAE5BigB,EAAU2C,CAAA3C,QAFkB,CAG5B7mB,CAH4B,CAI5B4pB,CAJ4B,CAK5BlC,GAAanxC,CAAAiuC,QALe,CAM5BqF,EAAuC,OAAvCA,GAAUptC,CAAA,CAAUlG,CAAAuS,OAAV,CANkB;AAO5B4b,EAAMnuB,CAAAmuB,IAENmlB,EAAJ,CAGEnlB,CAHF,CAGQtQ,CAAA01B,sBAAA,CAA2BplB,CAA3B,CAHR,CAIYntB,CAAA,CAASmtB,CAAT,CAJZ,GAMEA,CANF,CAMQtQ,CAAA1a,QAAA,CAAagrB,CAAb,CANR,CASAA,EAAA,CAAMqlB,CAAA,CAASrlB,CAAT,CAAcnuB,CAAA6vC,gBAAA,CAAuB7vC,CAAA2tC,OAAvB,CAAd,CAEF2F,EAAJ,GAEEnlB,CAFF,CAEQslB,CAAA,CAA2BtlB,CAA3B,CAAgCnuB,CAAA8vC,mBAAhC,CAFR,CAKAzzB,EAAA+2B,gBAAAxsC,KAAA,CAA2B5G,CAA3B,CACAswC,EAAAtL,KAAA,CAAamO,CAAb,CAA+BA,CAA/B,CAEK1pB,EAAAzpB,CAAAypB,MAAL,EAAqBA,CAAA2lB,CAAA3lB,MAArB,EAAyD,CAAA,CAAzD,GAAwCzpB,CAAAypB,MAAxC,EACuB,KADvB,GACKzpB,CAAAuS,OADL,EACkD,OADlD,GACgCvS,CAAAuS,OADhC,GAEEkX,CAFF,CAEUxpB,CAAA,CAASD,CAAAypB,MAAT,CAAA,CAAyBzpB,CAAAypB,MAAzB,CACFxpB,CAAA,CAA2BmvC,CAAD3lB,MAA1B,CAAA,CACoB2lB,CAAD3lB,MADnB,CAEEiqB,CALV,CAQIjqB,EAAJ,GACE4pB,CACA,CADa5pB,CAAAva,IAAA,CAAUif,CAAV,CACb,CAAIjuB,CAAA,CAAUmzC,CAAV,CAAJ,CACoBA,CAAlB,EAjoYM5xC,CAAA,CAioYY4xC,CAjoYDrO,KAAX,CAioYN,CAEEqO,CAAArO,KAAA,CAAgBkO,CAAhB,CAA0CA,CAA1C,CAFF,CAKMnyC,CAAA,CAAQsyC,CAAR,CAAJ,CACEL,CAAA,CAAeK,CAAA,CAAW,CAAX,CAAf,CAA8BA,CAAA,CAAW,CAAX,CAA9B,CAA6Cv/B,EAAA,CAAYu/B,CAAA,CAAW,CAAX,CAAZ,CAA7C,CAAyEA,CAAA,CAAW,CAAX,CAAzE,CAAwFA,CAAA,CAAW,CAAX,CAAxF,CADF,CAGEL,CAAA,CAAeK,CAAf,CAA2B,GAA3B,CAAgC,EAAhC,CAAoC,IAApC,CAA0C,UAA1C,CATN,CAcE5pB,CAAAwI,IAAA,CAAU9D,CAAV,CAAemiB,CAAf,CAhBJ,CAuBI1rC,EAAA,CAAYyuC,CAAZ,CAAJ,GAQE,CAPIM,CAOJ,CAPgBC,EAAA,CAAmB5zC,CAAAmuB,IAAnB,CAAA,CACV9O,CAAA,EAAA,CAAiBrf,CAAA2vC,eAAjB,EAA0CP,CAAAO,eAA1C,CADU,CAEVxoC,IAAAA,EAKN,IAHEgqC,EAAA,CAAYnxC,CAAA4vC,eAAZ,EAAqCR,CAAAQ,eAArC,CAGF;AAHmE+D,CAGnE,EAAAh3B,CAAA,CAAa3c,CAAAuS,OAAb,CAA4B4b,CAA5B,CAAiC6jB,CAAjC,CAA0CW,CAA1C,CAAgDxB,EAAhD,CAA4DnxC,CAAA6zC,QAA5D,CACI7zC,CAAAiyC,gBADJ,CAC4BjyC,CAAA8zC,aAD5B,CAEIzB,CAAA,CAAoBryC,CAAAsyC,cAApB,CAFJ,CAGID,CAAA,CAAoBryC,CAAA+zC,oBAApB,CAHJ,CARF,CAcA,OAAOzD,EAzEyB,CA2JlCkD,QAASA,EAAQ,CAACrlB,CAAD,CAAM6lB,CAAN,CAAwB,CACT,CAA9B,CAAIA,CAAA9yC,OAAJ,GACEitB,CADF,GACiC,EAAvB,GAACA,CAAA7nB,QAAA,CAAY,GAAZ,CAAD,CAA4B,GAA5B,CAAkC,GAD5C,EACmD0tC,CADnD,CAGA,OAAO7lB,EAJgC,CAOzCslB,QAASA,EAA0B,CAACtlB,CAAD,CAAM8lB,CAAN,CAAa,CAC9C,IAAIloC,EAAQoiB,CAAApoB,MAAA,CAAU,GAAV,CACZ,IAAmB,CAAnB,CAAIgG,CAAA7K,OAAJ,CAEE,KAAMwtC,GAAA,CAAY,UAAZ,CAAwEvgB,CAAxE,CAAN,CAEEwf,CAAAA,CAASjiC,EAAA,CAAcK,CAAA,CAAM,CAAN,CAAd,CACb1K,EAAA,CAAQssC,CAAR,CAAgB,QAAQ,CAACvrC,CAAD,CAAQZ,CAAR,CAAa,CACnC,GAAc,eAAd,GAAIY,CAAJ,CAEE,KAAMssC,GAAA,CAAY,UAAZ,CAAsEvgB,CAAtE,CAAN,CAEF,GAAI3sB,CAAJ,GAAYyyC,CAAZ,CAEE,KAAMvF,GAAA,CAAY,UAAZ,CAA+EuF,CAA/E,CAAsF9lB,CAAtF,CAAN,CAPiC,CAArC,CAcA,OAFAA,EAEA,GAF+B,EAAvB,GAACA,CAAA7nB,QAAA,CAAY,GAAZ,CAAD,CAA4B,GAA5B,CAAkC,GAE1C,EAFiD2tC,CAEjD,CAFyD,gBAnBX,CAtjChD,IAAIP,EAAez4B,CAAA,CAAc,OAAd,CAKnBm0B,EAAAS,gBAAA,CAA2B7uC,CAAA,CAASouC,CAAAS,gBAAT,CAAA,CACzBjlB,CAAA1b,IAAA,CAAckgC,CAAAS,gBAAd,CADyB;AACiBT,CAAAS,gBAO5C,KAAI6B,EAAuB,EAE3BrwC,EAAA,CAAQ4uC,CAAR,CAA8B,QAAQ,CAACiE,CAAD,CAAqB,CACzDxC,CAAA/jC,QAAA,CAA6B3M,CAAA,CAASkzC,CAAT,CAAA,CACvBtpB,CAAA1b,IAAA,CAAcglC,CAAd,CADuB,CACatpB,CAAA5c,OAAA,CAAiBkmC,CAAjB,CAD1C,CADyD,CAA3D,CAQA,KAAIN,GAAqBO,EAAA,CAA0BhE,CAA1B,CA2sBzB9zB,EAAA+2B,gBAAA,CAAwB,EAmJxBgB,UAA2B,CAACnwB,CAAD,CAAQ,CACjC5iB,CAAA,CAAQuC,SAAR,CAAmB,QAAQ,CAACmJ,CAAD,CAAO,CAChCsP,CAAA,CAAMtP,CAAN,CAAA,CAAc,QAAQ,CAACohB,CAAD,CAAMnuB,CAAN,CAAc,CAClC,MAAOqc,EAAA,CAAM3Y,CAAA,CAAO,EAAP,CAAW1D,CAAX,EAAqB,EAArB,CAAyB,CACpCuS,OAAQxF,CAD4B,CAEpCohB,IAAKA,CAF+B,CAAzB,CAAN,CAD2B,CADJ,CAAlC,CADiC,CAAnCimB,CA7DA,CAAmB,KAAnB,CAA0B,QAA1B,CAAoC,MAApC,CAA4C,OAA5C,CAyEAC,UAAmC,CAACtnC,CAAD,CAAO,CACxC1L,CAAA,CAAQuC,SAAR,CAAmB,QAAQ,CAACmJ,CAAD,CAAO,CAChCsP,CAAA,CAAMtP,CAAN,CAAA,CAAc,QAAQ,CAACohB,CAAD,CAAM9f,CAAN,CAAYrO,CAAZ,CAAoB,CACxC,MAAOqc,EAAA,CAAM3Y,CAAA,CAAO,EAAP,CAAW1D,CAAX,EAAqB,EAArB,CAAyB,CACpCuS,OAAQxF,CAD4B,CAEpCohB,IAAKA,CAF+B,CAGpC9f,KAAMA,CAH8B,CAAzB,CAAN,CADiC,CADV,CAAlC,CADwC,CAA1CgmC,CA9BA,CAA2B,MAA3B,CAAmC,KAAnC,CAA0C,OAA1C,CAYAh4B,EAAA+yB,SAAA,CAAiBA,CAGjB,OAAO/yB,EAp3B4F,CADzF,CAtKW,CA+wCzBS,QAASA,GAAmB,EAAG,CAC7B,IAAA8J,KAAA,CAAYC,QAAQ,EAAG,CACrB,MAAOytB,SAAkB,EAAG,CAC1B,MAAO,KAAIx0C,CAAAy0C,eADe,CADP,CADM,CA0B/B33B,QAASA,GAAoB,EAAG,CAC9B,IAAAgK,KAAA;AAAY,CAAC,UAAD,CAAa,iBAAb,CAAgC,WAAhC,CAA6C,aAA7C,CAA4D,QAAQ,CAAC7L,CAAD,CAAWgC,CAAX,CAA4B1B,CAA5B,CAAuCwB,CAAvC,CAAoD,CAClI,MAAO23B,GAAA,CAAkBz5B,CAAlB,CAA4B8B,CAA5B,CAAyC9B,CAAAsV,MAAzC,CAAyDtT,CAAzD,CAA0E1B,CAAA,CAAU,CAAV,CAA1E,CAD2H,CAAxH,CADkB,CAMhCm5B,QAASA,GAAiB,CAACz5B,CAAD,CAAWu5B,CAAX,CAAsBG,CAAtB,CAAqCC,CAArC,CAAgDC,CAAhD,CAA6D,CA6IrFC,QAASA,EAAQ,CAACzmB,CAAD,CAAM0mB,CAAN,CAAoBlC,CAApB,CAA0B,CACzCxkB,CAAA,CAAMA,CAAAjkB,QAAA,CAAY,eAAZ,CAA6B2qC,CAA7B,CADmC,KAKrC5/B,EAAS0/B,CAAAr0B,cAAA,CAA0B,QAA1B,CAL4B,CAKSwP,EAAW,IAC7D7a,EAAAlN,KAAA,CAAc,iBACdkN,EAAAjS,IAAA,CAAamrB,CACblZ,EAAA6/B,MAAA,CAAe,CAAA,CAEfhlB,EAAA,CAAWA,QAAQ,CAACxK,CAAD,CAAQ,CACzBrQ,CAAAyN,oBAAA,CAA2B,MAA3B,CAAmCoN,CAAnC,CACA7a,EAAAyN,oBAAA,CAA2B,OAA3B,CAAoCoN,CAApC,CACA6kB,EAAAI,KAAAzwB,YAAA,CAA6BrP,CAA7B,CACAA,EAAA,CAAS,IACT,KAAIi6B,EAAU,EAAd,CACInJ,EAAO,SAEPzgB,EAAJ,GACqB,MAInB,GAJIA,CAAAvd,KAIJ,EAJ8B2sC,CAAAM,UAAA,CAAoBH,CAApB,CAI9B,GAHEvvB,CAGF,CAHU,CAAEvd,KAAM,OAAR,CAGV,EADAg+B,CACA,CADOzgB,CAAAvd,KACP,CAAAmnC,CAAA,CAAwB,OAAf,GAAA5pB,CAAAvd,KAAA,CAAyB,GAAzB,CAA+B,GAL1C,CAQI4qC,EAAJ,EACEA,CAAA,CAAKzD,CAAL,CAAanJ,CAAb,CAjBuB,CAqB3B9wB,EAAA8P,iBAAA,CAAwB,MAAxB;AAAgC+K,CAAhC,CACA7a,EAAA8P,iBAAA,CAAwB,OAAxB,CAAiC+K,CAAjC,CACA6kB,EAAAI,KAAA10B,YAAA,CAA6BpL,CAA7B,CACA,OAAO6a,EAlCkC,CA3I3C,MAAO,SAAQ,CAACvd,CAAD,CAAS4b,CAAT,CAAc+Q,CAAd,CAAoBpP,CAApB,CAA8Bme,CAA9B,CAAuC4F,CAAvC,CAAgD5B,CAAhD,CAAiE6B,CAAjE,CAA+ExB,CAA/E,CAA8FyB,CAA9F,CAAmH,CAsHhIkB,QAASA,EAAc,CAAClkC,CAAD,CAAS,CAC9BmkC,CAAA,CAA8B,SAA9B,GAAmBnkC,CACfokC,GAAJ,EACEA,EAAA,EAEEC,EAAJ,EACEA,CAAAC,MAAA,EAN4B,CAUhCC,QAASA,EAAe,CAACxlB,CAAD,CAAWof,CAAX,CAAmB4B,CAAnB,CAA6B8B,CAA7B,CAA4CC,CAA5C,CAAwDC,CAAxD,CAAmE,CAErF5yC,CAAA,CAAUuwB,CAAV,CAAJ,EACEgkB,CAAA9jB,OAAA,CAAqBF,CAArB,CAEF0kB,GAAA,CAAYC,CAAZ,CAAkB,IAElBtlB,EAAA,CAASof,CAAT,CAAiB4B,CAAjB,CAA2B8B,CAA3B,CAA0CC,CAA1C,CAAsDC,CAAtD,CAPyF,CA/H3F3kB,CAAA,CAAMA,CAAN,EAAapT,CAAAoT,IAAA,EAEb,IAA0B,OAA1B,GAAIjoB,CAAA,CAAUqM,CAAV,CAAJ,CACE,IAAIsiC,EAAeH,CAAAa,eAAA,CAAyBpnB,CAAzB,CAAnB,CACIgnB,GAAYP,CAAA,CAASzmB,CAAT,CAAc0mB,CAAd,CAA4B,QAAQ,CAAC3F,CAAD,CAASnJ,CAAT,CAAe,CAEjE,IAAI+K,EAAuB,GAAvBA,GAAY5B,CAAZ4B,EAA+B4D,CAAAc,YAAA,CAAsBX,CAAtB,CACnCS,EAAA,CAAgBxlB,CAAhB,CAA0Bof,CAA1B,CAAkC4B,CAAlC,CAA4C,EAA5C,CAAgD/K,CAAhD,CAAsD,UAAtD,CACA2O,EAAAe,eAAA,CAAyBZ,CAAzB,CAJiE,CAAnD,CAFlB,KAQO,CAEL,IAAIO,EAAMd,CAAA,CAAU/hC,CAAV,CAAkB4b,CAAlB,CAAV,CACI+mB,EAAmB,CAAA,CAEvBE,EAAAM,KAAA,CAASnjC,CAAT,CAAiB4b,CAAjB,CAAsB,CAAA,CAAtB,CACA9sB,EAAA,CAAQ4sC,CAAR,CAAiB,QAAQ,CAAC7rC,CAAD,CAAQZ,CAAR,CAAa,CAChCtB,CAAA,CAAUkC,CAAV,CAAJ,EACIgzC,CAAAO,iBAAA,CAAqBn0C,CAArB,CAA0BY,CAA1B,CAFgC,CAAtC,CAMAgzC,EAAAQ,OAAA,CAAaC,QAAsB,EAAG,CACpC,IAAIhD,EAAauC,CAAAvC,WAAbA;AAA+B,EAAnC,CAII/B,EAAY,UAAD,EAAesE,EAAf,CAAsBA,CAAAtE,SAAtB,CAAqCsE,CAAAU,aAJpD,CAOI5G,EAAwB,IAAf,GAAAkG,CAAAlG,OAAA,CAAsB,GAAtB,CAA4BkG,CAAAlG,OAK1B,EAAf,GAAIA,CAAJ,GACEA,CADF,CACW4B,CAAA,CAAW,GAAX,CAA8C,MAA7B,GAAAxhB,EAAA,CAAWnB,CAAX,CAAA4nB,SAAA,CAAsC,GAAtC,CAA4C,CADxE,CAIAT,EAAA,CAAgBxlB,CAAhB,CACIof,CADJ,CAEI4B,CAFJ,CAGIsE,CAAAY,sBAAA,EAHJ,CAIInD,CAJJ,CAKI,UALJ,CAjBoC,CAyCtCuC,EAAAa,QAAA,CAhBmBpE,QAAQ,EAAG,CAG5ByD,CAAA,CAAgBxlB,CAAhB,CAA2B,EAA3B,CAA8B,IAA9B,CAAoC,IAApC,CAA0C,EAA1C,CAA8C,OAA9C,CAH4B,CAiB9BslB,EAAAc,UAAA,CAPqBC,QAAQ,EAAG,CAG9Bb,CAAA,CAAgBxlB,CAAhB,CAA2B,EAA3B,CAA8B,IAA9B,CAAoC,IAApC,CAA0C,EAA1C,CAA8C,SAA9C,CAH8B,CAQhCslB,EAAAgB,QAAA,CAZqBC,QAAQ,EAAG,CAC9Bf,CAAA,CAAgBxlB,CAAhB,CAA2B,EAA3B,CAA8B,IAA9B,CAAoC,IAApC,CAA0C,EAA1C,CAA8ColB,CAAA,CAAmB,SAAnB,CAA+B,OAA7E,CAD8B,CAchC7zC,EAAA,CAAQixC,CAAR,CAAuB,QAAQ,CAAClwC,CAAD,CAAQZ,CAAR,CAAa,CAC1C4zC,CAAArwB,iBAAA,CAAqBvjB,CAArB,CAA0BY,CAA1B,CAD0C,CAA5C,CAIAf,EAAA,CAAQ0yC,CAAR,CAA6B,QAAQ,CAAC3xC,CAAD,CAAQZ,CAAR,CAAa,CAChD4zC,CAAAkB,OAAAvxB,iBAAA,CAA4BvjB,CAA5B,CAAiCY,CAAjC,CADgD,CAAlD,CAII6vC,EAAJ,GACEmD,CAAAnD,gBADF,CACwB,CAAA,CADxB,CAIA,IAAI6B,CAAJ,CACE,GAAI,CACFsB,CAAAtB,aAAA,CAAmBA,CADjB,CAEF,MAAOvoC,CAAP,CAAU,CAQV,GAAqB,MAArB;AAAIuoC,CAAJ,CACE,KAAMvoC,EAAN,CATQ,CAcd6pC,CAAAmB,KAAA,CAAS3xC,CAAA,CAAYs6B,CAAZ,CAAA,CAAoB,IAApB,CAA2BA,CAApC,CAtFK,CAiGP,GAAc,CAAd,CAAI2U,CAAJ,CACE,IAAIpjB,EAAYgkB,CAAA,CAAc,QAAQ,EAAG,CACvCQ,CAAA,CAAe,SAAf,CADuC,CAAzB,CAEbpB,CAFa,CADlB,KAIyBA,EAAlB,EA97YKpyC,CAAA,CA87YaoyC,CA97YF7O,KAAX,CA87YL,EACL6O,CAAA7O,KAAA,CAAa,QAAQ,EAAG,CACtBiQ,CAAA,CAAe/0C,CAAA,CAAU2zC,CAAA2C,YAAV,CAAA,CAAiC,SAAjC,CAA6C,OAA5D,CADsB,CAAxB,CAjH8H,CAF7C,CA2OvFx6B,QAASA,GAAoB,EAAG,CAC9B,IAAIsvB,EAAc,IAAlB,CACIC,EAAY,IAWhB,KAAAD,YAAA,CAAmBmL,QAAQ,CAACr0C,CAAD,CAAQ,CACjC,MAAIA,EAAJ,EACEkpC,CACO,CADOlpC,CACP,CAAA,IAFT,EAIOkpC,CAL0B,CAiBnC,KAAAC,UAAA,CAAiBmL,QAAQ,CAACt0C,CAAD,CAAQ,CAC/B,MAAIA,EAAJ,EACEmpC,CACO,CADKnpC,CACL,CAAA,IAFT,EAIOmpC,CALwB,CASjC,KAAA3kB,KAAA,CAAY,CAAC,QAAD,CAAW,mBAAX,CAAgC,MAAhC,CAAwC,QAAQ,CAACvJ,CAAD,CAAS5B,CAAT,CAA4BoC,CAA5B,CAAkC,CAM5F84B,QAASA,EAAM,CAACC,CAAD,CAAK,CAClB,MAAO,QAAP,CAAkBA,CADA,CAIpBC,QAASA,EAAY,CAAC9Q,CAAD,CAAO,CAC1B,MAAOA,EAAA77B,QAAA,CAAa4sC,CAAb,CAAiCxL,CAAjC,CAAAphC,QAAA,CACG6sC,CADH,CACqBxL,CADrB,CADmB,CAM5ByL,QAASA,EAAqB,CAAC9oC,CAAD,CAAQmgB,CAAR,CAAkB4oB,CAAlB,CAAkCC,CAAlC,CAAkD,CAC9E,IAAIC,EAAUjpC,CAAA7I,OAAA,CAAa+xC,QAAiC,CAAClpC,CAAD,CAAQ,CAClEipC,CAAA,EACA,OAAOD,EAAA,CAAehpC,CAAf,CAF2D,CAAtD,CAGXmgB,CAHW,CAGD4oB,CAHC,CAId,OAAOE,EALuE,CAhBY;AA8I5Fp7B,QAASA,EAAY,CAACgqB,CAAD,CAAO8B,CAAP,CAA2BZ,CAA3B,CAA2CW,CAA3C,CAAyD,CAwH5EyP,QAASA,EAAyB,CAACj1C,CAAD,CAAQ,CACxC,GAAI,CAQF,MAHAA,EAGO,CAHE6kC,CAAD,EAAoBqQ,CAAAA,CAApB,CACEz5B,CAAAspB,WAAA,CAAgBF,CAAhB,CAAgC7kC,CAAhC,CADF,CAEEyb,CAAA1a,QAAA,CAAaf,CAAb,CACH,CAAAwlC,CAAA,EAAiB,CAAA1nC,CAAA,CAAUkC,CAAV,CAAjB,CAAoCA,CAApC,CAA4CuH,EAAA,CAAUvH,CAAV,CARjD,CASF,MAAO0nB,CAAP,CAAY,CACZrO,CAAA,CAAkB87B,EAAAC,OAAA,CAA0BzR,CAA1B,CAAgCjc,CAAhC,CAAlB,CADY,CAV0B,CAvH1C,IAAIwtB,EAA6BrQ,CAA7BqQ,GAAgDz5B,CAAAsZ,IAAhDmgB,EAA4DrQ,CAA5DqQ,GAA+Ez5B,CAAAuZ,UAGnF,IAAKl2B,CAAA6kC,CAAA7kC,OAAL,EAAmD,EAAnD,GAAoB6kC,CAAAz/B,QAAA,CAAaglC,CAAb,CAApB,CAAsD,CACpD,GAAIzD,CAAJ,CAAwB,MAEpB4P,EAAAA,CAAgBZ,CAAA,CAAa9Q,CAAb,CAChBuR,EAAJ,GACEG,CADF,CACkB55B,CAAAspB,WAAA,CAAgBF,CAAhB,CAAgCwQ,CAAhC,CADlB,CAGIP,EAAAA,CAAiB1yC,EAAA,CAAQizC,CAAR,CACrBP,EAAAQ,IAAA,CAAqB3R,CACrBmR,EAAA1Q,YAAA,CAA6B,EAC7B0Q,EAAAS,gBAAA,CAAiCX,CAEjC,OAAOE,EAZ6C,CAetDtP,CAAA,CAAe,CAAEA,CAAAA,CAajB,KAhC4E,IAoBxEz+B,CApBwE,CAqBxEyuC,CArBwE,CAsBxEvxC,EAAQ,CAtBgE,CAuBxEmgC,EAAc,EAvB0D,CAwBxEqR,CAxBwE,CAyBxEC,EAAa/R,CAAA7kC,OAzB2D,CA2BxE0H,EAAS,EA3B+D,CA4BxEmvC,EAAsB,EA5BkD,CA6BxEC,CAGJ,CAAO3xC,CAAP,CAAeyxC,CAAf,CAAA,CACE,GAA0D,EAA1D,IAAM3uC,CAAN,CAAmB48B,CAAAz/B,QAAA,CAAaglC,CAAb,CAA0BjlC,CAA1B,CAAnB,GACgF,EADhF,IACOuxC,CADP,CACkB7R,CAAAz/B,QAAA,CAAailC,CAAb,CAAwBpiC,CAAxB,CAAqC8uC,CAArC,CADlB,EAEM5xC,CAOJ,GAPc8C,CAOd,EANEP,CAAAhC,KAAA,CAAYiwC,CAAA,CAAa9Q,CAAAl6B,UAAA,CAAexF,CAAf,CAAsB8C,CAAtB,CAAb,CAAZ,CAMF,CAJAuuC,CAIA,CAJM3R,CAAAl6B,UAAA,CAAe1C,CAAf,CAA4B8uC,CAA5B,CAA+CL,CAA/C,CAIN,CAHApR,CAAA5/B,KAAA,CAAiB8wC,CAAjB,CAGA,CAFArxC,CAEA,CAFQuxC,CAER,CAFmBM,CAEnB,CADAH,CAAAnxC,KAAA,CAAyBgC,CAAA1H,OAAzB,CACA;AAAA0H,CAAAhC,KAAA,CAAY,EAAZ,CATF,KAUO,CAEDP,CAAJ,GAAcyxC,CAAd,EACElvC,CAAAhC,KAAA,CAAYiwC,CAAA,CAAa9Q,CAAAl6B,UAAA,CAAexF,CAAf,CAAb,CAAZ,CAEF,MALK,CAST2xC,CAAA,CAAqC,CAArC,GAAmBpvC,CAAA1H,OAAnB,EAAyE,CAAzE,GAA0C62C,CAAA72C,OAI1C,KAAIywC,EAAc2F,CAAA,EAA8BU,CAA9B,CAAiD7wC,IAAAA,EAAjD,CAA6DkwC,CAC/EQ,EAAA,CAAWrR,CAAA2R,IAAA,CAAgB,QAAQ,CAACT,CAAD,CAAM,CAAE,MAAOr6B,EAAA,CAAOq6B,CAAP,CAAY/F,CAAZ,CAAT,CAA9B,CAeX,IAAK9J,CAAAA,CAAL,EAA2BrB,CAAAtlC,OAA3B,CAA+C,CAC7C,IAAIk3C,EAAUA,QAAQ,CAACthB,CAAD,CAAS,CAC7B,IAD6B,IACpB70B,EAAI,CADgB,CACbY,EAAK2jC,CAAAtlC,OAArB,CAAyCe,CAAzC,CAA6CY,CAA7C,CAAiDZ,CAAA,EAAjD,CAAsD,CACpD,GAAI2lC,CAAJ,EAAoBhjC,CAAA,CAAYkyB,CAAA,CAAO70B,CAAP,CAAZ,CAApB,CAA4C,MAC5C2G,EAAA,CAAOmvC,CAAA,CAAoB91C,CAApB,CAAP,CAAA,CAAiC60B,CAAA,CAAO70B,CAAP,CAFmB,CAKtD,GAAIq1C,CAAJ,CAEE,MAAOz5B,EAAAspB,WAAA,CAAgBF,CAAhB,CAAgC+Q,CAAA,CAAmBpvC,CAAA,CAAO,CAAP,CAAnB,CAA+BA,CAAAsD,KAAA,CAAY,EAAZ,CAA/D,CACE+6B,EAAJ,EAAsC,CAAtC,CAAsBr+B,CAAA1H,OAAtB,EAELq2C,EAAAc,cAAA,CAAiCtS,CAAjC,CAGF,OAAOn9B,EAAAsD,KAAA,CAAY,EAAZ,CAdsB,CAiB/B,OAAOxI,EAAA,CAAO40C,QAAwB,CAAC/2C,CAAD,CAAU,CAC5C,IAAIU,EAAI,CAAR,CACIY,EAAK2jC,CAAAtlC,OADT,CAEI41B,EAAa/xB,KAAJ,CAAUlC,CAAV,CAEb,IAAI,CACF,IAAA,CAAOZ,CAAP,CAAWY,CAAX,CAAeZ,CAAA,EAAf,CACE60B,CAAA,CAAO70B,CAAP,CAAA,CAAY41C,CAAA,CAAS51C,CAAT,CAAA,CAAYV,CAAZ,CAGd,OAAO62C,EAAA,CAAQthB,CAAR,CALL,CAMF,MAAOhN,CAAP,CAAY,CACZrO,CAAA,CAAkB87B,EAAAC,OAAA,CAA0BzR,CAA1B,CAAgCjc,CAAhC,CAAlB,CADY,CAX8B,CAAzC,CAeF,CAEH4tB,IAAK3R,CAFF,CAGHS,YAAaA,CAHV,CAIHmR,gBAAiBA,QAAQ,CAACzpC,CAAD;AAAQmgB,CAAR,CAAkB,CACzC,IAAIkb,CACJ,OAAOr7B,EAAAqqC,YAAA,CAAkBV,CAAlB,CAAyCW,QAA6B,CAAC1hB,CAAD,CAAS2hB,CAAT,CAAoB,CAC/F,IAAIC,EAAYN,CAAA,CAAQthB,CAAR,CAChBzI,EAAA1sB,KAAA,CAAc,IAAd,CAAoB+2C,CAApB,CAA+B5hB,CAAA,GAAW2hB,CAAX,CAAuBlP,CAAvB,CAAmCmP,CAAlE,CAA6ExqC,CAA7E,CACAq7B,EAAA,CAAYmP,CAHmF,CAA1F,CAFkC,CAJxC,CAfE,CAlBsC,CAxE6B,CA9Ic,IACxFT,EAAoB3M,CAAApqC,OADoE,CAExFg3C,EAAkB3M,CAAArqC,OAFsE,CAGxF41C,EAAqB,IAAIzzC,MAAJ,CAAWioC,CAAAphC,QAAA,CAAoB,IAApB,CAA0BysC,CAA1B,CAAX,CAA8C,GAA9C,CAHmE,CAIxFI,EAAmB,IAAI1zC,MAAJ,CAAWkoC,CAAArhC,QAAA,CAAkB,IAAlB,CAAwBysC,CAAxB,CAAX,CAA4C,GAA5C,CA8RvB56B,EAAAuvB,YAAA,CAA2BqN,QAAQ,EAAG,CACpC,MAAOrN,EAD6B,CAgBtCvvB,EAAAwvB,UAAA,CAAyBqN,QAAQ,EAAG,CAClC,MAAOrN,EAD2B,CAIpC,OAAOxvB,EAtTqF,CAAlF,CAvCkB,CAoWhCG,QAASA,GAAiB,EAAG,CAC3B,IAAA0K,KAAA,CAAY,CAAC,mBAAD,CAAsB,SAAtB,CACP,QAAQ,CAACzK,CAAD,CAAsB0C,CAAtB,CAA+B,CAC1C,IAAIg6B,EAAY,EAAhB,CAMIC,EAAkBA,QAAQ,CAAClnB,CAAD,CAAK,CACjC/S,CAAAk6B,cAAA,CAAsBnnB,CAAtB,CACA,QAAOinB,CAAA,CAAUjnB,CAAV,CAF0B,CANnC,CAyIIonB,EAAW78B,CAAA,CAxIK88B,QAAQ,CAACC,CAAD,CAAO3oB,CAAP,CAAc0iB,CAAd,CAAwB,CAC9CrhB,CAAAA,CAAK/S,CAAAs6B,YAAA,CAAoBD,CAApB,CAA0B3oB,CAA1B,CACTsoB,EAAA,CAAUjnB,CAAV,CAAA,CAAgBqhB,CAChB,OAAOrhB,EAH2C,CAwIrC,CAAiCknB,CAAjC,CAYfE,EAAAroB,OAAA,CAAkByoB,QAAQ,CAAC9I,CAAD,CAAU,CAClC,GAAKA,CAAAA,CAAL,CAAc,MAAO,CAAA,CAErB,IAAK,CAAAA,CAAA5uC,eAAA,CAAuB,cAAvB,CAAL,CACE,KAAM23C,GAAA,CAAgB,SAAhB,CAAN;AAIF,GAAK,CAAAR,CAAAn3C,eAAA,CAAyB4uC,CAAAgJ,aAAzB,CAAL,CAAqD,MAAO,CAAA,CAExD1nB,EAAAA,CAAK0e,CAAAgJ,aACT,KAAIrG,EAAW4F,CAAA,CAAUjnB,CAAV,CAAf,CAGsB0e,EAAA2C,CAAA3C,QAw9HtBiJ,EAAAC,QAAJ,GAC6BD,CAAAC,QAR7BC,IAOA,CAPY,CAAA,CAOZ,CAv9HIxG,EAAAjC,OAAA,CAAgB,UAAhB,CACA8H,EAAA,CAAgBlnB,CAAhB,CAEA,OAAO,CAAA,CAlB2B,CAqBpC,OAAOonB,EA3KmC,CADhC,CADe,CAkL7B58B,QAASA,GAAyB,EAAG,CACnC,IAAAwK,KAAA,CAAY,CAAC,UAAD,CAAa,IAAb,CAAmB,KAAnB,CAA0B,YAA1B,CACP,QAAQ,CAAC7L,CAAD,CAAa0C,CAAb,CAAmBE,CAAnB,CAA0BJ,CAA1B,CAAsC,CACjD,MAAOm8B,SAAwB,CAACT,CAAD,CAAgBH,CAAhB,CAAiC,CAC9D,MAAOa,SAAmB,CAAC1wC,CAAD,CAAKsnB,CAAL,CAAYqpB,CAAZ,CAAmBC,CAAnB,CAAgC,CAUxD/pB,QAASA,EAAQ,EAAG,CACbgqB,CAAL,CAGE7wC,CAAAG,MAAA,CAAS,IAAT,CAAe8e,CAAf,CAHF,CACEjf,CAAA,CAAG8wC,CAAH,CAFgB,CAVoC,IACpDD,EAA+B,CAA/BA,CAAYl2C,SAAA1C,OADwC,CAEpDgnB,EAAO4xB,CAAA,CAnlZVn2C,EAAAhC,KAAA,CAmlZgCiC,SAnlZhC,CAmlZ2CuF,CAnlZ3C,CAmlZU,CAAsC,EAFO,CAGpD4wC,EAAY,CAHwC,CAIpDC,EAAY95C,CAAA,CAAU25C,CAAV,CAAZG,EAAsC,CAACH,CAJa,CAKpD5G,EAAW5iB,CAAC2pB,CAAA,CAAYr8B,CAAZ,CAAkBF,CAAnB4S,OAAA,EALyC,CAMpDigB,EAAU2C,CAAA3C,QAEdsJ,EAAA,CAAQ15C,CAAA,CAAU05C,CAAV,CAAA,CAAmBA,CAAnB,CAA2B,CA0BnCtJ,EAAAgJ,aAAA,CAAuBL,CAAA,CAhBvBC,QAAa,EAAG,CACVc,CAAJ,CACEj/B,CAAAsV,MAAA,CAAeP,CAAf,CADF,CAGEvS,CAAAnY,WAAA,CAAsB0qB,CAAtB,CAEFmjB,EAAAgH,OAAA,CAAgBF,CAAA,EAAhB,CAEY;CAAZ,CAAIH,CAAJ,EAAiBG,CAAjB,EAA8BH,CAA9B,GACE3G,CAAAxB,QAAA,CAAiBsI,CAAjB,CACA,CAAAjB,CAAA,CAAgBxI,CAAAgJ,aAAhB,CAFF,CAKKU,EAAL,EAAgBz8B,CAAAnP,OAAA,EAbF,CAgBO,CAAoBmiB,CAApB,CAA2B0iB,CAA3B,CAAqC+G,CAArC,CAEvB,OAAO1J,EApCiD,CADI,CADf,CADvC,CADuB,CA0LrC4J,QAASA,GAAgB,CAACC,CAAD,CAAcC,CAAd,CAA2B,CAClD,IAAIC,EAAY/qB,EAAA,CAAW6qB,CAAX,CAEhBC,EAAAE,WAAA,CAAyBD,CAAAtE,SACzBqE,EAAAG,OAAA,CAAqBF,CAAAG,SACrBJ,EAAAK,OAAA,CAAqB32C,EAAA,CAAMu2C,CAAAK,KAAN,CAArB,EAA8CC,EAAA,CAAcN,CAAAtE,SAAd,CAA9C,EAAmF,IALjC,CASpD6E,QAASA,GAAW,CAACzsB,CAAD,CAAMisB,CAAN,CAAmBS,CAAnB,CAA8B,CAEhD,GAAIC,EAAAt1C,KAAA,CAAwB2oB,CAAxB,CAAJ,CACE,KAAM4sB,GAAA,CAAgB,SAAhB,CAAiD5sB,CAAjD,CAAN,CAGF,IAAI6sB,EAA8B,GAA9BA,GAAY7sB,CAAAxlB,OAAA,CAAW,CAAX,CACZqyC,EAAJ,GACE7sB,CADF,CACQ,GADR,CACcA,CADd,CAGItmB,EAAAA,CAAQynB,EAAA,CAAWnB,CAAX,CAtCZ,KAHI8sB,IAAAA,EAAWl1C,CA0CJi1C,CAAA5pC,EAAyC,GAAzCA,GAAYvJ,CAAAqzC,SAAAvyC,OAAA,CAAsB,CAAtB,CAAZyI,CAA+CvJ,CAAAqzC,SAAArvC,UAAA,CAAyB,CAAzB,CAA/CuF,CAA6EvJ,CAAAqzC,SA1CzEn1C,OAAA,CAAW,GAAX,CAAXk1C,CACAh5C,EAAIg5C,CAAA/5C,OAER,CAAOe,CAAA,EAAP,CAAA,CACEg5C,CAAA,CAASh5C,CAAT,CACA,CADcwJ,kBAAA,CAAmBwvC,CAAA,CAASh5C,CAAT,CAAnB,CACd,CAsCoC44C,CAtCpC,GAEEI,CAAA,CAASh5C,CAAT,CAFF,CAEgBg5C,CAAA,CAASh5C,CAAT,CAAAiI,QAAA,CAAoB,KAApB,CAA2B,KAA3B,CAFhB,CAMF,EAAA,CAAO+wC,CAAA/uC,KAAA,CAAc,GAAd,CAgCPkuC,EAAAe,OAAA,CAAqB,CACrBf,EAAAgB,SAAA,CAAuB1vC,EAAA,CAAc7D,CAAAwzC,OAAd,CACvBjB;CAAAkB,OAAA,CAAqB7vC,kBAAA,CAAmB5D,CAAA8kB,KAAnB,CAGjBytB,EAAAe,OAAJ,EAA2D,GAA3D,GAA0Bf,CAAAe,OAAAxyC,OAAA,CAA0B,CAA1B,CAA1B,GACEyxC,CAAAe,OADF,CACuB,GADvB,CAC6Bf,CAAAe,OAD7B,CAjBgD,CAsBlDI,QAASA,GAAU,CAACx3C,CAAD,CAAMs3C,CAAN,CAAc,CAC/B,MAAOt3C,EAAAJ,MAAA,CAAU,CAAV,CAAa03C,CAAAn6C,OAAb,CAAP,GAAuCm6C,CADR,CAWjCG,QAASA,GAAY,CAACC,CAAD,CAAOttB,CAAP,CAAY,CAC/B,GAAIotB,EAAA,CAAWptB,CAAX,CAAgBstB,CAAhB,CAAJ,CACE,MAAOttB,EAAAsB,OAAA,CAAWgsB,CAAAv6C,OAAX,CAFsB,CAMjCsuB,QAASA,GAAS,CAACrB,CAAD,CAAM,CACtB,IAAI9nB,EAAQ8nB,CAAA7nB,QAAA,CAAY,GAAZ,CACZ,OAAkB,EAAX,GAAAD,CAAA,CAAe8nB,CAAf,CAAqBA,CAAAsB,OAAA,CAAW,CAAX,CAAcppB,CAAd,CAFN,CAwBxBq1C,QAASA,GAAgB,CAACC,CAAD,CAAUC,CAAV,CAAyBC,CAAzB,CAAqC,CAC5D,IAAAC,QAAA,CAAe,CAAA,CACfD,EAAA,CAAaA,CAAb,EAA2B,EAC3B3B,GAAA,CAAiByB,CAAjB,CAA0B,IAA1B,CAQA,KAAAI,QAAA,CAAeC,QAAQ,CAAC7tB,CAAD,CAAM,CAC3B,IAAI8tB,EAAUT,EAAA,CAAaI,CAAb,CAA4BztB,CAA5B,CACd,IAAK,CAAAntB,CAAA,CAASi7C,CAAT,CAAL,CACE,KAAMlB,GAAA,CAAgB,UAAhB,CAA6E5sB,CAA7E,CACFytB,CADE,CAAN,CAIFhB,EAAA,CAAYqB,CAAZ,CAAqB,IAArB,CAA2B,CAAA,CAA3B,CAEK,KAAAd,OAAL,GACE,IAAAA,OADF,CACgB,GADhB,CAIA,KAAAe,UAAA,EAb2B,CAgB7B,KAAAC,eAAA,CAAsBC,QAAQ,CAACjuB,CAAD,CAAM,CAClC,MAAOytB,EAAP,CAAuBztB,CAAAsB,OAAA,CAAW,CAAX,CADW,CAIpC;IAAA4sB,eAAA,CAAsBC,QAAQ,CAACnuB,CAAD,CAAMouB,CAAN,CAAe,CAC3C,GAAIA,CAAJ,EAA8B,GAA9B,GAAeA,CAAA,CAAQ,CAAR,CAAf,CAIE,MADA,KAAA5vB,KAAA,CAAU4vB,CAAA54C,MAAA,CAAc,CAAd,CAAV,CACO,CAAA,CAAA,CALkC,KAOvC64C,CAPuC,CAO/BC,CAIRv8C,EAAA,CAAUs8C,CAAV,CAAmBhB,EAAA,CAAaG,CAAb,CAAsBxtB,CAAtB,CAAnB,CAAJ,EACEsuB,CAEE,CAFWD,CAEX,CAAAE,CAAA,CADEb,CAAJ,EAAkB37C,CAAA,CAAUs8C,CAAV,CAAmBhB,EAAA,CAAaK,CAAb,CAAyBW,CAAzB,CAAnB,CAAlB,CACiBZ,CADjB,EACkCJ,EAAA,CAAa,GAAb,CAAkBgB,CAAlB,CADlC,EAC+DA,CAD/D,EAGiBb,CAHjB,CAG2Bc,CAL7B,EAOWv8C,CAAA,CAAUs8C,CAAV,CAAmBhB,EAAA,CAAaI,CAAb,CAA4BztB,CAA5B,CAAnB,CAAJ,CACLuuB,CADK,CACUd,CADV,CAC0BY,CAD1B,CAEIZ,CAFJ,GAEsBztB,CAFtB,CAE4B,GAF5B,GAGLuuB,CAHK,CAGUd,CAHV,CAKHc,EAAJ,EACE,IAAAX,QAAA,CAAaW,CAAb,CAEF,OAAO,CAAEA,CAAAA,CA1BkC,CA/Be,CAwE9DC,QAASA,GAAmB,CAAChB,CAAD,CAAUC,CAAV,CAAyBgB,CAAzB,CAAqC,CAE/D1C,EAAA,CAAiByB,CAAjB,CAA0B,IAA1B,CAQA,KAAAI,QAAA,CAAeC,QAAQ,CAAC7tB,CAAD,CAAM,CAC3B,IAAI0uB,EAAiBrB,EAAA,CAAaG,CAAb,CAAsBxtB,CAAtB,CAAjB0uB,EAA+CrB,EAAA,CAAaI,CAAb,CAA4BztB,CAA5B,CAAnD,CACI2uB,CAECl4C,EAAA,CAAYi4C,CAAZ,CAAL,EAAiE,GAAjE,GAAoCA,CAAAl0C,OAAA,CAAsB,CAAtB,CAApC,CAcM,IAAAmzC,QAAJ,CACEgB,CADF,CACmBD,CADnB,EAGEC,CACA,CADiB,EACjB,CAAIl4C,CAAA,CAAYi4C,CAAZ,CAAJ,GACElB,CACiB,CADPxtB,CACO,CAAC,IAADjkB,QAAA,EAFnB,CAJF,CAdF,EAIE4yC,CACA,CADiBtB,EAAA,CAAaoB,CAAb,CAAyBC,CAAzB,CACjB,CAAIj4C,CAAA,CAAYk4C,CAAZ,CAAJ,GAEEA,CAFF,CAEmBD,CAFnB,CALF,CAyBAjC,GAAA,CAAYkC,CAAZ,CAA4B,IAA5B,CAAkC,CAAA,CAAlC,CAEqC3B,EAAAA,CAAAA,IAAAA,OAA6BQ,KAAAA,EAAAA,CAAAA,CAoB5DoB,EAAqB,iBAKrBxB,GAAA,CAAWptB,CAAX,CAAgBstB,CAAhB,CAAJ,GACEttB,CADF,CACQA,CAAAjkB,QAAA,CAAYuxC,CAAZ,CAAkB,EAAlB,CADR,CAKIsB,EAAAv8B,KAAA,CAAwB2N,CAAxB,CAAJ,GAKA,CALA,CAKO,CADP6uB,CACO,CADiBD,CAAAv8B,KAAA,CAAwBpP,CAAxB,CACjB;AAAwB4rC,CAAA,CAAsB,CAAtB,CAAxB,CAAmD5rC,CAL1D,CA9BF,KAAA+pC,OAAA,CAAc,CAEd,KAAAe,UAAA,EAjC2B,CAsE7B,KAAAC,eAAA,CAAsBC,QAAQ,CAACjuB,CAAD,CAAM,CAClC,MAAOwtB,EAAP,EAAkBxtB,CAAA,CAAMyuB,CAAN,CAAmBzuB,CAAnB,CAAyB,EAA3C,CADkC,CAIpC,KAAAkuB,eAAA,CAAsBC,QAAQ,CAACnuB,CAAD,CAAMouB,CAAN,CAAe,CAC3C,MAAI/sB,GAAA,CAAUmsB,CAAV,CAAJ,GAA2BnsB,EAAA,CAAUrB,CAAV,CAA3B,EACE,IAAA4tB,QAAA,CAAa5tB,CAAb,CACO,CAAA,CAAA,CAFT,EAIO,CAAA,CALoC,CApFkB,CAwGjE8uB,QAASA,GAA0B,CAACtB,CAAD,CAAUC,CAAV,CAAyBgB,CAAzB,CAAqC,CACtE,IAAAd,QAAA,CAAe,CAAA,CACfa,GAAAvzC,MAAA,CAA0B,IAA1B,CAAgCxF,SAAhC,CAEA,KAAAy4C,eAAA,CAAsBC,QAAQ,CAACnuB,CAAD,CAAMouB,CAAN,CAAe,CAC3C,GAAIA,CAAJ,EAA8B,GAA9B,GAAeA,CAAA,CAAQ,CAAR,CAAf,CAIE,MADA,KAAA5vB,KAAA,CAAU4vB,CAAA54C,MAAA,CAAc,CAAd,CAAV,CACO,CAAA,CAAA,CAGT,KAAI+4C,CAAJ,CACIF,CAEAb,EAAJ,GAAgBnsB,EAAA,CAAUrB,CAAV,CAAhB,CACEuuB,CADF,CACiBvuB,CADjB,CAEO,CAAKquB,CAAL,CAAchB,EAAA,CAAaI,CAAb,CAA4BztB,CAA5B,CAAd,EACLuuB,CADK,CACUf,CADV,CACoBiB,CADpB,CACiCJ,CADjC,CAEIZ,CAFJ,GAEsBztB,CAFtB,CAE4B,GAF5B,GAGLuuB,CAHK,CAGUd,CAHV,CAKHc,EAAJ,EACE,IAAAX,QAAA,CAAaW,CAAb,CAEF,OAAO,CAAEA,CAAAA,CArBkC,CAwB7C,KAAAP,eAAA,CAAsBC,QAAQ,CAACjuB,CAAD,CAAM,CAElC,MAAOwtB,EAAP,CAAiBiB,CAAjB,CAA8BzuB,CAFI,CA5BkC,CAwXxE+uB,QAASA,GAAc,CAACpZ,CAAD,CAAW,CAChC,MAAoB,SAAQ,EAAG,CAC7B,MAAO,KAAA,CAAKA,CAAL,CADsB,CADC,CAOlCqZ,QAASA,GAAoB,CAACrZ,CAAD;AAAWsZ,CAAX,CAAuB,CAClD,MAAoB,SAAQ,CAACh7C,CAAD,CAAQ,CAClC,GAAIwC,CAAA,CAAYxC,CAAZ,CAAJ,CACE,MAAO,KAAA,CAAK0hC,CAAL,CAGT,KAAA,CAAKA,CAAL,CAAA,CAAiBsZ,CAAA,CAAWh7C,CAAX,CACjB,KAAA85C,UAAA,EAEA,OAAO,KAR2B,CADc,CAgDpDh/B,QAASA,GAAiB,EAAG,CAAA,IACvB0/B,EAAa,GADU,CAEvB/B,EAAY,CACVnlB,QAAS,CAAA,CADC,CAEV2nB,YAAa,CAAA,CAFH,CAGVC,aAAc,CAAA,CAHJ,CAchB,KAAAV,WAAA,CAAkBW,QAAQ,CAACzwC,CAAD,CAAS,CACjC,MAAI5M,EAAA,CAAU4M,CAAV,CAAJ,EACE8vC,CACO,CADM9vC,CACN,CAAA,IAFT,EAIS8vC,CALwB,CAgCnC,KAAA/B,UAAA,CAAiB2C,QAAQ,CAACtqB,CAAD,CAAO,CAC9B,GAAI1yB,EAAA,CAAU0yB,CAAV,CAAJ,CAEE,MADA2nB,EAAAnlB,QACO,CADaxC,CACb,CAAA,IACF,IAAIjzB,CAAA,CAASizB,CAAT,CAAJ,CAAoB,CAErB1yB,EAAA,CAAU0yB,CAAAwC,QAAV,CAAJ,GACEmlB,CAAAnlB,QADF,CACsBxC,CAAAwC,QADtB,CAIIl1B,GAAA,CAAU0yB,CAAAmqB,YAAV,CAAJ,GACExC,CAAAwC,YADF,CAC0BnqB,CAAAmqB,YAD1B,CAIA,IAAI78C,EAAA,CAAU0yB,CAAAoqB,aAAV,CAAJ,EAAoCt8C,CAAA,CAASkyB,CAAAoqB,aAAT,CAApC,CACEzC,CAAAyC,aAAA,CAAyBpqB,CAAAoqB,aAG3B,OAAO,KAdkB,CAgBzB,MAAOzC,EApBqB,CA+DhC,KAAAj0B,KAAA,CAAY,CAAC,YAAD,CAAe,UAAf,CAA2B,UAA3B;AAAuC,cAAvC,CAAuD,SAAvD,CACR,QAAQ,CAACrJ,CAAD,CAAaxC,CAAb,CAAuBkD,CAAvB,CAAiCuc,CAAjC,CAA+C3b,CAA/C,CAAwD,CA8BlE4+B,QAASA,EAAS,CAACx1C,CAAD,CAAIC,CAAJ,CAAO,CACvB,MAAOD,EAAP,GAAaC,CAAb,EAAkBonB,EAAA,CAAWrnB,CAAX,CAAAgnB,KAAlB,GAAyCK,EAAA,CAAWpnB,CAAX,CAAA+mB,KADlB,CAIzByuB,QAASA,EAAyB,CAACvvB,CAAD,CAAMjkB,CAAN,CAAeilB,CAAf,CAAsB,CACtD,IAAIwuB,EAAS1gC,CAAAkR,IAAA,EAAb,CACIyvB,EAAW3gC,CAAAu8B,QACf,IAAI,CACFz+B,CAAAoT,IAAA,CAAaA,CAAb,CAAkBjkB,CAAlB,CAA2BilB,CAA3B,CAKA,CAAAlS,CAAAu8B,QAAA,CAAoBz+B,CAAAoU,MAAA,EANlB,CAOF,MAAO5jB,CAAP,CAAU,CAKV,KAHA0R,EAAAkR,IAAA,CAAcwvB,CAAd,CAGMpyC,CAFN0R,CAAAu8B,QAEMjuC,CAFcqyC,CAEdryC,CAAAA,CAAN,CALU,CAV0C,CAyJxDsyC,QAASA,EAAmB,CAACF,CAAD,CAASC,CAAT,CAAmB,CAC7CrgC,CAAAugC,WAAA,CAAsB,wBAAtB,CAAgD7gC,CAAA8gC,OAAA,EAAhD,CAAoEJ,CAApE,CACE1gC,CAAAu8B,QADF,CACqBoE,CADrB,CAD6C,CA3LmB,IAC9D3gC,CAD8D,CAE9D+gC,CACA7tB,EAAAA,CAAWpV,CAAAoV,SAAA,EAHmD,KAI9D8tB,EAAaljC,CAAAoT,IAAA,EAJiD,CAK9DwtB,CAEJ,IAAId,CAAAnlB,QAAJ,CAAuB,CACrB,GAAKvF,CAAAA,CAAL,EAAiB0qB,CAAAwC,YAAjB,CACE,KAAMtC,GAAA,CAAgB,QAAhB,CAAN,CAGFY,CAAA,CAAqBsC,CAxuBlBpyC,UAAA,CAAc,CAAd,CAwuBkBoyC,CAxuBD33C,QAAA,CAAY,GAAZ,CAwuBC23C,CAxuBgB33C,QAAA,CAAY,IAAZ,CAAjB,CAAqC,CAArC,CAAjB,CAwuBH,EAAoC6pB,CAApC,EAAgD,GAAhD,CACA6tB,EAAA,CAAe//B,CAAAqQ,QAAA,CAAmBotB,EAAnB,CAAsCuB,EANhC,CAAvB,IAQEtB,EACA,CADUnsB,EAAA,CAAUyuB,CAAV,CACV,CAAAD,CAAA,CAAerB,EAEjB,KAAIf,EAA0BD,CAnvBzBlsB,OAAA,CAAW,CAAX;AAAcD,EAAA,CAmvBWmsB,CAnvBX,CAAAuC,YAAA,CAA2B,GAA3B,CAAd,CAAgD,CAAhD,CAqvBLjhC,EAAA,CAAY,IAAI+gC,CAAJ,CAAiBrC,CAAjB,CAA0BC,CAA1B,CAAyC,GAAzC,CAA+CgB,CAA/C,CACZ3/B,EAAAo/B,eAAA,CAAyB4B,CAAzB,CAAqCA,CAArC,CAEAhhC,EAAAu8B,QAAA,CAAoBz+B,CAAAoU,MAAA,EAEpB,KAAIgvB,EAAoB,2BA4BxB3jB,EAAAzqB,GAAA,CAAgB,OAAhB,CAAyB,QAAQ,CAACuV,CAAD,CAAQ,CACvC,IAAIg4B,EAAezC,CAAAyC,aAInB,IAAKA,CAAL,EAAqBc,CAAA94B,CAAA84B,QAArB,EAAsCC,CAAA/4B,CAAA+4B,QAAtC,EAAuDC,CAAAh5B,CAAAg5B,SAAvD,EAAyF,CAAzF,GAAyEh5B,CAAAi5B,MAAzE,EAA+G,CAA/G,GAA8Fj5B,CAAAk5B,OAA9F,CAAA,CAKA,IAHA,IAAI5xB,EAAM3rB,CAAA,CAAOqkB,CAAAkB,OAAP,CAGV,CAA6B,GAA7B,GAAOxgB,EAAA,CAAU4mB,CAAA,CAAI,CAAJ,CAAV,CAAP,CAAA,CAEE,GAAIA,CAAA,CAAI,CAAJ,CAAJ,GAAe4N,CAAA,CAAa,CAAb,CAAf,EAAmC,CAAA,CAAC5N,CAAD,CAAOA,CAAA1oB,OAAA,EAAP,EAAqB,CAArB,CAAnC,CAA4D,MAG9D,IAAI,CAAAlD,CAAA,CAASs8C,CAAT,CAAJ,EAA8B,CAAA14C,CAAA,CAAYgoB,CAAAjnB,KAAA,CAAS23C,CAAT,CAAZ,CAA9B,CAAA,CAEImB,IAAAA,EAAU7xB,CAAAlnB,KAAA,CAAS,MAAT,CAAV+4C,CAGAlC,EAAU3vB,CAAAjnB,KAAA,CAAS,MAAT,CAAV42C,EAA8B3vB,CAAAjnB,KAAA,CAAS,YAAT,CAE9B1F,EAAA,CAASw+C,CAAT,CAAJ,EAAgD,4BAAhD,GAAyBA,CAAA95C,SAAA,EAAzB,GAGE85C,CAHF,CAGYnvB,EAAA,CAAWmvB,CAAA/gB,QAAX,CAAAzO,KAHZ,CAOIkvB,EAAA34C,KAAA,CAAuBi5C,CAAvB,CAAJ,EAEIA,CAAAA,CAFJ,EAEgB7xB,CAAAjnB,KAAA,CAAS,QAAT,CAFhB;AAEuC2f,CAAAC,mBAAA,EAFvC,EAGM,CAAAtI,CAAAo/B,eAAA,CAAyBoC,CAAzB,CAAkClC,CAAlC,CAHN,GAOIj3B,CAAAo5B,eAAA,EAEA,CAAIzhC,CAAA8gC,OAAA,EAAJ,GAA2BhjC,CAAAoT,IAAA,EAA3B,EACE5Q,CAAAnP,OAAA,EAVN,CAdA,CAVA,CALuC,CAAzC,CA+CI6O,EAAA8gC,OAAA,EAAJ,GAA2BE,CAA3B,EACEljC,CAAAoT,IAAA,CAAalR,CAAA8gC,OAAA,EAAb,CAAiC,CAAA,CAAjC,CAGF,KAAIY,EAAe,CAAA,CAGnB5jC,EAAA6U,YAAA,CAAqB,QAAQ,CAACgvB,CAAD,CAASC,CAAT,CAAmB,CAEzCtD,EAAA,CAAWqD,CAAX,CAAmBhD,CAAnB,CAAL,EAMAr+B,CAAAnY,WAAA,CAAsB,QAAQ,EAAG,CAC/B,IAAIu4C,EAAS1gC,CAAA8gC,OAAA,EAAb,CACIH,EAAW3gC,CAAAu8B,QADf,CAEI/zB,CACJxI,EAAA8+B,QAAA,CAAkB6C,CAAlB,CACA3hC,EAAAu8B,QAAA,CAAoBqF,CAEpBp5B,EAAA,CAAmBlI,CAAAugC,WAAA,CAAsB,sBAAtB,CAA8Cc,CAA9C,CAAsDjB,CAAtD,CACfkB,CADe,CACLjB,CADK,CAAAn4B,iBAKfxI,EAAA8gC,OAAA,EAAJ,GAA2Ba,CAA3B,GAEIn5B,CAAJ,EACExI,CAAA8+B,QAAA,CAAkB4B,CAAlB,CAEA,CADA1gC,CAAAu8B,QACA,CADoBoE,CACpB,CAAAF,CAAA,CAA0BC,CAA1B,CAAkC,CAAA,CAAlC,CAAyCC,CAAzC,CAHF,GAKEe,CACA,CADe,CAAA,CACf,CAAAd,CAAA,CAAoBF,CAApB,CAA4BC,CAA5B,CANF,CAFA,CAZ+B,CAAjC,CAuBA,CAAKrgC,CAAAm1B,QAAL,EAAyBn1B,CAAAuhC,QAAA,EA7BzB,EAEEjgC,CAAA/P,SAAAmgB,KAFF,CAE0B2vB,CAJoB,CAAhD,CAmCArhC,EAAAlY,OAAA,CAAkB05C,QAAuB,EAAG,CAC1C,GAAIJ,CAAJ,EAAoB1hC,CAAA+hC,uBAApB,CAAsD,CACpD/hC,CAAA+hC,uBAAA;AAAmC,CAAA,CAEnC,KAAIrB,EAAS5iC,CAAAoT,IAAA,EAAb,CACIywB,EAAS3hC,CAAA8gC,OAAA,EADb,CAEIH,EAAW7iC,CAAAoU,MAAA,EAFf,CAGI8vB,EAAiBhiC,CAAAiiC,UAHrB,CAIIC,EAAoB,CAAC1B,CAAA,CAAUE,CAAV,CAAkBiB,CAAlB,CAArBO,EACDliC,CAAA6+B,QADCqD,EACoBlhC,CAAAqQ,QADpB6wB,EACwCvB,CADxCuB,GACqDliC,CAAAu8B,QAEzD,IAAImF,CAAJ,EAAoBQ,CAApB,CACER,CAEA,CAFe,CAAA,CAEf,CAAAphC,CAAAnY,WAAA,CAAsB,QAAQ,EAAG,CAC/B,IAAIw5C,EAAS3hC,CAAA8gC,OAAA,EAAb,CACIt4B,EAAmBlI,CAAAugC,WAAA,CAAsB,sBAAtB,CAA8Cc,CAA9C,CAAsDjB,CAAtD,CACnB1gC,CAAAu8B,QADmB,CACAoE,CADA,CAAAn4B,iBAKnBxI,EAAA8gC,OAAA,EAAJ,GAA2Ba,CAA3B,GAEIn5B,CAAJ,EACExI,CAAA8+B,QAAA,CAAkB4B,CAAlB,CACA,CAAA1gC,CAAAu8B,QAAA,CAAoBoE,CAFtB,GAIMuB,CAIJ,EAHEzB,CAAA,CAA0BkB,CAA1B,CAAkCK,CAAlC,CAC0BrB,CAAA,GAAa3gC,CAAAu8B,QAAb,CAAiC,IAAjC,CAAwCv8B,CAAAu8B,QADlE,CAGF,CAAAqE,CAAA,CAAoBF,CAApB,CAA4BC,CAA5B,CARF,CAFA,CAP+B,CAAjC,CAbkD,CAoCtD3gC,CAAAiiC,UAAA,CAAsB,CAAA,CArCoB,CAA5C,CA2CA,OAAOjiC,EAzL2D,CADxD,CA/Ge,CAwW7BG,QAASA,GAAY,EAAG,CAAA,IAClBgiC,EAAQ,CAAA,CADU,CAElBp2C,EAAO,IASX,KAAAq2C,aAAA,CAAoBC,QAAQ,CAACC,CAAD,CAAO,CACjC,MAAIr/C,EAAA,CAAUq/C,CAAV,CAAJ,EACEH,CACO,CADCG,CACD,CAAA,IAFT,EAISH,CALwB,CASnC,KAAAx4B,KAAA,CAAY,CAAC,SAAD,CAAY,QAAQ,CAAC/H,CAAD,CAAU,CAiExC2gC,QAASA,EAAW,CAAC1uC,CAAD,CAAM,CACpB9L,EAAA,CAAQ8L,CAAR,CAAJ,GACMA,CAAAyY,MAAJ;AAAiBk2B,CAAjB,CACE3uC,CADF,CACSA,CAAAwY,QAAD,EAAoD,EAApD,GAAgBxY,CAAAyY,MAAAjjB,QAAA,CAAkBwK,CAAAwY,QAAlB,CAAhB,CACA,SADA,CACYxY,CAAAwY,QADZ,CAC0B,IAD1B,CACiCxY,CAAAyY,MADjC,CAEAzY,CAAAyY,MAHR,CAIWzY,CAAA4uC,UAJX,GAKE5uC,CALF,CAKQA,CAAAwY,QALR,CAKsB,IALtB,CAK6BxY,CAAA4uC,UAL7B,CAK6C,GAL7C,CAKmD5uC,CAAA89B,KALnD,CADF,CASA,OAAO99B,EAViB,CAa1B6uC,QAASA,EAAU,CAAC53C,CAAD,CAAO,CAAA,IACpBsF,EAAUwR,CAAAxR,QAAVA,EAA6B,EADT,CAEpBuyC,EAAQvyC,CAAA,CAAQtF,CAAR,CAAR63C,EAAyBvyC,CAAAwyC,IAAzBD,EAAwCv7C,CAE5C,OAAO,SAAQ,EAAG,CAChB,IAAI6jB,EAAO,EACX7mB,EAAA,CAAQuC,SAAR,CAAmB,QAAQ,CAACkN,CAAD,CAAM,CAC/BoX,CAAAthB,KAAA,CAAU44C,CAAA,CAAY1uC,CAAZ,CAAV,CAD+B,CAAjC,CAMA,OAAO8W,SAAAC,UAAAze,MAAAzH,KAAA,CAA8Bi+C,CAA9B,CAAqCvyC,CAArC,CAA8C6a,CAA9C,CARS,CAJM,CAtE1B,IAAIu3B,EAAmBr1B,EAAnBq1B,EAA2B,UAAAj6C,KAAA,CAAgBqZ,CAAAihC,UAAhB,EAAqCjhC,CAAAihC,UAAAC,UAArC,CAE/B,OAAO,CAQLF,IAAKF,CAAA,CAAW,KAAX,CARA,CAiBLvtC,KAAMutC,CAAA,CAAW,MAAX,CAjBD,CA0BLK,KAAML,CAAA,CAAW,MAAX,CA1BD,CAmCLryC,MAAOqyC,CAAA,CAAW,OAAX,CAnCF,CA4CLP,MAAQ,QAAQ,EAAG,CACjB,IAAIn2C,EAAK02C,CAAA,CAAW,OAAX,CAET,OAAO,SAAQ,EAAG,CACZP,CAAJ,EACEn2C,CAAAG,MAAA,CAASJ,CAAT;AAAepF,SAAf,CAFc,CAHD,CAAZ,EA5CF,CAViC,CAA9B,CApBU,CAkJxBq8C,QAASA,GAAc,CAAClzC,CAAD,CAAO,CAe5B,MAAOA,EAAP,CAAc,EAfc,CAikB9BmzC,QAASA,GAAS,CAACnpB,CAAD,CAAIwY,CAAJ,CAAO,CACvB,MAAoB,WAAb,GAAA,MAAOxY,EAAP,CAA2BA,CAA3B,CAA+BwY,CADf,CAIzB4Q,QAASA,GAAM,CAAC9nB,CAAD,CAAI+nB,CAAJ,CAAO,CACpB,MAAiB,WAAjB,GAAI,MAAO/nB,EAAX,CAAqC+nB,CAArC,CACiB,WAAjB,GAAI,MAAOA,EAAX,CAAqC/nB,CAArC,CACOA,CADP,CACW+nB,CAHS,CAetBC,QAASA,GAAM,CAAC56C,CAAD,CAAO66C,CAAP,CAAqB,CAClC,OAAQ76C,CAAAsC,KAAR,EAEE,KAAKw4C,CAAAC,iBAAL,CACE,GAAI/6C,CAAAg7C,SAAJ,CACE,MAAO,CAAA,CAET,MAGF,MAAKF,CAAAG,gBAAL,CACE,MAfgBC,EAkBlB,MAAKJ,CAAAK,iBAAL,CACE,MAAyB,GAAlB,GAAAn7C,CAAAo7C,SAAA,CAnBSF,CAmBT,CAA0C,CAAA,CAGnD,MAAKJ,CAAAO,eAAL,CACE,MAAO,CAAA,CAlBX,CAqBA,MAAQ35C,KAAAA,EAAD,GAAem5C,CAAf,CAA+BS,EAA/B,CAAiDT,CAtBtB,CAyBpCU,QAASA,EAA+B,CAACC,CAAD,CAAMtlC,CAAN,CAAe2kC,CAAf,CAA6B,CACnE,IAAIY,CAAJ,CACIC,CADJ,CAIIC,EAAYH,CAAAZ,OAAZe,CAAyBf,EAAA,CAAOY,CAAP,CAAYX,CAAZ,CAE7B,QAAQW,CAAAl5C,KAAR,EACA,KAAKw4C,CAAAc,QAAL,CACEH,CAAA,CAAe,CAAA,CACf7/C,EAAA,CAAQ4/C,CAAAlM,KAAR,CAAkB,QAAQ,CAACuM,CAAD,CAAO,CAC/BN,CAAA,CAAgCM,CAAAxU,WAAhC;AAAiDnxB,CAAjD,CAA0DylC,CAA1D,CACAF,EAAA,CAAeA,CAAf,EAA+BI,CAAAxU,WAAAx5B,SAFA,CAAjC,CAIA2tC,EAAA3tC,SAAA,CAAe4tC,CACf,MACF,MAAKX,CAAAgB,QAAL,CACEN,CAAA3tC,SAAA,CAAe,CAAA,CACf2tC,EAAAO,QAAA,CAAc,EACd,MACF,MAAKjB,CAAAG,gBAAL,CACEM,CAAA,CAAgCC,CAAAQ,SAAhC,CAA8C9lC,CAA9C,CAAuDylC,CAAvD,CACAH,EAAA3tC,SAAA,CAAe2tC,CAAAQ,SAAAnuC,SACf2tC,EAAAO,QAAA,CAAcP,CAAAQ,SAAAD,QACd,MACF,MAAKjB,CAAAK,iBAAL,CACEI,CAAA,CAAgCC,CAAAS,KAAhC,CAA0C/lC,CAA1C,CAAmDylC,CAAnD,CACAJ,EAAA,CAAgCC,CAAAU,MAAhC,CAA2ChmC,CAA3C,CAAoDylC,CAApD,CACAH,EAAA3tC,SAAA,CAAe2tC,CAAAS,KAAApuC,SAAf,EAAoC2tC,CAAAU,MAAAruC,SACpC2tC,EAAAO,QAAA,CAAcP,CAAAS,KAAAF,QAAA54C,OAAA,CAAwBq4C,CAAAU,MAAAH,QAAxB,CACd,MACF,MAAKjB,CAAAqB,kBAAL,CACEZ,CAAA,CAAgCC,CAAAS,KAAhC,CAA0C/lC,CAA1C,CAAmDylC,CAAnD,CACAJ,EAAA,CAAgCC,CAAAU,MAAhC,CAA2ChmC,CAA3C,CAAoDylC,CAApD,CACAH,EAAA3tC,SAAA,CAAe2tC,CAAAS,KAAApuC,SAAf,EAAoC2tC,CAAAU,MAAAruC,SACpC2tC,EAAAO,QAAA,CAAcP,CAAA3tC,SAAA,CAAe,EAAf,CAAoB,CAAC2tC,CAAD,CAClC,MACF,MAAKV,CAAAsB,sBAAL,CACEb,CAAA,CAAgCC,CAAAz7C,KAAhC;AAA0CmW,CAA1C,CAAmDylC,CAAnD,CACAJ,EAAA,CAAgCC,CAAAa,UAAhC,CAA+CnmC,CAA/C,CAAwDylC,CAAxD,CACAJ,EAAA,CAAgCC,CAAAc,WAAhC,CAAgDpmC,CAAhD,CAAyDylC,CAAzD,CACAH,EAAA3tC,SAAA,CAAe2tC,CAAAz7C,KAAA8N,SAAf,EAAoC2tC,CAAAa,UAAAxuC,SAApC,EAA8D2tC,CAAAc,WAAAzuC,SAC9D2tC,EAAAO,QAAA,CAAcP,CAAA3tC,SAAA,CAAe,EAAf,CAAoB,CAAC2tC,CAAD,CAClC,MACF,MAAKV,CAAAyB,WAAL,CACEf,CAAA3tC,SAAA,CAAe,CAAA,CACf2tC,EAAAO,QAAA,CAAc,CAACP,CAAD,CACd,MACF,MAAKV,CAAAC,iBAAL,CACEQ,CAAA,CAAgCC,CAAAgB,OAAhC,CAA4CtmC,CAA5C,CAAqDylC,CAArD,CACIH,EAAAR,SAAJ,EACEO,CAAA,CAAgCC,CAAAnd,SAAhC,CAA8CnoB,CAA9C,CAAuDylC,CAAvD,CAEFH,EAAA3tC,SAAA,CAAe2tC,CAAAgB,OAAA3uC,SAAf,GAAuC,CAAC2tC,CAAAR,SAAxC,EAAwDQ,CAAAnd,SAAAxwB,SAAxD,CACA2tC,EAAAO,QAAA,CAAcP,CAAA3tC,SAAA,CAAe,EAAf,CAAoB,CAAC2tC,CAAD,CAClC,MACF,MAAKV,CAAAO,eAAL,CAEEI,CAAA,CADAgB,CACA,CADoBjB,CAAAxtC,OAAA,CAzFf,CAyFwCkI,CA1FtC1S,CA0F+Cg4C,CAAAkB,OAAAp1C,KA1F/C9D,CACDihC,UAyFc,CAAqD,CAAA,CAEzEiX,EAAA,CAAc,EACd9/C,EAAA,CAAQ4/C,CAAAr9C,UAAR,CAAuB,QAAQ,CAAC09C,CAAD,CAAO,CACpCN,CAAA,CAAgCM,CAAhC,CAAsC3lC,CAAtC,CAA+CylC,CAA/C,CACAF,EAAA,CAAeA,CAAf,EAA+BI,CAAAhuC,SAC/B6tC,EAAAv6C,KAAAwC,MAAA,CAAuB+3C,CAAvB;AAAoCG,CAAAE,QAApC,CAHoC,CAAtC,CAKAP,EAAA3tC,SAAA,CAAe4tC,CACfD,EAAAO,QAAA,CAAcU,CAAA,CAAoBf,CAApB,CAAkC,CAACF,CAAD,CAChD,MACF,MAAKV,CAAA6B,qBAAL,CACEpB,CAAA,CAAgCC,CAAAS,KAAhC,CAA0C/lC,CAA1C,CAAmDylC,CAAnD,CACAJ,EAAA,CAAgCC,CAAAU,MAAhC,CAA2ChmC,CAA3C,CAAoDylC,CAApD,CACAH,EAAA3tC,SAAA,CAAe2tC,CAAAS,KAAApuC,SAAf,EAAoC2tC,CAAAU,MAAAruC,SACpC2tC,EAAAO,QAAA,CAAc,CAACP,CAAD,CACd,MACF,MAAKV,CAAA8B,gBAAL,CACEnB,CAAA,CAAe,CAAA,CACfC,EAAA,CAAc,EACd9/C,EAAA,CAAQ4/C,CAAAp9B,SAAR,CAAsB,QAAQ,CAACy9B,CAAD,CAAO,CACnCN,CAAA,CAAgCM,CAAhC,CAAsC3lC,CAAtC,CAA+CylC,CAA/C,CACAF,EAAA,CAAeA,CAAf,EAA+BI,CAAAhuC,SAC/B6tC,EAAAv6C,KAAAwC,MAAA,CAAuB+3C,CAAvB,CAAoCG,CAAAE,QAApC,CAHmC,CAArC,CAKAP,EAAA3tC,SAAA,CAAe4tC,CACfD,EAAAO,QAAA,CAAcL,CACd,MACF,MAAKZ,CAAA+B,iBAAL,CACEpB,CAAA,CAAe,CAAA,CACfC,EAAA,CAAc,EACd9/C,EAAA,CAAQ4/C,CAAAsB,WAAR,CAAwB,QAAQ,CAACze,CAAD,CAAW,CACzCkd,CAAA,CAAgCld,CAAA1hC,MAAhC,CAAgDuZ,CAAhD,CAAyDylC,CAAzD,CACAF,EAAA,CAAeA,CAAf,EAA+Bpd,CAAA1hC,MAAAkR,SAC/B6tC,EAAAv6C,KAAAwC,MAAA,CAAuB+3C,CAAvB,CAAoCrd,CAAA1hC,MAAAo/C,QAApC,CACI1d,EAAA2c,SAAJ,GAEEO,CAAA,CAAgCld,CAAAtiC,IAAhC,CAA8Cma,CAA9C,CAAwE,CAAA,CAAxE,CAEA,CADAulC,CACA,CADeA,CACf,EAD+Bpd,CAAAtiC,IAAA8R,SAC/B,CAAA6tC,CAAAv6C,KAAAwC,MAAA,CAAuB+3C,CAAvB;AAAoCrd,CAAAtiC,IAAAggD,QAApC,CAJF,CAJyC,CAA3C,CAWAP,EAAA3tC,SAAA,CAAe4tC,CACfD,EAAAO,QAAA,CAAcL,CACd,MACF,MAAKZ,CAAAiC,eAAL,CACEvB,CAAA3tC,SAAA,CAAe,CAAA,CACf2tC,EAAAO,QAAA,CAAc,EACd,MACF,MAAKjB,CAAAkC,iBAAL,CACExB,CAAA3tC,SACA,CADe,CAAA,CACf,CAAA2tC,CAAAO,QAAA,CAAc,EArGhB,CAPmE,CAiHrEkB,QAASA,GAAS,CAAC3N,CAAD,CAAO,CACvB,GAAoB,CAApB,GAAIA,CAAA7zC,OAAJ,CAAA,CACIyhD,CAAAA,CAAiB5N,CAAA,CAAK,CAAL,CAAAjI,WACrB,KAAI7/B,EAAY01C,CAAAnB,QAChB,OAAyB,EAAzB,GAAIv0C,CAAA/L,OAAJ,CAAmC+L,CAAnC,CACOA,CAAA,CAAU,CAAV,CAAA,GAAiB01C,CAAjB,CAAkC11C,CAAlC,CAA8C9F,IAAAA,EAJrD,CADuB,CAQzBy7C,QAASA,GAAY,CAAC3B,CAAD,CAAM,CACzB,MAAOA,EAAAl5C,KAAP,GAAoBw4C,CAAAyB,WAApB,EAAsCf,CAAAl5C,KAAtC,GAAmDw4C,CAAAC,iBAD1B,CAI3BqC,QAASA,GAAa,CAAC5B,CAAD,CAAM,CAC1B,GAAwB,CAAxB,GAAIA,CAAAlM,KAAA7zC,OAAJ,EAA6B0hD,EAAA,CAAa3B,CAAAlM,KAAA,CAAS,CAAT,CAAAjI,WAAb,CAA7B,CACE,MAAO,CAAC/kC,KAAMw4C,CAAA6B,qBAAP,CAAiCV,KAAMT,CAAAlM,KAAA,CAAS,CAAT,CAAAjI,WAAvC,CAA+D6U,MAAO,CAAC55C,KAAMw4C,CAAAuC,iBAAP,CAAtE,CAAoGjC,SAAU,GAA9G,CAFiB,CA19fV;AA4+flBkC,QAASA,GAAW,CAACpnC,CAAD,CAAU,CAC5B,IAAAA,QAAA,CAAeA,CADa,CAkd9BqnC,QAASA,GAAc,CAACrnC,CAAD,CAAU,CAC/B,IAAAA,QAAA,CAAeA,CADgB,CAsXjCsnC,QAASA,GAAM,CAACC,CAAD,CAAQvnC,CAAR,CAAiB4R,CAAjB,CAA0B,CACvC,IAAA0zB,IAAA,CAAW,IAAIV,CAAJ,CAAQ2C,CAAR,CAAe31B,CAAf,CACX,KAAA41B,YAAA,CAAmB51B,CAAAnZ,IAAA,CAAc,IAAI4uC,EAAJ,CAAmBrnC,CAAnB,CAAd,CACc,IAAIonC,EAAJ,CAAgBpnC,CAAhB,CAHM,CAiCzCynC,QAASA,GAAU,CAAChhD,CAAD,CAAQ,CACzB,MAAOX,EAAA,CAAWW,CAAAe,QAAX,CAAA,CAA4Bf,CAAAe,QAAA,EAA5B,CAA8CkgD,EAAA1hD,KAAA,CAAmBS,CAAnB,CAD5B,CAwD3Bkb,QAASA,GAAc,EAAG,CACxB,IAAImM,EAAQ/gB,CAAA,EAAZ,CACI46C,EAAW,CACb,OAAQ,CAAA,CADK,CAEb,QAAS,CAAA,CAFI,CAGb,OAAQ,IAHK,CAIb,UAAan8C,IAAAA,EAJA,CADf,CAOIo8C,CAPJ,CAOgBC,CAahB,KAAAC,WAAA,CAAkBC,QAAQ,CAACC,CAAD,CAAcC,CAAd,CAA4B,CACpDN,CAAA,CAASK,CAAT,CAAA,CAAwBC,CAD4B,CA4BtD,KAAAC,iBAAA,CAAwBC,QAAQ,CAACC,CAAD,CAAkBC,CAAlB,CAAsC,CACpET,CAAA,CAAaQ,CACbP,EAAA,CAAgBQ,CAChB,OAAO,KAH6D,CAMtE,KAAAp9B,KAAA,CAAY,CAAC,SAAD,CAAY,QAAQ,CAACjL,CAAD,CAAU,CAWxC0B,QAASA,EAAM,CAACq6B,CAAD,CAAMuM,CAAN,CAAqB,CAAA,IAC9BC,CAD8B,CACZC,CAEtB,QAAQ,MAAOzM,EAAf,EACE,KAAK,QAAL,CAaE,MAXAyM,EAWO,CAZPzM,CAYO,CAZDA,CAAAt2B,KAAA,EAYC,CATP8iC,CASO,CATYz6B,CAAA,CAAM06B,CAAN,CASZ,CAPFD,CAOE,GANDhB,CAIJ,CAJY,IAAIkB,EAAJ,CAAUC,CAAV,CAIZ;AAFAH,CAEA,CAFmBp6C,CADNw6C,IAAIrB,EAAJqB,CAAWpB,CAAXoB,CAAkB3oC,CAAlB2oC,CAA2BD,CAA3BC,CACMx6C,OAAA,CAAa4tC,CAAb,CAEnB,CAAAjuB,CAAA,CAAM06B,CAAN,CAAA,CAAkBI,CAAA,CAAiBL,CAAjB,CAEb,EAAAM,CAAA,CAAeN,CAAf,CAAiCD,CAAjC,CAET,MAAK,UAAL,CACE,MAAOO,EAAA,CAAe9M,CAAf,CAAoBuM,CAApB,CAET,SACE,MAAOO,EAAA,CAAengD,CAAf,CAAqB4/C,CAArB,CApBX,CAHkC,CAiCpCQ,QAASA,EAAyB,CAACzc,CAAD,CAAW0c,CAAX,CAA4BC,CAA5B,CAAmD,CAEnF,MAAgB,KAAhB,EAAI3c,CAAJ,EAA2C,IAA3C,EAAwB0c,CAAxB,CACS1c,CADT,GACsB0c,CADtB,CAIwB,QAAxB,GAAI,MAAO1c,EAAX,GAKEA,CAEI,CAFOob,EAAA,CAAWpb,CAAX,CAEP,CAAoB,QAApB,GAAA,MAAOA,EAAP,EAAiC2c,CAPvC,EAiBO3c,CAjBP,GAiBoB0c,CAjBpB,EAiBwC1c,CAjBxC,GAiBqDA,CAjBrD,EAiBiE0c,CAjBjE,GAiBqFA,CAjBrF,CASW,CAAA,CAfwE,CA0BrFE,QAASA,EAAmB,CAAC12C,CAAD,CAAQmgB,CAAR,CAAkB4oB,CAAlB,CAAkCiN,CAAlC,CAAoDW,CAApD,CAA2E,CACrG,IAAIC,EAAmBZ,CAAAa,OAAvB,CACIC,CAEJ,IAAgC,CAAhC,GAAIF,CAAA5jD,OAAJ,CAAmC,CACjC,IAAI+jD,EAAkBR,CAAtB,CACAK,EAAmBA,CAAA,CAAiB,CAAjB,CACnB,OAAO52C,EAAA7I,OAAA,CAAa6/C,QAA6B,CAACh3C,CAAD,CAAQ,CACvD,IAAIi3C,EAAgBL,CAAA,CAAiB52C,CAAjB,CACfu2C,EAAA,CAA0BU,CAA1B,CAAyCF,CAAzC,CAA0DH,CAAAzE,OAA1D,CAAL,GACE2E,CACA,CADad,CAAA,CAAiBh2C,CAAjB,CAAwB/G,IAAAA,EAAxB,CAAmCA,IAAAA,EAAnC,CAA8C,CAACg+C,CAAD,CAA9C,CACb,CAAAF,CAAA,CAAkBE,CAAlB,EAAmC/B,EAAA,CAAW+B,CAAX,CAFrC,CAIA,OAAOH,EANgD,CAAlD,CAOJ32B,CAPI,CAOM4oB,CAPN,CAOsB4N,CAPtB,CAH0B,CAenC,IAFA,IAAIO,EAAwB,EAA5B,CACIC,EAAiB,EADrB,CAESpjD,EAAI,CAFb,CAEgBY,EAAKiiD,CAAA5jD,OAArB,CAA8Ce,CAA9C,CAAkDY,CAAlD,CAAsDZ,CAAA,EAAtD,CACEmjD,CAAA,CAAsBnjD,CAAtB,CACA,CAD2BwiD,CAC3B,CAAAY,CAAA,CAAepjD,CAAf,CAAA,CAAoB,IAGtB,OAAOiM,EAAA7I,OAAA,CAAaigD,QAA8B,CAACp3C,CAAD,CAAQ,CAGxD,IAFA,IAAIq3C;AAAU,CAAA,CAAd,CAEStjD,EAAI,CAFb,CAEgBY,EAAKiiD,CAAA5jD,OAArB,CAA8Ce,CAA9C,CAAkDY,CAAlD,CAAsDZ,CAAA,EAAtD,CAA2D,CACzD,IAAIkjD,EAAgBL,CAAA,CAAiB7iD,CAAjB,CAAA,CAAoBiM,CAApB,CACpB,IAAIq3C,CAAJ,GAAgBA,CAAhB,CAA0B,CAACd,CAAA,CAA0BU,CAA1B,CAAyCC,CAAA,CAAsBnjD,CAAtB,CAAzC,CAAmE6iD,CAAA,CAAiB7iD,CAAjB,CAAAo+C,OAAnE,CAA3B,EACEgF,CAAA,CAAepjD,CAAf,CACA,CADoBkjD,CACpB,CAAAC,CAAA,CAAsBnjD,CAAtB,CAAA,CAA2BkjD,CAA3B,EAA4C/B,EAAA,CAAW+B,CAAX,CAJW,CAQvDI,CAAJ,GACEP,CADF,CACed,CAAA,CAAiBh2C,CAAjB,CAAwB/G,IAAAA,EAAxB,CAAmCA,IAAAA,EAAnC,CAA8Ck+C,CAA9C,CADf,CAIA,OAAOL,EAfiD,CAAnD,CAgBJ32B,CAhBI,CAgBM4oB,CAhBN,CAgBsB4N,CAhBtB,CAxB8F,CA2CvGW,QAASA,EAAoB,CAACt3C,CAAD,CAAQmgB,CAAR,CAAkB4oB,CAAlB,CAAkCiN,CAAlC,CAAoDW,CAApD,CAA2E,CAsBtGY,QAASA,EAAa,EAAG,CACnBC,CAAA,CAAOnc,CAAP,CAAJ,EACE4N,CAAA,EAFqB,CAMzBwO,QAASA,EAAY,CAACz3C,CAAD,CAAQ+b,CAAR,CAAgB8f,CAAhB,CAAwBgb,CAAxB,CAAgC,CACnDxb,CAAA,CAAYqc,CAAA,EAAab,CAAb,CAAsBA,CAAA,CAAO,CAAP,CAAtB,CAAkCrN,CAAA,CAAIxpC,CAAJ,CAAW+b,CAAX,CAAmB8f,CAAnB,CAA2Bgb,CAA3B,CAC1CW,EAAA,CAAOnc,CAAP,CAAJ,EACEr7B,CAAA+6B,aAAA,CAAmBwc,CAAnB,CAEF,OAAOvmB,EAAA,CAAKqK,CAAL,CAL4C,CA3BrD,IAAImc,EAASxB,CAAApa,QAAA,CAA2B+b,CAA3B,CAA0C3lD,CAAvD,CACIi3C,CADJ,CACa5N,CADb,CAGImO,EAAMwM,CAAA4B,cAANpO,EAAwCwM,CAH5C,CAIIhlB,EAAOglB,CAAA6B,cAAP7mB,EAAyC56B,EAJ7C,CAMIshD,EAAY1B,CAAAa,OAAZa,EAAuC,CAAClO,CAAAqN,OAI5CY,EAAA7b,QAAA,CAAuBoa,CAAApa,QACvB6b,EAAAryC,SAAA,CAAwB4wC,CAAA5wC,SACxBqyC,EAAAZ,OAAA,CAAsBb,CAAAa,OAGtBR,EAAA,CAAiBoB,CAAjB,CAIA,OAFAxO,EAEA,CAFUjpC,CAAA7I,OAAA,CAAasgD,CAAb,CAA2Bt3B,CAA3B,CAAqC4oB,CAArC,CAAqD4N,CAArD,CAlB4F,CAqCxGgB,QAASA,EAAY,CAACzjD,CAAD,CAAQ,CAC3B,IAAI4jD,EAAa,CAAA,CACjB3kD,EAAA,CAAQe,CAAR,CAAe,QAAQ,CAACkH,CAAD,CAAM,CACtBpJ,CAAA,CAAUoJ,CAAV,CAAL,GAAqB08C,CAArB,CAAkC,CAAA,CAAlC,CAD2B,CAA7B,CAGA,OAAOA,EALoB,CAtJW;AA8JxChP,QAASA,EAAqB,CAAC9oC,CAAD,CAAQmgB,CAAR,CAAkB4oB,CAAlB,CAAkCiN,CAAlC,CAAoD,CAChF,IAAI/M,EAAUjpC,CAAA7I,OAAA,CAAa4gD,QAAsB,CAAC/3C,CAAD,CAAQ,CACvDipC,CAAA,EACA,OAAO+M,EAAA,CAAiBh2C,CAAjB,CAFgD,CAA3C,CAGXmgB,CAHW,CAGD4oB,CAHC,CAId,OAAOE,EALyE,CAQlFoN,QAASA,EAAgB,CAACL,CAAD,CAAmB,CACtCA,CAAA5wC,SAAJ,CACE4wC,CAAAvM,gBADF,CACqCX,CADrC,CAEWkN,CAAAgC,QAAJ,CACLhC,CAAAvM,gBADK,CAC8B6N,CAD9B,CAEItB,CAAAa,OAFJ,GAGLb,CAAAvM,gBAHK,CAG8BiN,CAH9B,CAMP,OAAOV,EATmC,CAY5C7T,QAASA,EAAiB,CAAC8V,CAAD,CAAQC,CAAR,CAAgB,CACxCC,QAASA,EAAkB,CAACjkD,CAAD,CAAQ,CACjC,MAAOgkD,EAAA,CAAOD,CAAA,CAAM/jD,CAAN,CAAP,CAD0B,CAGnCikD,CAAAnc,UAAA,CAA+Bic,CAAAjc,UAA/B,EAAkDkc,CAAAlc,UAClDmc,EAAAC,OAAA,CAA4BH,CAAAG,OAA5B,EAA4CF,CAAAE,OAE5C,OAAOD,EAPiC,CAU1C7B,QAASA,EAAc,CAACN,CAAD,CAAmBD,CAAnB,CAAkC,CACvD,GAAKA,CAAAA,CAAL,CAAoB,MAAOC,EAIvBA,EAAA6B,cAAJ,GACE9B,CACA,CADgB5T,CAAA,CAAkB6T,CAAA6B,cAAlB,CAAkD9B,CAAlD,CAChB,CAAAC,CAAA,CAAmBA,CAAA4B,cAFrB,CAKA,KAAIF,EAAY,CAAA,CAAhB,CAEI38C,EAAKA,QAA8B,CAACiF,CAAD,CAAQ+b,CAAR,CAAgB8f,CAAhB,CAAwBgb,CAAxB,CAAgC,CACjE3iD,CAAAA,CAAQwjD,CAAA,EAAab,CAAb,CAAsBA,CAAA,CAAO,CAAP,CAAtB,CAAkCb,CAAA,CAAiBh2C,CAAjB,CAAwB+b,CAAxB,CAAgC8f,CAAhC,CAAwCgb,CAAxC,CAC9C,OAAOd,EAAA,CAAc7hD,CAAd,CAF8D,CAMvE6G,EAAA68C,cAAA,CAAmB5B,CACnBj7C,EAAA88C,cAAA;AAAmB9B,CAGnBh7C,EAAA6gC,QAAA,CAAaoa,CAAApa,QACb7gC,EAAAi9C,QAAA,CAAahC,CAAAgC,QACbj9C,EAAAqK,SAAA,CAAc4wC,CAAA5wC,SAKT2wC,EAAA/Z,UAAL,GACE0b,CAGA,CAHY,CAAC1B,CAAAa,OAGb,CAFA97C,CAAA87C,OAEA,CAFYb,CAAAa,OAAA,CAA0Bb,CAAAa,OAA1B,CAAoD,CAACb,CAAD,CAEhE,CAAKD,CAAAqC,OAAL,GACEr9C,CAAA87C,OADF,CACc97C,CAAA87C,OAAA5M,IAAA,CAAc,QAAQ,CAAC5sC,CAAD,CAAI,CAGlC,MAAIA,EAAA80C,OAAJ,GAAiBU,EAAjB,CACSwF,QAAmB,CAACC,CAAD,CAAI,CAAE,MAAOj7C,EAAA,CAAEi7C,CAAF,CAAT,CADhC,CAGOj7C,CAN2B,CAA1B,CADd,CAJF,CAgBA,OAAOg5C,EAAA,CAAiBt7C,CAAjB,CA7CgD,CA1LzD,IAAIo7C,EAAgB,CACdjwC,IAFaA,EAAA,EAAAqyC,aACC,CAEdnD,SAAU98C,EAAA,CAAK88C,CAAL,CAFI,CAGdoD,kBAAmBjlD,CAAA,CAAW8hD,CAAX,CAAnBmD,EAA6CnD,CAH/B,CAIdoD,qBAAsBllD,CAAA,CAAW+hD,CAAX,CAAtBmD,EAAmDnD,CAJrC,CAMpBnmC,EAAAupC,SAAA,CA8BAA,QAAiB,CAAClP,CAAD,CAAM,CACrB,IAAIwL,EAAQ,IAAIkB,EAAJ,CAAUC,CAAV,CAEZ,OAAOwC,CADMvC,IAAIrB,EAAJqB,CAAWpB,CAAXoB,CAAkB3oC,CAAlB2oC,CAA2BD,CAA3BC,CACNuC,QAAA,CAAcnP,CAAd,CAAAuJ,IAHc,CA7BvB,OAAO5jC,EATiC,CAA9B,CAvDY,CAqgB1BK,QAASA,GAAU,EAAG,CACpB,IAAIopC,EAA6B,CAAA,CACjC,KAAAlgC,KAAA,CAAY,CAAC,YAAD,CAAe,mBAAf,CAAoC,QAAQ,CAACrJ,CAAD,CAAa9B,CAAb,CAAgC,CACtF,MAAOsrC,GAAA,CAAS,QAAQ,CAACj3B,CAAD,CAAW,CACjCvS,CAAAnY,WAAA,CAAsB0qB,CAAtB,CADiC,CAA5B;AAEJrU,CAFI,CAEeqrC,CAFf,CAD+E,CAA5E,CAmBZ,KAAAA,2BAAA,CAAkCE,QAAQ,CAAC5kD,CAAD,CAAQ,CAChD,MAAIlC,EAAA,CAAUkC,CAAV,CAAJ,EACE0kD,CACO,CADsB1kD,CACtB,CAAA,IAFT,EAIS0kD,CALuC,CArB9B,CAgCtBlpC,QAASA,GAAW,EAAG,CACrB,IAAIkpC,EAA6B,CAAA,CACjC,KAAAlgC,KAAA,CAAY,CAAC,UAAD,CAAa,mBAAb,CAAkC,QAAQ,CAAC7L,CAAD,CAAWU,CAAX,CAA8B,CAClF,MAAOsrC,GAAA,CAAS,QAAQ,CAACj3B,CAAD,CAAW,CACjC/U,CAAAsV,MAAA,CAAeP,CAAf,CADiC,CAA5B,CAEJrU,CAFI,CAEeqrC,CAFf,CAD2E,CAAxE,CAMZ,KAAAA,2BAAA,CAAkCE,QAAQ,CAAC5kD,CAAD,CAAQ,CAChD,MAAIlC,EAAA,CAAUkC,CAAV,CAAJ,EACE0kD,CACO,CADsB1kD,CACtB,CAAA,IAFT,EAIS0kD,CALuC,CAR7B,CA4BvBC,QAASA,GAAQ,CAACE,CAAD,CAAWC,CAAX,CAA6BJ,CAA7B,CAAyD,CAexEz2B,QAASA,EAAK,EAAG,CACf,MAAO,KAAI82B,CADI,CAIjBA,QAASA,EAAQ,EAAG,CAClB,IAAI7W,EAAU,IAAAA,QAAVA,CAAyB,IAAI8W,CAEjC,KAAA3V,QAAA,CAAe4V,QAAQ,CAAC/9C,CAAD,CAAM,CAAE0pC,CAAA,CAAe1C,CAAf,CAAwBhnC,CAAxB,CAAF,CAC7B,KAAA0nC,OAAA,CAAcsW,QAAQ,CAACv2C,CAAD,CAAS,CAAEw2C,CAAA,CAAcjX,CAAd,CAAuBv/B,CAAvB,CAAF,CAC/B,KAAAkpC,OAAA,CAAcuN,QAAQ,CAACC,CAAD,CAAW,CAAEC,CAAA,CAAcpX,CAAd,CAAuBmX,CAAvB,CAAF,CALf,CASpBL,QAASA,EAAO,EAAG,CACjB,IAAA5N,QAAA,CAAe,CAAEtK,OAAQ,CAAV,CADE,CAkEnByY,QAASA,EAAa,EAAG,CAEvB,IAAA,CAAQC,CAAAA,CAAR;AAAqBC,CAAA3mD,OAArB,CAAA,CAAwC,CACtC,IAAI4mD,EAAUD,CAAA99B,MAAA,EACd,IAuSK0vB,CAvSwBqO,CAuSxBrO,IAvSL,CAAuC,CACVqO,CAySjCrO,IAAA,CAAY,CAAA,CAxS8Dr3C,KAAAA,EAAA0lD,CAAA1lD,MAAAA,CAAhE2lD,EAAe,gCAAfA,EA/7dS,UAAnB,GAAI,MAAOlnD,EAAX,CACSA,CAAA8D,SAAA,EAAAuF,QAAA,CAAuB,aAAvB,CAAsC,EAAtC,CADT,CAEWtF,CAAA,CAAY/D,CAAZ,CAAJ,CACE,WADF,CAEmB,QAAnB,GAAI,MAAOA,EAAX,CACEkT,EAAA,CAAgBlT,CAAhB,CA07dmDJ,IAAA,EA17dnD,CADF,CAGAI,CAw7dGknD,CACA/iD,GAAA,CAAQ8iD,CAAA1lD,MAAR,CAAJ,CACE8kD,CAAA,CAAiBY,CAAA1lD,MAAjB,CAAgC2lD,CAAhC,CADF,CAGEb,CAAA,CAAiBa,CAAjB,CANmC,CAFD,CAFjB,CAgBzBC,QAASA,EAAoB,CAAC74B,CAAD,CAAQ,CAC/B23B,CAAAA,CAAJ,EAAmC33B,CAAA84B,QAAnC,EAAqE,CAArE,GAAoD94B,CAAA+f,OAApD,EAAmG/f,CA0R5FsqB,IA1RP,GACoB,CAGlB,GAHImO,CAGJ,EAH6C,CAG7C,GAHuBC,CAAA3mD,OAGvB,EAFE+lD,CAAA,CAASU,CAAT,CAEF,CAAAE,CAAAjhD,KAAA,CAAgBuoB,CAAhB,CAJF,CAMI+4B,EAAA/4B,CAAA+4B,iBAAJ,EAA+B/4B,CAAA84B,QAA/B,GACA94B,CAAA+4B,iBAEA,CAFyB,CAAA,CAEzB,CADA,EAAEN,CACF,CAAAX,CAAA,CAAS,QAAQ,EAAG,CA7DO,IACvBh+C,CADuB,CACnBqnC,CADmB,CACV2X,CAEjBA,EAAA,CA0DmC94B,CA1DzB84B,QA0DyB94B,EAzDnC+4B,iBAAA,CAAyB,CAAA,CAyDU/4B,EAxDnC84B,QAAA,CAAgB9gD,IAAAA,EAChB,IAAI,CACF,IADE,IACOlF,EAAI,CADX,CACcY,EAAKolD,CAAA/mD,OAArB,CAAqCe,CAArC,CAAyCY,CAAzC,CAA6C,EAAEZ,CAA/C,CAAkD,CAsDjBktB,CAoRrCsqB,IAAA;AAAY,CAAA,CAxUNnJ,EAAA,CAAU2X,CAAA,CAAQhmD,CAAR,CAAA,CAAW,CAAX,CACVgH,EAAA,CAAKg/C,CAAA,CAAQhmD,CAAR,CAAA,CAmD0BktB,CAnDf+f,OAAX,CACL,IAAI,CACEztC,CAAA,CAAWwH,CAAX,CAAJ,CACE+pC,CAAA,CAAe1C,CAAf,CAAwBrnC,CAAA,CAgDGkmB,CAhDA/sB,MAAH,CAAxB,CADF,CAE4B,CAArB,GA+CsB+sB,CA/ClB+f,OAAJ,CACL8D,CAAA,CAAe1C,CAAf,CA8C2BnhB,CA9CH/sB,MAAxB,CADK,CAGLmlD,CAAA,CAAcjX,CAAd,CA4C2BnhB,CA5CJ/sB,MAAvB,CANA,CAQF,MAAOmJ,CAAP,CAAU,CACVg8C,CAAA,CAAcjX,CAAd,CAAuB/kC,CAAvB,CAEA,CAAIA,CAAJ,EAAwC,CAAA,CAAxC,GAASA,CAAA48C,yBAAT,EACEjB,CAAA,CAAiB37C,CAAjB,CAJQ,CAZoC,CADhD,CAAJ,OAqBU,CACR,EAAEq8C,CACF,CAAId,CAAJ,EAAgD,CAAhD,GAAkCc,CAAlC,EACEX,CAAA,CAASU,CAAT,CAHM,CAkCU,CAApB,CAHA,CAPmC,CAarC3U,QAASA,EAAc,CAAC1C,CAAD,CAAUhnC,CAAV,CAAe,CAChCgnC,CAAAkJ,QAAAtK,OAAJ,GACI5lC,CAAJ,GAAYgnC,CAAZ,CACE8X,CAAA,CAAS9X,CAAT,CAAkB+X,CAAA,CAChB,QADgB,CAGhB/+C,CAHgB,CAAlB,CADF,CAMEg/C,CAAA,CAAUhY,CAAV,CAAmBhnC,CAAnB,CAPF,CADoC,CAatCg/C,QAASA,EAAS,CAAChY,CAAD,CAAUhnC,CAAV,CAAe,CAiB/Bi/C,QAASA,EAAS,CAACj/C,CAAD,CAAM,CAClBqpC,CAAJ,GACAA,CACA,CADO,CAAA,CACP,CAAA2V,CAAA,CAAUhY,CAAV,CAAmBhnC,CAAnB,CAFA,CADsB,CAKxBk/C,QAASA,EAAQ,CAACl/C,CAAD,CAAM,CACjBqpC,CAAJ,GACAA,CACA,CADO,CAAA,CACP,CAAAyV,CAAA,CAAS9X,CAAT,CAAkBhnC,CAAlB,CAFA,CADqB,CAKvBm/C,QAASA,EAAQ,CAAChB,CAAD,CAAW,CAC1BC,CAAA,CAAcpX,CAAd,CAAuBmX,CAAvB,CAD0B,CA1B5B,IAAIziB,CAAJ,CACI2N,EAAO,CAAA,CACX,IAAI,CACF,GAAI1yC,CAAA,CAASqJ,CAAT,CAAJ,EAAqB7H,CAAA,CAAW6H,CAAX,CAArB,CAAsC07B,CAAA,CAAO17B,CAAA07B,KACzCvjC,EAAA,CAAWujC,CAAX,CAAJ,EACEsL,CAAAkJ,QAAAtK,OACA,CAD0B,EAC1B,CAAAlK,CAAArjC,KAAA,CAAU2H,CAAV,CAAei/C,CAAf,CAA0BC,CAA1B,CAAoCC,CAApC,CAFF,GAIEnY,CAAAkJ,QAAAp3C,MAEA,CAFwBkH,CAExB,CADAgnC,CAAAkJ,QAAAtK,OACA,CADyB,CACzB,CAAA8Y,CAAA,CAAqB1X,CAAAkJ,QAArB,CANF,CAFE,CAUF,MAAOjuC,CAAP,CAAU,CACVi9C,CAAA,CAASj9C,CAAT,CADU,CAbmB,CAgCjCg8C,QAASA,EAAa,CAACjX,CAAD;AAAUv/B,CAAV,CAAkB,CAClCu/B,CAAAkJ,QAAAtK,OAAJ,EACAkZ,CAAA,CAAS9X,CAAT,CAAkBv/B,CAAlB,CAFsC,CAKxCq3C,QAASA,EAAQ,CAAC9X,CAAD,CAAUv/B,CAAV,CAAkB,CACjCu/B,CAAAkJ,QAAAp3C,MAAA,CAAwB2O,CACxBu/B,EAAAkJ,QAAAtK,OAAA,CAAyB,CACzB8Y,EAAA,CAAqB1X,CAAAkJ,QAArB,CAHiC,CAMnCkO,QAASA,EAAa,CAACpX,CAAD,CAAUmX,CAAV,CAAoB,CACxC,IAAI/S,EAAYpE,CAAAkJ,QAAAyO,QAEe,EAA/B,EAAK3X,CAAAkJ,QAAAtK,OAAL,EAAqCwF,CAArC,EAAkDA,CAAAxzC,OAAlD,EACE+lD,CAAA,CAAS,QAAQ,EAAG,CAElB,IAFkB,IACdn3B,CADc,CACJjH,CADI,CAET5mB,EAAI,CAFK,CAEFY,EAAK6xC,CAAAxzC,OAArB,CAAuCe,CAAvC,CAA2CY,CAA3C,CAA+CZ,CAAA,EAA/C,CAAoD,CAClD4mB,CAAA,CAAS6rB,CAAA,CAAUzyC,CAAV,CAAA,CAAa,CAAb,CACT6tB,EAAA,CAAW4kB,CAAA,CAAUzyC,CAAV,CAAA,CAAa,CAAb,CACX,IAAI,CACFylD,CAAA,CAAc7+B,CAAd,CAAsBpnB,CAAA,CAAWquB,CAAX,CAAA,CAAuBA,CAAA,CAAS23B,CAAT,CAAvB,CAA4CA,CAAlE,CADE,CAEF,MAAOl8C,CAAP,CAAU,CACV27C,CAAA,CAAiB37C,CAAjB,CADU,CALsC,CAFlC,CAApB,CAJsC,CAuD1CylC,QAASA,EAAM,CAACjgC,CAAD,CAAS,CACtB,IAAI8X,EAAS,IAAIu+B,CACjBG,EAAA,CAAc1+B,CAAd,CAAsB9X,CAAtB,CACA,OAAO8X,EAHe,CAMxB6/B,QAASA,EAAc,CAACtmD,CAAD,CAAQumD,CAAR,CAAkB74B,CAAlB,CAA4B,CACjD,IAAI84B,EAAiB,IACrB,IAAI,CACEnnD,CAAA,CAAWquB,CAAX,CAAJ,GAA0B84B,CAA1B,CAA2C94B,CAAA,EAA3C,CADE,CAEF,MAAOvkB,CAAP,CAAU,CACV,MAAOylC,EAAA,CAAOzlC,CAAP,CADG,CAGZ,MAAkBq9C,EAAlB,EA73hBYnnD,CAAA,CA63hBMmnD,CA73hBK5jB,KAAX,CA63hBZ,CACS4jB,CAAA5jB,KAAA,CAAoB,QAAQ,EAAG,CACpC,MAAO2jB,EAAA,CAASvmD,CAAT,CAD6B,CAA/B,CAEJ4uC,CAFI,CADT,CAKS2X,CAAA,CAASvmD,CAAT,CAZwC,CAkCnDymD,QAASA,EAAI,CAACzmD,CAAD,CAAQ0tB,CAAR,CAAkBg5B,CAAlB,CAA2BC,CAA3B,CAAyC,CACpD,IAAIlgC,EAAS,IAAIu+B,CACjBpU,EAAA,CAAenqB,CAAf,CAAuBzmB,CAAvB,CACA,OAAOymB,EAAAmc,KAAA,CAAYlV,CAAZ,CAAsBg5B,CAAtB;AAA+BC,CAA/B,CAH6C,CAoFtDC,QAASA,EAAE,CAACL,CAAD,CAAW,CACpB,GAAK,CAAAlnD,CAAA,CAAWknD,CAAX,CAAL,CACE,KAAMN,EAAA,CAAS,SAAT,CAAwDM,CAAxD,CAAN,CAGF,IAAIrY,EAAU,IAAI8W,CAUlBuB,EAAA,CARAM,QAAkB,CAAC7mD,CAAD,CAAQ,CACxB4wC,CAAA,CAAe1C,CAAf,CAAwBluC,CAAxB,CADwB,CAQ1B,CAJAouC,QAAiB,CAACz/B,CAAD,CAAS,CACxBw2C,CAAA,CAAcjX,CAAd,CAAuBv/B,CAAvB,CADwB,CAI1B,CAEA,OAAOu/B,EAjBa,CArWtB,IAAI+X,EAAW1nD,CAAA,CAAO,IAAP,CAAauoD,SAAb,CAAf,CACItB,EAAY,CADhB,CAEIC,EAAa,EA6BjBnkD,EAAA,CAAO0jD,CAAAv/B,UAAP,CAA0B,CACxBmd,KAAMA,QAAQ,CAACmkB,CAAD,CAAcC,CAAd,CAA0BL,CAA1B,CAAwC,CACpD,GAAInkD,CAAA,CAAYukD,CAAZ,CAAJ,EAAgCvkD,CAAA,CAAYwkD,CAAZ,CAAhC,EAA2DxkD,CAAA,CAAYmkD,CAAZ,CAA3D,CACE,MAAO,KAET,KAAIlgC,EAAS,IAAIu+B,CAEjB,KAAA5N,QAAAyO,QAAA,CAAuB,IAAAzO,QAAAyO,QAAvB,EAA+C,EAC/C,KAAAzO,QAAAyO,QAAArhD,KAAA,CAA0B,CAACiiB,CAAD,CAASsgC,CAAT,CAAsBC,CAAtB,CAAkCL,CAAlC,CAA1B,CAC0B,EAA1B,CAAI,IAAAvP,QAAAtK,OAAJ,EAA6B8Y,CAAA,CAAqB,IAAAxO,QAArB,CAE7B,OAAO3wB,EAV6C,CAD9B,CAcxB,QAAS0c,QAAQ,CAACzV,CAAD,CAAW,CAC1B,MAAO,KAAAkV,KAAA,CAAU,IAAV,CAAgBlV,CAAhB,CADmB,CAdJ,CAkBxB,UAAWqiB,QAAQ,CAACriB,CAAD,CAAWi5B,CAAX,CAAyB,CAC1C,MAAO,KAAA/jB,KAAA,CAAU,QAAQ,CAAC5iC,CAAD,CAAQ,CAC/B,MAAOsmD,EAAA,CAAetmD,CAAf,CAAsBqvC,CAAtB,CAA+B3hB,CAA/B,CADwB,CAA1B,CAEJ,QAAQ,CAACxiB,CAAD,CAAQ,CACjB,MAAOo7C,EAAA,CAAep7C,CAAf,CAAsB0jC,CAAtB,CAA8BlhB,CAA9B,CADU,CAFZ;AAIJi5B,CAJI,CADmC,CAlBpB,CAA1B,CAsQA,KAAItX,EAAUoX,CAsFdG,EAAAnhC,UAAA,CAAeu/B,CAAAv/B,UAEfmhC,EAAA34B,MAAA,CAAWA,CACX24B,EAAAhY,OAAA,CAAYA,CACZgY,EAAAH,KAAA,CAAUA,CACVG,EAAAvX,QAAA,CAAaA,CACbuX,EAAAvpC,IAAA,CA1EAA,QAAY,CAAC4pC,CAAD,CAAW,CAAA,IACjBxgC,EAAS,IAAIu+B,CADI,CAEjBkC,EAAU,CAFO,CAGjBC,EAAUxoD,CAAA,CAAQsoD,CAAR,CAAA,CAAoB,EAApB,CAAyB,EAEvChoD,EAAA,CAAQgoD,CAAR,CAAkB,QAAQ,CAAC/Y,CAAD,CAAU9uC,CAAV,CAAe,CACvC8nD,CAAA,EACAT,EAAA,CAAKvY,CAAL,CAAAtL,KAAA,CAAmB,QAAQ,CAAC5iC,CAAD,CAAQ,CACjCmnD,CAAA,CAAQ/nD,CAAR,CAAA,CAAeY,CACT,GAAEknD,CAAR,EAAkBtW,CAAA,CAAenqB,CAAf,CAAuB0gC,CAAvB,CAFe,CAAnC,CAGG,QAAQ,CAACx4C,CAAD,CAAS,CAClBw2C,CAAA,CAAc1+B,CAAd,CAAsB9X,CAAtB,CADkB,CAHpB,CAFuC,CAAzC,CAUgB,EAAhB,GAAIu4C,CAAJ,EACEtW,CAAA,CAAenqB,CAAf,CAAuB0gC,CAAvB,CAGF,OAAO1gC,EAnBc,CA2EvBmgC,EAAAQ,KAAA,CAvCAA,QAAa,CAACH,CAAD,CAAW,CACtB,IAAIpW,EAAW5iB,CAAA,EAEfhvB,EAAA,CAAQgoD,CAAR,CAAkB,QAAQ,CAAC/Y,CAAD,CAAU,CAClCuY,CAAA,CAAKvY,CAAL,CAAAtL,KAAA,CAAmBiO,CAAAxB,QAAnB,CAAqCwB,CAAAjC,OAArC,CADkC,CAApC,CAIA,OAAOiC,EAAA3C,QAPe,CAyCxB,OAAO0Y,EArYiE,CAyZ1EhqC,QAASA,GAAa,EAAG,CACvB,IAAA4H,KAAA,CAAY,CAAC,SAAD,CAAY,UAAZ,CAAwB,QAAQ,CAAC/H,CAAD,CAAUF,CAAV,CAAoB,CAC9D,IAAI8qC,EAAwB5qC,CAAA4qC,sBAAxBA,EACwB5qC,CAAA6qC,4BAD5B,CAGIC,EAAuB9qC,CAAA8qC,qBAAvBA,EACuB9qC,CAAA+qC,2BADvBD;AAEuB9qC,CAAAgrC,kCAL3B,CAOIC,EAAe,CAAEL,CAAAA,CAPrB,CAQIM,EAAMD,CAAA,CACN,QAAQ,CAAC7gD,CAAD,CAAK,CACX,IAAI2oB,EAAK63B,CAAA,CAAsBxgD,CAAtB,CACT,OAAO,SAAQ,EAAG,CAChB0gD,CAAA,CAAqB/3B,CAArB,CADgB,CAFP,CADP,CAON,QAAQ,CAAC3oB,CAAD,CAAK,CACX,IAAI+gD,EAAQrrC,CAAA,CAAS1V,CAAT,CAAa,KAAb,CAAoB,CAAA,CAApB,CACZ,OAAO,SAAQ,EAAG,CAChB0V,CAAAgS,OAAA,CAAgBq5B,CAAhB,CADgB,CAFP,CAOjBD,EAAAE,UAAA,CAAgBH,CAEhB,OAAOC,EAzBuD,CAApD,CADW,CAmGzBvsC,QAASA,GAAkB,EAAG,CAa5B0sC,QAASA,EAAqB,CAAChmD,CAAD,CAAS,CACrCimD,QAASA,EAAU,EAAG,CACpB,IAAAC,WAAA,CAAkB,IAAAC,cAAlB,CACI,IAAAC,YADJ,CACuB,IAAAC,YADvB,CAC0C,IAC1C,KAAAC,YAAA,CAAmB,EACnB,KAAAC,gBAAA,CAAuB,EACvB,KAAAC,gBAAA,CAAuB,CACvB,KAAAC,IAAA,CAvijBG,EAAEroD,EAwijBL,KAAAsoD,aAAA,CAAoB,IACpB,KAAAC,YAAA,CAAmB,CAAA,CARC,CAUtBV,CAAAtiC,UAAA,CAAuB3jB,CACvB,OAAOimD,EAZ8B,CAZvC,IAAIt0B,EAAM,EAAV,CACIi1B,EAAmBnqD,CAAA,CAAO,YAAP,CADvB,CAEIoqD,EAAiB,IAFrB,CAGIC,EAAe,IAEnB,KAAAC,UAAA;AAAiBC,QAAQ,CAAC9oD,CAAD,CAAQ,CAC3BwB,SAAA1C,OAAJ,GACE20B,CADF,CACQzzB,CADR,CAGA,OAAOyzB,EAJwB,CAsBjC,KAAAjP,KAAA,CAAY,CAAC,mBAAD,CAAsB,QAAtB,CAAgC,UAAhC,CACR,QAAQ,CAACnL,CAAD,CAAoB4B,CAApB,CAA4BtC,CAA5B,CAAsC,CAEhDowC,QAASA,EAAiB,CAACC,CAAD,CAAS,CAC/BA,CAAAC,aAAAhmB,YAAA,CAAkC,CAAA,CADH,CAInCimB,QAASA,EAAY,CAACtnB,CAAD,CAAS,CAGf,CAAb,GAAI5Z,EAAJ,GAMM4Z,CAAAsmB,YAGJ,EAFEgB,CAAA,CAAatnB,CAAAsmB,YAAb,CAEF,CAAItmB,CAAAqmB,cAAJ,EACEiB,CAAA,CAAatnB,CAAAqmB,cAAb,CAVJ,CAqBArmB,EAAApK,QAAA,CAAiBoK,CAAAqmB,cAAjB,CAAwCrmB,CAAAunB,cAAxC,CAA+DvnB,CAAAsmB,YAA/D,CACItmB,CAAAumB,YADJ,CACyBvmB,CAAAwnB,MADzB,CACwCxnB,CAAAomB,WADxC,CAC4D,IAzBhC,CAoE9BqB,QAASA,EAAK,EAAG,CACf,IAAAd,IAAA,CA3njBG,EAAEroD,EA4njBL,KAAAowC,QAAA,CAAe,IAAA9Y,QAAf,CAA8B,IAAAwwB,WAA9B,CACe,IAAAC,cADf,CACoC,IAAAkB,cADpC,CAEe,IAAAjB,YAFf,CAEkC,IAAAC,YAFlC,CAEqD,IACrD,KAAAiB,MAAA;AAAa,IAEb,KAAAX,YAAA,CADA,IAAAxlB,YACA,CADmB,CAAA,CAEnB,KAAAmlB,YAAA,CAAmB,EACnB,KAAAC,gBAAA,CAAuB,EACvB,KAAAC,gBAAA,CAAuB,CACvB,KAAArqB,kBAAA,CAAyB,IAXV,CAwvCjBqrB,QAASA,EAAU,CAACC,CAAD,CAAQ,CACzB,GAAIpuC,CAAAm1B,QAAJ,CACE,KAAMoY,EAAA,CAAiB,QAAjB,CAAsDvtC,CAAAm1B,QAAtD,CAAN,CAGFn1B,CAAAm1B,QAAA,CAAqBiZ,CALI,CAY3BC,QAASA,EAAsB,CAAC7f,CAAD,CAAU6N,CAAV,CAAiB,CAC9C,EACE7N,EAAA2e,gBAAA,EAA2B9Q,CAD7B,OAEU7N,CAFV,CAEoBA,CAAAnS,QAFpB,CAD8C,CAMhDiyB,QAASA,EAAsB,CAAC9f,CAAD,CAAU6N,CAAV,CAAiB7sC,CAAjB,CAAuB,CACpD,EACEg/B,EAAA0e,gBAAA,CAAwB19C,CAAxB,CAEA,EAFiC6sC,CAEjC,CAAsC,CAAtC,GAAI7N,CAAA0e,gBAAA,CAAwB19C,CAAxB,CAAJ,EACE,OAAOg/B,CAAA0e,gBAAA,CAAwB19C,CAAxB,CAJX,OAMUg/B,CANV,CAMoBA,CAAAnS,QANpB,CADoD,CActDkyB,QAASA,EAAY,EAAG,EAExBC,QAASA,EAAe,EAAG,CACzB,IAAA,CAAOC,CAAA9qD,OAAP,CAAA,CACE,GAAI,CACF8qD,CAAAjiC,MAAA,EAAA,EADE,CAEF,MAAOxe,CAAP,CAAU,CACVkQ,CAAA,CAAkBlQ,CAAlB,CADU,CAIdy/C,CAAA,CAAe,IARU,CAW3BiB,QAASA,EAAkB,EAAG,CACP,IAArB,GAAIjB,CAAJ,GACEA,CADF,CACiBjwC,CAAAsV,MAAA,CAAe,QAAQ,EAAG,CACvC9S,CAAAnP,OAAA,CAAkB29C,CAAlB,CADuC,CAA1B;AAEZ,IAFY,CAEN,aAFM,CADjB,CAD4B,CA/vC9BN,CAAA5jC,UAAA,CAAkB,CAChBzgB,YAAaqkD,CADG,CA+BhB5xB,KAAMA,QAAQ,CAACqyB,CAAD,CAAUhoD,CAAV,CAAkB,CAC9B,IAAIioD,CAEJjoD,EAAA,CAASA,CAAT,EAAmB,IAEfgoD,EAAJ,EACEC,CACA,CADQ,IAAIV,CACZ,CAAAU,CAAAX,MAAA,CAAc,IAAAA,MAFhB,GAMO,IAAAZ,aAGL,GAFE,IAAAA,aAEF,CAFsBV,CAAA,CAAsB,IAAtB,CAEtB,EAAAiC,CAAA,CAAQ,IAAI,IAAAvB,aATd,CAWAuB,EAAAvyB,QAAA,CAAgB11B,CAChBioD,EAAAZ,cAAA,CAAsBrnD,CAAAqmD,YAClBrmD,EAAAomD,YAAJ,EACEpmD,CAAAqmD,YAAAF,cACA,CADmC8B,CACnC,CAAAjoD,CAAAqmD,YAAA,CAAqB4B,CAFvB,EAIEjoD,CAAAomD,YAJF,CAIuBpmD,CAAAqmD,YAJvB,CAI4C4B,CAQ5C,EAAID,CAAJ,EAAehoD,CAAf,GAA0B,IAA1B,GAAgCioD,CAAA1rB,IAAA,CAAU,UAAV,CAAsB0qB,CAAtB,CAEhC,OAAOgB,EAhCuB,CA/BhB,CAwLhB9mD,OAAQA,QAAQ,CAAC+mD,CAAD,CAAW/9B,CAAX,CAAqB4oB,CAArB,CAAqC4N,CAArC,CAA4D,CAC1E,IAAI31C,EAAMmO,CAAA,CAAO+uC,CAAP,CACNnjD,EAAAA,CAAKxH,CAAA,CAAW4sB,CAAX,CAAA,CAAuBA,CAAvB,CAAkChqB,CAE3C,IAAI6K,CAAAyoC,gBAAJ,CACE,MAAOzoC,EAAAyoC,gBAAA,CAAoB,IAApB,CAA0B1uC,CAA1B,CAA8BguC,CAA9B,CAA8C/nC,CAA9C,CAAmDk9C,CAAnD,CALiE,KAOtEl+C,EAAQ,IAP8D,CAQtE9H,EAAQ8H,CAAAk8C,WAR8D,CAStEiC;AAAU,CACRpjD,GAAIA,CADI,CAERqjD,KAAMR,CAFE,CAGR58C,IAAKA,CAHG,CAIRwoC,IAAKmN,CAALnN,EAA8B0U,CAJtB,CAKRG,GAAI,CAAEtV,CAAAA,CALE,CAQd8T,EAAA,CAAiB,IAEZ3kD,EAAL,GACEA,CACA,CADQ8H,CAAAk8C,WACR,CAD2B,EAC3B,CAAAhkD,CAAAomD,mBAAA,CAA4B,EAF9B,CAMApmD,EAAAuH,QAAA,CAAc0+C,CAAd,CACAjmD,EAAAomD,mBAAA,EACAZ,EAAA,CAAuB,IAAvB,CAA6B,CAA7B,CAEA,OAAOa,SAAwB,EAAG,CAChC,IAAIpmD,EAAQF,EAAA,CAAYC,CAAZ,CAAmBimD,CAAnB,CACC,EAAb,EAAIhmD,CAAJ,GACEulD,CAAA,CAAuB19C,CAAvB,CAA+B,EAA/B,CACA,CAAI7H,CAAJ,CAAYD,CAAAomD,mBAAZ,EACEpmD,CAAAomD,mBAAA,EAHJ,CAMAzB,EAAA,CAAiB,IARe,CA7BwC,CAxL5D,CA0PhBxS,YAAaA,QAAQ,CAACmU,CAAD,CAAmBr+B,CAAnB,CAA6B,CAuChDs+B,QAASA,EAAgB,EAAG,CAC1BC,CAAA,CAA0B,CAAA,CAE1B,IAAI,CACEC,CAAJ,EACEA,CACA,CADW,CAAA,CACX,CAAAx+B,CAAA,CAASy+B,CAAT,CAAoBA,CAApB,CAA+B9jD,CAA/B,CAFF,EAIEqlB,CAAA,CAASy+B,CAAT,CAAoBrU,CAApB,CAA+BzvC,CAA/B,CALA,CAAJ,OAOU,CACR,IAAS,IAAA/G,EAAI,CAAb,CAAgBA,CAAhB,CAAoByqD,CAAAxrD,OAApB,CAA6Ce,CAAA,EAA7C,CACEw2C,CAAA,CAAUx2C,CAAV,CAAA,CAAe6qD,CAAA,CAAU7qD,CAAV,CAFT,CAVgB,CAtC5B,IAAIw2C,EAAgB1zC,KAAJ,CAAU2nD,CAAAxrD,OAAV,CAAhB,CACI4rD,EAAgB/nD,KAAJ,CAAU2nD,CAAAxrD,OAAV,CADhB,CAEI6rD,EAAgB,EAFpB,CAGI/jD,EAAO,IAHX,CAII4jD,EAA0B,CAAA,CAJ9B,CAKIC,EAAW,CAAA,CAEf,IAAK3rD,CAAAwrD,CAAAxrD,OAAL,CAA8B,CAE5B,IAAI8rD,EAAa,CAAA,CACjBhkD,EAAA5D,WAAA,CAAgB,QAAQ,EAAG,CACrB4nD,CAAJ,EAAgB3+B,CAAA,CAASy+B,CAAT,CAAoBA,CAApB,CAA+B9jD,CAA/B,CADS,CAA3B,CAGA,OAAOikD,SAA6B,EAAG,CACrCD,CAAA;AAAa,CAAA,CADwB,CANX,CAW9B,GAAgC,CAAhC,GAAIN,CAAAxrD,OAAJ,CAEE,MAAO,KAAAmE,OAAA,CAAYqnD,CAAA,CAAiB,CAAjB,CAAZ,CAAiCC,QAAyB,CAACvqD,CAAD,CAAQ+lC,CAAR,CAAkBj6B,CAAlB,CAAyB,CACxF4+C,CAAA,CAAU,CAAV,CAAA,CAAe1qD,CACfq2C,EAAA,CAAU,CAAV,CAAA,CAAetQ,CACf9Z,EAAA,CAASy+B,CAAT,CAAqB1qD,CAAD,GAAW+lC,CAAX,CAAuB2kB,CAAvB,CAAmCrU,CAAvD,CAAkEvqC,CAAlE,CAHwF,CAAnF,CAOT7M,EAAA,CAAQqrD,CAAR,CAA0B,QAAQ,CAACpL,CAAD,CAAOr/C,CAAP,CAAU,CAC1C,IAAIirD,EAAYlkD,CAAA3D,OAAA,CAAYi8C,CAAZ,CAAkB6L,QAA4B,CAAC/qD,CAAD,CAAQ,CACpE0qD,CAAA,CAAU7qD,CAAV,CAAA,CAAeG,CACVwqD,EAAL,GACEA,CACA,CAD0B,CAAA,CAC1B,CAAA5jD,CAAA5D,WAAA,CAAgBunD,CAAhB,CAFF,CAFoE,CAAtD,CAOhBI,EAAAnmD,KAAA,CAAmBsmD,CAAnB,CAR0C,CAA5C,CA4BA,OAAOD,SAA6B,EAAG,CACrC,IAAA,CAAOF,CAAA7rD,OAAP,CAAA,CACE6rD,CAAAhjC,MAAA,EAAA,EAFmC,CAxDS,CA1PlC,CAiXhBogB,iBAAkBA,QAAQ,CAACtpC,CAAD,CAAMwtB,CAAN,CAAgB,CAwBxC++B,QAASA,EAA2B,CAACC,CAAD,CAAS,CAC3CrlB,CAAA,CAAWqlB,CADgC,KAE5B7rD,CAF4B,CAEvB8rD,CAFuB,CAEdC,CAFc,CAELC,CAGtC,IAAI,CAAA5oD,CAAA,CAAYojC,CAAZ,CAAJ,CAAA,CAEA,GAAK/nC,CAAA,CAAS+nC,CAAT,CAAL,CAKO,GAAIpnC,EAAA,CAAYonC,CAAZ,CAAJ,CAgBL,IAfIG,CAeKlmC,GAfQwrD,CAeRxrD,GAbPkmC,CAEA,CAFWslB,CAEX,CADAC,CACA,CADYvlB,CAAAjnC,OACZ,CAD8B,CAC9B,CAAAysD,CAAA,EAWO1rD,EART2rD,CAQS3rD,CARG+lC,CAAA9mC,OAQHe,CANLyrD,CAMKzrD,GANS2rD,CAMT3rD,GAJP0rD,CAAA,EACA,CAAAxlB,CAAAjnC,OAAA,CAAkBwsD,CAAlB,CAA8BE,CAGvB3rD,EAAAA,CAAAA,CAAI,CAAb,CAAgBA,CAAhB,CAAoB2rD,CAApB,CAA+B3rD,CAAA,EAA/B,CACEurD,CAKA,CALUrlB,CAAA,CAASlmC,CAAT,CAKV,CAJAsrD,CAIA,CAJUvlB,CAAA,CAAS/lC,CAAT,CAIV,CADAqrD,CACA,CADWE,CACX,GADuBA,CACvB,EADoCD,CACpC,GADgDA,CAChD,CAAKD,CAAL,EAAiBE,CAAjB,GAA6BD,CAA7B,GACEI,CAAA,EACA,CAAAxlB,CAAA,CAASlmC,CAAT,CAAA,CAAcsrD,CAFhB,CAtBG,KA2BA,CACDplB,CAAJ,GAAiB0lB,CAAjB,GAEE1lB,CAEA,CAFW0lB,CAEX,CAF4B,EAE5B,CADAH,CACA,CADY,CACZ,CAAAC,CAAA,EAJF,CAOAC,EAAA,CAAY,CACZ,KAAKpsD,CAAL,GAAYwmC,EAAZ,CACMtmC,EAAAC,KAAA,CAAoBqmC,CAApB;AAA8BxmC,CAA9B,CAAJ,GACEosD,CAAA,EAIA,CAHAL,CAGA,CAHUvlB,CAAA,CAASxmC,CAAT,CAGV,CAFAgsD,CAEA,CAFUrlB,CAAA,CAAS3mC,CAAT,CAEV,CAAIA,CAAJ,GAAW2mC,EAAX,EAEEmlB,CACA,CADWE,CACX,GADuBA,CACvB,EADoCD,CACpC,GADgDA,CAChD,CAAKD,CAAL,EAAiBE,CAAjB,GAA6BD,CAA7B,GACEI,CAAA,EACA,CAAAxlB,CAAA,CAAS3mC,CAAT,CAAA,CAAgB+rD,CAFlB,CAHF,GAQEG,CAAA,EAEA,CADAvlB,CAAA,CAAS3mC,CAAT,CACA,CADgB+rD,CAChB,CAAAI,CAAA,EAVF,CALF,CAmBF,IAAID,CAAJ,CAAgBE,CAAhB,CAGE,IAAKpsD,CAAL,GADAmsD,EAAA,EACYxlB,CAAAA,CAAZ,CACOzmC,EAAAC,KAAA,CAAoBqmC,CAApB,CAA8BxmC,CAA9B,CAAL,GACEksD,CAAA,EACA,CAAA,OAAOvlB,CAAA,CAAS3mC,CAAT,CAFT,CAjCC,CAhCP,IACM2mC,EAAJ,GAAiBH,CAAjB,GACEG,CACA,CADWH,CACX,CAAA2lB,CAAA,EAFF,CAuEF,OAAOA,EA1EP,CAL2C,CArB7CP,CAAA9G,OAAA,CAAqCjpC,CAAA,CAAOxc,CAAP,CAAAipC,QAErCsjB,EAAAljB,UAAA,CAAwC,CAACkjB,CAAA9G,OAEzC,KAAIt9C,EAAO,IAAX,CAEIg/B,CAFJ,CAKIG,CALJ,CAOI2lB,CAPJ,CASIC,EAAuC,CAAvCA,CAAqB1/B,CAAAntB,OATzB,CAUIysD,EAAiB,CAVrB,CAWIK,EAAiB3wC,CAAA,CAAOxc,CAAP,CAAYusD,CAAZ,CAXrB,CAYIK,EAAgB,EAZpB,CAaII,EAAiB,EAbrB,CAcII,EAAU,CAAA,CAdd,CAeIP,EAAY,CAiHhB,OAAO,KAAAroD,OAAA,CAAY2oD,CAAZ,CA7BPE,QAA+B,EAAG,CAC5BD,CAAJ,EACEA,CACA,CADU,CAAA,CACV,CAAA5/B,CAAA,CAAS2Z,CAAT,CAAmBA,CAAnB,CAA6Bh/B,CAA7B,CAFF,EAIEqlB,CAAA,CAAS2Z,CAAT,CAAmB8lB,CAAnB,CAAiC9kD,CAAjC,CAIF,IAAI+kD,CAAJ,CACE,GAAK9tD,CAAA,CAAS+nC,CAAT,CAAL,CAGO,GAAIpnC,EAAA,CAAYonC,CAAZ,CAAJ,CAA2B,CAChC8lB,CAAA,CAAmB/oD,KAAJ,CAAUijC,CAAA9mC,OAAV,CACf,KAAS,IAAAe,EAAI,CAAb,CAAgBA,CAAhB,CAAoB+lC,CAAA9mC,OAApB,CAAqCe,CAAA,EAArC,CACE6rD,CAAA,CAAa7rD,CAAb,CAAA,CAAkB+lC,CAAA,CAAS/lC,CAAT,CAHY,CAA3B,IAOL,KAAST,CAAT,GADAssD,EACgB9lB,CADD,EACCA,CAAAA,CAAhB,CACMtmC,EAAAC,KAAA,CAAoBqmC,CAApB,CAA8BxmC,CAA9B,CAAJ,GACEssD,CAAA,CAAatsD,CAAb,CADF,CACsBwmC,CAAA,CAASxmC,CAAT,CADtB,CAXJ,KAEEssD,EAAA,CAAe9lB,CAZa,CA6B3B,CAvIiC,CAjX1B,CA8iBhB8W,QAASA,QAAQ,EAAG,CAAA,IACdqP,CADc;AACP/rD,CADO,CACAkqD,CADA,CACMrjD,CADN,CACUiG,CADV,CAEdk/C,CAFc,CAGdC,CAHc,CAGPC,EAAMz4B,CAHC,CAIRkW,CAJQ,CAICvlB,EAAS+nC,CAAArtD,OAAA,CAAoBqc,CAApB,CAAiC,IAJ3C,CAKdixC,EAAW,EALG,CAMdC,CANc,CAMNC,CAEZhD,EAAA,CAAW,SAAX,CAEA3wC,EAAAmV,iBAAA,EAEI,KAAJ,GAAa3S,CAAb,EAA4C,IAA5C,GAA2BytC,CAA3B,GAGEjwC,CAAAsV,MAAAM,OAAA,CAAsBq6B,CAAtB,CACA,CAAAe,CAAA,EAJF,CAOAhB,EAAA,CAAiB,IAEjB,GAAG,CACDsD,CAAA,CAAQ,CAAA,CACRtiB,EAAA,CAAUvlB,CAKV,KAASmoC,CAAT,CAA8B,CAA9B,CAAiCA,CAAjC,CAAsDJ,CAAArtD,OAAtD,CAAyEytD,CAAA,EAAzE,CAA+F,CAC7F,GAAI,CACFD,CAEA,CAFYH,CAAA,CAAWI,CAAX,CAEZ,CADA1lD,CACA,CADKylD,CAAAzlD,GACL,CAAAA,CAAA,CAAGylD,CAAAxgD,MAAH,CAAoBwgD,CAAAzkC,OAApB,CAHE,CAIF,MAAO1e,CAAP,CAAU,CACVkQ,CAAA,CAAkBlQ,CAAlB,CADU,CAGZw/C,CAAA,CAAiB,IAR4E,CAU/FwD,CAAArtD,OAAA,CAAoB,CAEpB,EAAA,CACA,EAAG,CACD,GAAKktD,CAAL,CAAgB,CAACriB,CAAA8e,YAAjB,EAAwC9e,CAAAqe,WAAxC,CAGE,IADAgE,CAAA5B,mBACA,CAD8B4B,CAAAltD,OAC9B,CAAOktD,CAAA5B,mBAAA,EAAP,CAAA,CACE,GAAI,CAIF,GAHA2B,CAGA,CAHQC,CAAA,CAASA,CAAA5B,mBAAT,CAGR,CAEE,GADAt9C,CACI,CADEi/C,CAAAj/C,IACF,EAAC9M,CAAD,CAAS8M,CAAA,CAAI68B,CAAJ,CAAT,KAA4BugB,CAA5B,CAAmC6B,CAAA7B,KAAnC,GACE,EAAA6B,CAAA5B,GAAA,CACIpkD,EAAA,CAAO/F,CAAP,CAAckqD,CAAd,CADJ,CAEKjiD,CAAA,CAAYjI,CAAZ,CAFL,EAE2BiI,CAAA,CAAYiiD,CAAZ,CAF3B,CADN,CAIE+B,CAKA,CALQ,CAAA,CAKR,CAJAtD,CAIA,CAJiBoD,CAIjB,CAHAA,CAAA7B,KAGA,CAHa6B,CAAA5B,GAAA,CAAW/lD,EAAA,CAAKpE,CAAL,CAAY,IAAZ,CAAX,CAA+BA,CAG5C,CAFA6G,CAEA,CAFKklD,CAAAllD,GAEL,CADAA,CAAA,CAAG7G,CAAH,CAAYkqD,CAAD,GAAUR,CAAV,CAA0B1pD,CAA1B,CAAkCkqD,CAA7C,CAAoDvgB,CAApD,CACA,CAAU,CAAV,CAAIuiB,CAAJ,GACEG,CAEA,CAFS,CAET,CAFaH,CAEb,CADKE,CAAA,CAASC,CAAT,CACL;CADuBD,CAAA,CAASC,CAAT,CACvB,CAD0C,EAC1C,EAAAD,CAAA,CAASC,CAAT,CAAA7nD,KAAA,CAAsB,CACpBgoD,IAAKntD,CAAA,CAAW0sD,CAAAzW,IAAX,CAAA,CAAwB,MAAxB,EAAkCyW,CAAAzW,IAAA3qC,KAAlC,EAAoDohD,CAAAzW,IAAA/yC,SAAA,EAApD,EAA4EwpD,CAAAzW,IAD7D,CAEpBzqB,OAAQ7qB,CAFY,CAGpB8qB,OAAQo/B,CAHY,CAAtB,CAHF,CATF,KAkBO,IAAI6B,CAAJ,GAAcpD,CAAd,CAA8B,CAGnCsD,CAAA,CAAQ,CAAA,CACR,OAAM,CAJ6B,CAxBrC,CA+BF,MAAO9iD,CAAP,CAAU,CACVkQ,CAAA,CAAkBlQ,CAAlB,CADU,CAWhB,GAAM,EAAAsjD,CAAA,CAAS,CAAC9iB,CAAA8e,YAAV,EAAiC9e,CAAA2e,gBAAjC,EAA4D3e,CAAAue,YAA5D,EACDve,CADC,GACWvlB,CADX,EACqBulB,CAAAse,cADrB,CAAN,CAEE,IAAA,CAAOte,CAAP,GAAmBvlB,CAAnB,EAA+B,EAAAqoC,CAAA,CAAO9iB,CAAAse,cAAP,CAA/B,CAAA,CACEte,CAAA,CAAUA,CAAAnS,QAlDb,CAAH,MAqDUmS,CArDV,CAqDoB8iB,CArDpB,CAyDA,KAAKR,CAAL,EAAcE,CAAArtD,OAAd,GAAsC,CAAAotD,CAAA,EAAtC,CAEE,KAykBN/wC,EAAAm1B,QAzkBY,CAykBS,IAzkBT,CAAAoY,CAAA,CAAiB,QAAjB,CAGFj1B,CAHE,CAGG24B,CAHH,CAAN,CA/ED,CAAH,MAqFSH,CArFT,EAqFkBE,CAAArtD,OArFlB,CA0FA,KA8jBFqc,CAAAm1B,QA9jBE,CA8jBmB,IA9jBnB,CAAOoc,CAAP,CAAiCC,CAAA7tD,OAAjC,CAAA,CACE,GAAI,CACF6tD,CAAA,CAAgBD,CAAA,EAAhB,CAAA,EADE,CAEF,MAAOvjD,CAAP,CAAU,CACVkQ,CAAA,CAAkBlQ,CAAlB,CADU,CAIdwjD,CAAA7tD,OAAA,CAAyB4tD,CAAzB,CAAmD,CAInD/zC,EAAAmV,iBAAA,EA1HkB,CA9iBJ,CAstBhB8+B,SAAUA,QAAQ,EAAG,CACnB,IAAAnE,YAAA,CAAmB,CAAA,CADA,CAttBL,CAmvBhBoE,aAAcA,QAAQ,EAAG,CACvB,MAAO,KAAApE,YADgB,CAnvBT;AAiwBhBqE,QAASA,QAAQ,EAAG,CAClB,IAAArE,YAAA,CAAmB,CAAA,CADD,CAjwBJ,CAuyBhBl6C,SAAUA,QAAQ,EAAG,CAEnB,GAAI00B,CAAA,IAAAA,YAAJ,CAAA,CACA,IAAInhC,EAAS,IAAA01B,QAEb,KAAAkkB,WAAA,CAAgB,UAAhB,CACA,KAAAzY,YAAA,CAAmB,CAAA,CAEf,KAAJ,GAAa9nB,CAAb,EAEExC,CAAAgV,uBAAA,EAGF67B,EAAA,CAAuB,IAAvB,CAA6B,CAAC,IAAAlB,gBAA9B,CACA,KAASyE,IAAAA,CAAT,GAAsB,KAAA1E,gBAAtB,CACEoB,CAAA,CAAuB,IAAvB,CAA6B,IAAApB,gBAAA,CAAqB0E,CAArB,CAA7B,CAA8DA,CAA9D,CAKEjrD,EAAJ,EAAcA,CAAAomD,YAAd,GAAqC,IAArC,GAA2CpmD,CAAAomD,YAA3C,CAAgE,IAAAD,cAAhE,CACInmD,EAAJ,EAAcA,CAAAqmD,YAAd,GAAqC,IAArC,GAA2CrmD,CAAAqmD,YAA3C,CAAgE,IAAAgB,cAAhE,CACI,KAAAA,cAAJ,GAAwB,IAAAA,cAAAlB,cAAxB,CAA2D,IAAAA,cAA3D,CACI,KAAAA,cAAJ,GAAwB,IAAAA,cAAAkB,cAAxB;AAA2D,IAAAA,cAA3D,CAGA,KAAA56C,SAAA,CAAgB,IAAAmuC,QAAhB,CAA+B,IAAA1wC,OAA/B,CAA6C,IAAAhJ,WAA7C,CAA+D,IAAAqtC,YAA/D,CAAkFpuC,CAClF,KAAAo8B,IAAA,CAAW,IAAAp7B,OAAX,CAAyB,IAAAkzC,YAAzB,CAA4C6W,QAAQ,EAAG,CAAE,MAAO/qD,EAAT,CACvD,KAAAmmD,YAAA,CAAmB,EAGnB,KAAAH,cAAA,CAAqB,IACrBiB,EAAA,CAAa,IAAb,CA9BA,CAFmB,CAvyBL,CAs2BhB+D,MAAOA,QAAQ,CAAC/N,CAAD,CAAOr3B,CAAP,CAAe,CAC5B,MAAO5M,EAAA,CAAOikC,CAAP,CAAA,CAAa,IAAb,CAAmBr3B,CAAnB,CADqB,CAt2Bd,CAw4BhB7kB,WAAYA,QAAQ,CAACk8C,CAAD,CAAOr3B,CAAP,CAAe,CAG5B1M,CAAAm1B,QAAL,EAA4B6b,CAAArtD,OAA5B,EACE6Z,CAAAsV,MAAA,CAAe,QAAQ,EAAG,CACpBk+B,CAAArtD,OAAJ,EACEqc,CAAAuhC,QAAA,EAFsB,CAA1B,CAIG,IAJH,CAIS,YAJT,CAOFyP,EAAA3nD,KAAA,CAAgB,CAACsH,MAAO,IAAR,CAAcjF,GAAIoU,CAAA,CAAOikC,CAAP,CAAlB,CAAgCr3B,OAAQA,CAAxC,CAAhB,CAXiC,CAx4BnB,CAs5BhBgf,aAAcA,QAAQ,CAAChgC,CAAD,CAAK,CACzB8lD,CAAAnoD,KAAA,CAAqBqC,CAArB,CADyB,CAt5BX,CAs8BhBmF,OAAQA,QAAQ,CAACkzC,CAAD,CAAO,CACrB,GAAI,CACFoK,CAAA,CAAW,QAAX,CACA,IAAI,CACF,MAAO,KAAA2D,MAAA,CAAW/N,CAAX,CADL,CAAJ,OAEU,CAgRd/jC,CAAAm1B,QAAA;AAAqB,IAhRP,CAJR,CAOF,MAAOnnC,CAAP,CAAU,CACVkQ,CAAA,CAAkBlQ,CAAlB,CADU,CAPZ,OASU,CACR,GAAI,CACFgS,CAAAuhC,QAAA,EADE,CAEF,MAAOvzC,CAAP,CAAU,CAGV,KAFAkQ,EAAA,CAAkBlQ,CAAlB,CAEMA,CAAAA,CAAN,CAHU,CAHJ,CAVW,CAt8BP,CA4+BhBknC,YAAaA,QAAQ,CAAC6O,CAAD,CAAO,CAQ1BgO,QAASA,EAAqB,EAAG,CAC/BphD,CAAAmhD,MAAA,CAAY/N,CAAZ,CAD+B,CAPjC,IAAIpzC,EAAQ,IACRozC,EAAJ,EACE0K,CAAAplD,KAAA,CAAqB0oD,CAArB,CAEFhO,EAAA,CAAOjkC,CAAA,CAAOikC,CAAP,CACP2K,EAAA,EAN0B,CA5+BZ,CAohChBxrB,IAAKA,QAAQ,CAAC1zB,CAAD,CAAOshB,CAAP,CAAiB,CAC5B,IAAIkhC,EAAiB,IAAA/E,YAAA,CAAiBz9C,CAAjB,CAChBwiD,EAAL,GACE,IAAA/E,YAAA,CAAiBz9C,CAAjB,CADF,CAC2BwiD,CAD3B,CAC4C,EAD5C,CAGAA,EAAA3oD,KAAA,CAAoBynB,CAApB,CAEA,KAAI0d,EAAU,IACd,GACOA,EAAA0e,gBAAA,CAAwB19C,CAAxB,CAGL,GAFEg/B,CAAA0e,gBAAA,CAAwB19C,CAAxB,CAEF,CAFkC,CAElC,EAAAg/B,CAAA0e,gBAAA,CAAwB19C,CAAxB,CAAA,EAJF,OAKUg/B,CALV,CAKoBA,CAAAnS,QALpB,CAOA,KAAI5wB,EAAO,IACX,OAAO,SAAQ,EAAG,CAChB,IAAIwmD,EAAkBD,CAAAjpD,QAAA,CAAuB+nB,CAAvB,CACG,GAAzB,GAAImhC,CAAJ,GAIE,OAAOD,CAAA,CAAeC,CAAf,CACP,CAAA3D,CAAA,CAAuB7iD,CAAvB,CAA6B,CAA7B,CAAgC+D,CAAhC,CALF,CAFgB,CAhBU,CAphCd,CAukChB0iD,MAAOA,QAAQ,CAAC1iD,CAAD,CAAOmb,CAAP,CAAa,CAAA,IACtBjd,EAAQ,EADc,CAEtBskD,CAFsB,CAGtBrhD,EAAQ,IAHc,CAItB8X,EAAkB,CAAA,CAJI,CAKtBV,EAAQ,CACNvY,KAAMA,CADA,CAEN2iD,YAAaxhD,CAFP,CAGN8X,gBAAiBA,QAAQ,EAAG,CAACA,CAAA;AAAkB,CAAA,CAAnB,CAHtB,CAIN04B,eAAgBA,QAAQ,EAAG,CACzBp5B,CAAAG,iBAAA,CAAyB,CAAA,CADA,CAJrB,CAONA,iBAAkB,CAAA,CAPZ,CALc,CActBkqC,EAAe/mD,EAAA,CAAO,CAAC0c,CAAD,CAAP,CAAgB1hB,SAAhB,CAA2B,CAA3B,CAdO,CAetB3B,CAfsB,CAenBf,CAEP,GAAG,CACDquD,CAAA,CAAiBrhD,CAAAs8C,YAAA,CAAkBz9C,CAAlB,CAAjB,EAA4C9B,CAC5Cqa,EAAA+lC,aAAA,CAAqBn9C,CAChBjM,EAAA,CAAI,CAAT,KAAYf,CAAZ,CAAqBquD,CAAAruD,OAArB,CAA4Ce,CAA5C,CAAgDf,CAAhD,CAAwDe,CAAA,EAAxD,CAGE,GAAKstD,CAAA,CAAettD,CAAf,CAAL,CAMA,GAAI,CAEFstD,CAAA,CAAettD,CAAf,CAAAmH,MAAA,CAAwB,IAAxB,CAA8BumD,CAA9B,CAFE,CAGF,MAAOpkD,CAAP,CAAU,CACVkQ,CAAA,CAAkBlQ,CAAlB,CADU,CATZ,IACEgkD,EAAAhpD,OAAA,CAAsBtE,CAAtB,CAAyB,CAAzB,CAEA,CADAA,CAAA,EACA,CAAAf,CAAA,EAWJ,IAAI8kB,CAAJ,CACE,KAGF9X,EAAA,CAAQA,CAAA0rB,QAxBP,CAAH,MAyBS1rB,CAzBT,CA2BAoX,EAAA+lC,aAAA,CAAqB,IAErB,OAAO/lC,EA9CmB,CAvkCZ,CA8oChBw4B,WAAYA,QAAQ,CAAC/wC,CAAD,CAAOmb,CAAP,CAAa,CAAA,IAE3B6jB,EADSvlB,IADkB,CAG3BqoC,EAFSroC,IADkB,CAI3BlB,EAAQ,CACNvY,KAAMA,CADA,CAEN2iD,YALOlpC,IAGD,CAGNk4B,eAAgBA,QAAQ,EAAG,CACzBp5B,CAAAG,iBAAA,CAAyB,CAAA,CADA,CAHrB,CAMNA,iBAAkB,CAAA,CANZ,CASZ,IAAK,CAZQe,IAYRikC,gBAAA,CAAuB19C,CAAvB,CAAL,CAAmC,MAAOuY,EAM1C,KAnB+B,IAe3BqqC,EAAe/mD,EAAA,CAAO,CAAC0c,CAAD,CAAP,CAAgB1hB,SAAhB;AAA2B,CAA3B,CAfY,CAgBhB3B,CAhBgB,CAgBbf,CAGlB,CAAQ6qC,CAAR,CAAkB8iB,CAAlB,CAAA,CAAyB,CACvBvpC,CAAA+lC,aAAA,CAAqBtf,CACrBV,EAAA,CAAYU,CAAAye,YAAA,CAAoBz9C,CAApB,CAAZ,EAAyC,EACpC9K,EAAA,CAAI,CAAT,KAAYf,CAAZ,CAAqBmqC,CAAAnqC,OAArB,CAAuCe,CAAvC,CAA2Cf,CAA3C,CAAmDe,CAAA,EAAnD,CAEE,GAAKopC,CAAA,CAAUppC,CAAV,CAAL,CAOA,GAAI,CACFopC,CAAA,CAAUppC,CAAV,CAAAmH,MAAA,CAAmB,IAAnB,CAAyBumD,CAAzB,CADE,CAEF,MAAOpkD,CAAP,CAAU,CACVkQ,CAAA,CAAkBlQ,CAAlB,CADU,CATZ,IACE8/B,EAAA9kC,OAAA,CAAiBtE,CAAjB,CAAoB,CAApB,CAEA,CADAA,CAAA,EACA,CAAAf,CAAA,EAgBJ,IAAM,EAAA2tD,CAAA,CAAS9iB,CAAA0e,gBAAA,CAAwB19C,CAAxB,CAAT,EAA0Cg/B,CAAAue,YAA1C,EACDve,CADC,GA1CKvlB,IA0CL,EACqBulB,CAAAse,cADrB,CAAN,CAEE,IAAA,CAAOte,CAAP,GA5CSvlB,IA4CT,EAA+B,EAAAqoC,CAAA,CAAO9iB,CAAAse,cAAP,CAA/B,CAAA,CACEte,CAAA,CAAUA,CAAAnS,QA3BS,CAgCzBtU,CAAA+lC,aAAA,CAAqB,IACrB,OAAO/lC,EApDwB,CA9oCjB,CAssClB,KAAI/H,EAAa,IAAIkuC,CAArB,CAGI8C,EAAahxC,CAAAqyC,aAAbrB,CAAuC,EAH3C,CAIIQ,EAAkBxxC,CAAAsyC,kBAAlBd,CAAiD,EAJrD,CAKI/C,EAAkBzuC,CAAAuyC,kBAAlB9D,CAAiD,EALrD,CAOI8C,EAA0B,CAE9B,OAAOvxC,EA/zCyC,CADtC,CA5BgB,CA06C9B9I,QAASA,GAAqB,EAAG,CAAA,IAE3B2gB,EAA6B,qCAFF,CAG7BG,EAA8B,4CAsBhC;IAAAH,2BAAA,CAAkCC,QAAQ,CAACC,CAAD,CAAS,CACjD,MAAIp1B,EAAA,CAAUo1B,CAAV,CAAJ,EACEF,CACO,CADsBE,CACtB,CAAA,IAFT,EAIOF,CAL0C,CA8BnD,KAAAG,4BAAA,CAAmCC,QAAQ,CAACF,CAAD,CAAS,CAClD,MAAIp1B,EAAA,CAAUo1B,CAAV,CAAJ,EACEC,CACO,CADuBD,CACvB,CAAA,IAFT,EAIOC,CAL2C,CAQpD,KAAA3O,KAAA,CAAYC,QAAQ,EAAG,CACrB,MAAOkpC,SAAoB,CAACC,CAAD,CAAMC,CAAN,CAAkB,CAE3C,IAAIC,EAAQD,CAAA,CAAa16B,CAAb,CAA2CH,CAAvD,CACI+6B,EAAgB7gC,EAAA,CAAW0gC,CAAX,EAAkBA,CAAA5uC,KAAA,EAAlB,CAAA6N,KACpB,OAAsB,EAAtB,GAAIkhC,CAAJ,EAA6BA,CAAAtoD,MAAA,CAAoBqoD,CAApB,CAA7B,CAGOF,CAHP,CACS,SADT,CACqBG,CALsB,CADxB,CA/DQ,CA4HjCC,QAASA,GAAa,CAACC,CAAD,CAAU,CAC9B,GAAgB,MAAhB,GAAIA,CAAJ,CACE,MAAOA,EACF,IAAIrvD,CAAA,CAASqvD,CAAT,CAAJ,CAAuB,CAK5B,GAA8B,EAA9B,CAAIA,CAAA/pD,QAAA,CAAgB,KAAhB,CAAJ,CACE,KAAMgqD,GAAA,CAAW,QAAX,CACsDD,CADtD,CAAN,CAGFA,CAAA,CAAUE,EAAA,CAAgBF,CAAhB,CAAAnmD,QAAA,CACY,WADZ,CACyB,IADzB,CAAAA,QAAA,CAEY,OAFZ,CAEqB,YAFrB,CAGV,OAAO,KAAI7G,MAAJ,CAAW,GAAX,CAAiBgtD,CAAjB,CAA2B,GAA3B,CAZqB,CAavB,GAAIjtD,EAAA,CAASitD,CAAT,CAAJ,CAIL,MAAO,KAAIhtD,MAAJ,CAAW,GAAX,CAAiBgtD,CAAA5pD,OAAjB,CAAkC,GAAlC,CAEP,MAAM6pD,GAAA,CAAW,UAAX,CAAN;AAtB4B,CA4BhCE,QAASA,GAAc,CAACC,CAAD,CAAW,CAChC,IAAIC,EAAmB,EACnBxwD,EAAA,CAAUuwD,CAAV,CAAJ,EACEpvD,CAAA,CAAQovD,CAAR,CAAkB,QAAQ,CAACJ,CAAD,CAAU,CAClCK,CAAA9pD,KAAA,CAAsBwpD,EAAA,CAAcC,CAAd,CAAtB,CADkC,CAApC,CAIF,OAAOK,EAPyB,CAqGlC1yC,QAASA,GAAoB,EAAG,CAC9B,IAAAgZ,aAAA,CAAoBA,CADU,KAI1B25B,EAAuB,CAAC,MAAD,CAJG,CAK1BC,EAAuB,EA0B3B,KAAAD,qBAAA,CAA4BE,QAAQ,CAACzuD,CAAD,CAAQ,CACtCwB,SAAA1C,OAAJ,GACEyvD,CADF,CACyBH,EAAA,CAAepuD,CAAf,CADzB,CAGA,OAAOuuD,EAJmC,CAgC5C,KAAAC,qBAAA,CAA4BE,QAAQ,CAAC1uD,CAAD,CAAQ,CACtCwB,SAAA1C,OAAJ,GACE0vD,CADF,CACyBJ,EAAA,CAAepuD,CAAf,CADzB,CAGA,OAAOwuD,EAJmC,CAO5C,KAAAhqC,KAAA,CAAY,CAAC,WAAD,CAAc,eAAd,CAA+B,QAAQ,CAACgE,CAAD,CAAYpW,CAAZ,CAA2B,CAW5Eu8C,QAASA,EAAQ,CAACV,CAAD,CAAUhW,CAAV,CAAqB,CACpC,IAAA,CAAgB,OAAhB,GAAIgW,CAAJ,EACS,CADT,CACS,EAAA,CAAA,CAAA,CAAA,EAAA,CADT,IA0nDAvwD,CAAAyJ,SAAAynD,QAAJ,CACE,CADF,CACSlxD,CAAAyJ,SAAAynD,QADT,EAKKC,EAQL,GAPEA,EAKA,CALqBnxD,CAAAyJ,SAAA+W,cAAA,CAA8B,GAA9B,CAKrB,CAJA2wC,EAAAhiC,KAIA,CAJ0B,GAI1B,CAAAgiC,EAAA,CAAqBA,EAAA1tD,UAAA,CAA6B,CAAA,CAA7B,CAEvB,EAAA,CAAA,CAAO0tD,EAAAhiC,KAbP,CAznDa;AAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CADT,EAIS,CAJT,CAIS,CAAA,CAAA,CAAA,KAAA,CAAA,CAAA,KAAA,CAJT,OAAA,EADoC,CA+BtCiiC,QAASA,EAAkB,CAACC,CAAD,CAAO,CAChC,IAAIC,EAAaA,QAA+B,CAACC,CAAD,CAAe,CAC7D,IAAAC,qBAAA,CAA4BC,QAAQ,EAAG,CACrC,MAAOF,EAD8B,CADsB,CAK3DF,EAAJ,GACEC,CAAAvpC,UADF,CACyB,IAAIspC,CAD7B,CAGAC,EAAAvpC,UAAA1kB,QAAA,CAA+BquD,QAAmB,EAAG,CACnD,MAAO,KAAAF,qBAAA,EAD4C,CAGrDF,EAAAvpC,UAAAljB,SAAA,CAAgC8sD,QAAoB,EAAG,CACrD,MAAO,KAAAH,qBAAA,EAAA3sD,SAAA,EAD8C,CAGvD,OAAOysD,EAfyB,CAxClC,IAAIM,EAAgBA,QAAsB,CAACtmD,CAAD,CAAO,CAC/C,KAAMklD,GAAA,CAAW,QAAX,CAAN,CAD+C,CAI7C1lC,EAAAF,IAAA,CAAc,WAAd,CAAJ,GACEgnC,CADF,CACkB9mC,CAAA1b,IAAA,CAAc,WAAd,CADlB,CAN4E,KA4DxEyiD,EAAyBT,CAAA,EA5D+C,CA6DxEU,EAAS,EAEbA,EAAA,CAAO56B,CAAAC,KAAP,CAAA,CAA4Bi6B,CAAA,CAAmBS,CAAnB,CAC5BC,EAAA,CAAO56B,CAAAE,IAAP,CAAA,CAA2Bg6B,CAAA,CAAmBS,CAAnB,CAC3BC,EAAA,CAAO56B,CAAAI,UAAP,CAAA,CAAiC85B,CAAA,CAAmBS,CAAnB,CACjCC,EAAA,CAAO56B,CAAAG,IAAP,CAAA,CAA2B+5B,CAAA,CAAmBU,CAAA,CAAO56B,CAAAI,UAAP,CAAnB,CAC3Bw6B,EAAA,CAAO56B,CAAA66B,GAAP,CAAA,CAA0BX,CAAA,CAAmBS,CAAnB,CAC1BC,EAAA,CAAO56B,CAAAK,aAAP,CAAA;AAAoC65B,CAAA,CAAmBU,CAAA,CAAO56B,CAAAG,IAAP,CAAnB,CA8IpC,OAAO,CAAE26B,QApHTA,QAAgB,CAAC/pD,CAAD,CAAOspD,CAAP,CAAqB,CACnC,IAAIU,EAAeH,CAAAlwD,eAAA,CAAsBqG,CAAtB,CAAA,CAA8B6pD,CAAA,CAAO7pD,CAAP,CAA9B,CAA6C,IAChE,IAAKgqD,CAAAA,CAAL,CACE,KAAMzB,GAAA,CAAW,UAAX,CAEFvoD,CAFE,CAEIspD,CAFJ,CAAN,CAIF,GAAqB,IAArB,GAAIA,CAAJ,EAA6BzsD,CAAA,CAAYysD,CAAZ,CAA7B,EAA2E,EAA3E,GAA0DA,CAA1D,CACE,MAAOA,EAIT,IAA4B,QAA5B,GAAI,MAAOA,EAAX,CACE,KAAMf,GAAA,CAAW,OAAX,CAEFvoD,CAFE,CAAN,CAIF,MAAO,KAAIgqD,CAAJ,CAAgBV,CAAhB,CAjB4B,CAoH9B,CACElqB,WAtCTA,QAAmB,CAACp/B,CAAD,CAAOiqD,CAAP,CAAqB,CACtC,GAAqB,IAArB,GAAIA,CAAJ,EAA6BptD,CAAA,CAAYotD,CAAZ,CAA7B,EAA2E,EAA3E,GAA0DA,CAA1D,CACE,MAAOA,EAET,KAAI5qD,EAAewqD,CAAAlwD,eAAA,CAAsBqG,CAAtB,CAAA,CAA8B6pD,CAAA,CAAO7pD,CAAP,CAA9B,CAA6C,IAGhE,IAAIX,CAAJ,EAAmB4qD,CAAnB,WAA2C5qD,EAA3C,CACE,MAAO4qD,EAAAV,qBAAA,EAKL7vD,EAAA,CAAWuwD,CAAAV,qBAAX,CAAJ,GACEU,CADF,CACiBA,CAAAV,qBAAA,EADjB,CAKA,IAAIvpD,CAAJ,GAAaivB,CAAAI,UAAb,EAAuCrvB,CAAvC,GAAgDivB,CAAAG,IAAhD,CAEE,MAAO3iB,EAAA,CAAcw9C,CAAArtD,SAAA,EAAd,CAAuCoD,CAAvC,GAAgDivB,CAAAI,UAAhD,CACF,IAAIrvB,CAAJ,GAAaivB,CAAAK,aAAb,CAAwC,CA7K3CgjB,IAAAA;AAAY/qB,EAAA,CA8KmB0iC,CA9KRrtD,SAAA,EAAX,CAAZ01C,CACAp4C,CADAo4C,CACGjpB,CADHipB,CACM4X,EAAU,CAAA,CAEfhwD,EAAA,CAAI,CAAT,KAAYmvB,CAAZ,CAAgBu/B,CAAAzvD,OAAhB,CAA6Ce,CAA7C,CAAiDmvB,CAAjD,CAAoDnvB,CAAA,EAApD,CACE,GAAI8uD,CAAA,CAASJ,CAAA,CAAqB1uD,CAArB,CAAT,CAAkCo4C,CAAlC,CAAJ,CAAkD,CAChD4X,CAAA,CAAU,CAAA,CACV,MAFgD,CAKpD,GAAIA,CAAJ,CAEE,IAAKhwD,CAAO,CAAH,CAAG,CAAAmvB,CAAA,CAAIw/B,CAAA1vD,OAAhB,CAA6Ce,CAA7C,CAAiDmvB,CAAjD,CAAoDnvB,CAAA,EAApD,CACE,GAAI8uD,CAAA,CAASH,CAAA,CAAqB3uD,CAArB,CAAT,CAAkCo4C,CAAlC,CAAJ,CAAkD,CAChD4X,CAAA,CAAU,CAAA,CACV,MAFgD,CAkKpD,GA5JKA,CA4JL,CACE,MAAOD,EAEP,MAAM1B,GAAA,CAAW,UAAX,CAEF0B,CAAArtD,SAAA,EAFE,CAAN,CAJ2C,CAQxC,GAAIoD,CAAJ,GAAaivB,CAAAC,KAAb,CAEL,MAAOy6B,EAAA,CAAcM,CAAd,CAGT,MAAM1B,GAAA,CAAW,QAAX,CAAN,CAlCsC,CAqCjC,CAEEntD,QAhFTA,QAAgB,CAAC6uD,CAAD,CAAe,CAC7B,MAAIA,EAAJ,WAA4BL,EAA5B,CACSK,CAAAV,qBAAA,EADT,CAGSU,CAJoB,CA8ExB,CAlNqE,CAAlE,CAtEkB,CAolBhCl0C,QAASA,GAAY,EAAG,CACtB,IAAI4X,EAAU,CAAA,CAad,KAAAA,QAAA,CAAew8B,QAAQ,CAAC9vD,CAAD,CAAQ,CACzBwB,SAAA1C,OAAJ,GACEw0B,CADF,CACY,CAAEtzB,CAAAA,CADd,CAGA,OAAOszB,EAJsB,CAsD/B,KAAA9O,KAAA,CAAY,CAAC,QAAD,CAAW,cAAX,CAA2B,QAAQ,CACjCvJ,CADiC,CACvBU,CADuB,CACT,CAIpC,GAAI2X,CAAJ,EAAsB,CAAtB,CAAetL,EAAf,CACE,KAAMkmC,GAAA,CAAW,UAAX,CAAN,CAMF,IAAI6B,EAAMr+C,EAAA,CAAYkjB,CAAZ,CAaVm7B,EAAAC,UAAA,CAAgBC,QAAQ,EAAG,CACzB,MAAO38B,EADkB,CAG3By8B;CAAAL,QAAA,CAAc/zC,CAAA+zC,QACdK,EAAAhrB,WAAA,CAAiBppB,CAAAopB,WACjBgrB,EAAAhvD,QAAA,CAAc4a,CAAA5a,QAETuyB,EAAL,GACEy8B,CAAAL,QACA,CADcK,CAAAhrB,WACd,CAD+BmrB,QAAQ,CAACvqD,CAAD,CAAO3F,CAAP,CAAc,CAAE,MAAOA,EAAT,CACrD,CAAA+vD,CAAAhvD,QAAA,CAAcmB,EAFhB,CAwBA6tD,EAAAI,QAAA,CAAcC,QAAmB,CAACzqD,CAAD,CAAOu5C,CAAP,CAAa,CAC5C,IAAIhgC,EAASjE,CAAA,CAAOikC,CAAP,CACb,OAAIhgC,EAAAwoB,QAAJ,EAAsBxoB,CAAAhO,SAAtB,CACSgO,CADT,CAGSjE,CAAA,CAAOikC,CAAP,CAAa,QAAQ,CAACl/C,CAAD,CAAQ,CAClC,MAAO+vD,EAAAhrB,WAAA,CAAep/B,CAAf,CAAqB3F,CAArB,CAD2B,CAA7B,CALmC,CAvDV,KA+ThC0H,EAAQqoD,CAAAI,QA/TwB,CAgUhCprB,EAAagrB,CAAAhrB,WAhUmB,CAiUhC2qB,EAAUK,CAAAL,QAEdzwD,EAAA,CAAQ21B,CAAR,CAAsB,QAAQ,CAACy7B,CAAD,CAAY1lD,CAAZ,CAAkB,CAC9C,IAAI2lD,EAAQxsD,CAAA,CAAU6G,CAAV,CACZolD,EAAA,CAnmCGjoD,CAmmCc,WAnmCdA,CAmmC4BwoD,CAnmC5BxoD,SAAA,CACIyoD,EADJ,CACiCnzC,EADjC,CAmmCH,CAAA,CAAyC,QAAQ,CAAC8hC,CAAD,CAAO,CACtD,MAAOx3C,EAAA,CAAM2oD,CAAN,CAAiBnR,CAAjB,CAD+C,CAGxD6Q,EAAA,CAtmCGjoD,CAsmCc,cAtmCdA,CAsmC+BwoD,CAtmC/BxoD,SAAA,CACIyoD,EADJ,CACiCnzC,EADjC,CAsmCH,CAAA,CAA4C,QAAQ,CAACpd,CAAD,CAAQ,CAC1D,MAAO+kC,EAAA,CAAWsrB,CAAX,CAAsBrwD,CAAtB,CADmD,CAG5D+vD,EAAA,CAzmCGjoD,CAymCc,WAzmCdA,CAymC4BwoD,CAzmC5BxoD,SAAA,CACIyoD,EADJ,CACiCnzC,EADjC,CAymCH,CAAA,CAAyC,QAAQ,CAACpd,CAAD,CAAQ,CACvD,MAAO0vD,EAAA,CAAQW,CAAR,CAAmBrwD,CAAnB,CADgD,CARX,CAAhD,CAaA;MAAO+vD,EAhV6B,CAD1B,CApEU,CA0axBj0C,QAASA,GAAgB,EAAG,CAC1B,IAAA0I,KAAA,CAAY,CAAC,SAAD,CAAY,WAAZ,CAAyB,QAAQ,CAAC/H,CAAD,CAAUxD,CAAV,CAAqB,CAAA,IAC5Du3C,EAAe,EAD6C,CAc5DC,EAAsB,GANfC,CAAAj0C,CAAAi0C,GAMe,EANDC,CAAAl0C,CAAAi0C,GAAAC,QAMC,GAHlBl0C,CAAAm0C,OAGkB,GAFjBn0C,CAAAm0C,OAAAC,IAEiB,EAFKp0C,CAAAm0C,OAAAC,IAAAC,QAEL,EADbD,CAAAp0C,CAAAm0C,OAAAC,IACa,EADSp0C,CAAAm0C,OAAAE,QACT,EADmCr0C,CAAAm0C,OAAAE,QAAAthC,GACnC,EAAtBihC,EAA8Ch0C,CAAAyP,QAA9CukC,EAAiEh0C,CAAAyP,QAAA6kC,UAdL,CAe5DC,EACEtvD,EAAA,CAAM,CAAC,eAAA0c,KAAA,CAAqBta,CAAA,CAAU65C,CAAClhC,CAAAihC,UAADC,EAAsB,EAAtBA,WAAV,CAArB,CAAD,EAAyE,EAAzE,EAA6E,CAA7E,CAAN,CAhB0D,CAiB5DsT,EAAQ,QAAA7tD,KAAA,CAAcu6C,CAAClhC,CAAAihC,UAADC,EAAsB,EAAtBA,WAAd,CAjBoD,CAkB5Dx2C,EAAW8R,CAAA,CAAU,CAAV,CAAX9R,EAA2B,EAlBiC,CAmB5D+pD,EAAY/pD,CAAAwrC,KAAZue,EAA6B/pD,CAAAwrC,KAAA3oB,MAnB+B,CAoB5DmnC,EAAc,CAAA,CApB8C,CAqB5DC,EAAa,CAAA,CAEbF,EAAJ,GAGEC,CACA,CADc,CAAG,EAAA,YAAA,EAAgBD,EAAhB,EAA6B,kBAA7B,EAAmDA,EAAnD,CACjB,CAAAE,CAAA,CAAa,CAAG,EAAA,WAAA,EAAeF,EAAf,EAA4B,iBAA5B,EAAiDA,EAAjD,CAJlB,CAQA,OAAO,CASLhlC,QAAS,EAAGukC,CAAAA,CAAH;AAAsC,CAAtC,CAA4BO,CAA5B,EAA6CC,CAA7C,CATJ,CAULI,SAAUA,QAAQ,CAACnuC,CAAD,CAAQ,CAOxB,GAAc,OAAd,GAAIA,CAAJ,EAAyB8E,EAAzB,CAA+B,MAAO,CAAA,CAEtC,IAAIxlB,CAAA,CAAYguD,CAAA,CAAattC,CAAb,CAAZ,CAAJ,CAAsC,CACpC,IAAIouC,EAASnqD,CAAA+W,cAAA,CAAuB,KAAvB,CACbsyC,EAAA,CAAattC,CAAb,CAAA,CAAsB,IAAtB,CAA6BA,CAA7B,GAAsCouC,EAFF,CAKtC,MAAOd,EAAA,CAAattC,CAAb,CAdiB,CAVrB,CA0BLlR,IAAKA,EAAA,EA1BA,CA2BLm/C,YAAaA,CA3BR,CA4BLC,WAAYA,CA5BP,CA6BLJ,QAASA,CA7BJ,CA/ByD,CAAtD,CADc,CAiF5Bh1C,QAASA,GAA4B,EAAG,CACtC,IAAAwI,KAAA,CAAYpiB,EAAA,CAAQ,QAAQ,CAACq7C,CAAD,CAAM,CAAE,MAAO,KAAI8T,EAAJ,CAAgB9T,CAAhB,CAAT,CAAtB,CAD0B,CAIxC8T,QAASA,GAAW,CAAC9T,CAAD,CAAM,CAuExB+T,QAASA,EAAe,EAAG,CACzB,IAAIC,EAASC,CAAAC,IAAA,EACb,OAAOF,EAAP,EAAiBA,CAAAG,GAFQ,CAK3BC,QAASA,EAAsB,CAACzjC,CAAD,CAAW,CACxC,IAAS,IAAAvuB,EAAI6xD,CAAA5yD,OAAJe,CAA2B,CAApC,CAA4C,CAA5C,EAAuCA,CAAvC,CAA+C,EAAEA,CAAjD,CAAoD,CAClD,IAAI4xD,EAASC,CAAA,CAAc7xD,CAAd,CACb,IAAI4xD,CAAA9rD,KAAJ,GAAoByoB,CAApB,CAEE,MADAsjC,EAAAvtD,OAAA,CAAqBtE,CAArB,CAAwB,CAAxB,CACO+xD,CAAAH,CAAAG,GAJyC,CADZ,CA1E1C,IAAIE,EAAa,EAAjB,CACIJ,EAAgB,EADpB,CAGIK,EAJOnrD,IAIUmrD,eAAjBA,CAAuC,SAH3C,CAIIzjC,EALO1nB,IAKa0nB,kBAApBA,CAA6C,aALtC1nB,KAcX4lB,aAAA,CAqBAA,QAAqB,CAAC3lB,CAAD;AAAKunB,CAAL,CAAe,CAClCA,CAAA,CAAWA,CAAX,EAAuBE,CAEvB,IAAI,CACFznB,CAAA,EADE,CAAJ,OAEU,CACKunB,IAAAA,CAsBfA,EAAA,CAtBeA,CAsBf,EAAuBE,CACnBwjC,EAAA,CAAW1jC,CAAX,CAAJ,GACE0jC,CAAA,CAAW1jC,CAAX,CAAA,EACA,CAAA0jC,CAAA,CAAWC,CAAX,CAAA,EAFF,CArBMC,EAAAA,CAAeF,CAAA,CAAW1jC,CAAX,CACnB,KAAI6jC,EAAcH,CAAA,CAAWC,CAAX,CAGlB,IAAKE,CAAAA,CAAL,EAAqBD,CAAAA,CAArB,CAIE,IAHIE,CAGJ,CAHuBD,CAAD,CAAiCJ,CAAjC,CAAeL,CAGrC,CAAQW,CAAR,CAAiBD,CAAA,CAAgB9jC,CAAhB,CAAjB,CAAA,CACE,GAAI,CACF+jC,CAAA,EADE,CAEF,MAAOhpD,CAAP,CAAU,CACVs0C,CAAAvyC,MAAA,CAAU/B,CAAV,CADU,CAdR,CALwB,CAnCzBvC,KAsBX8lB,aAAA,CA+DAA,QAAqB,CAAC0B,CAAD,CAAW,CAC9BA,CAAA,CAAWA,CAAX,EAAuBE,CACvBwjC,EAAA,CAAW1jC,CAAX,CAAA,EAAwB0jC,CAAA,CAAW1jC,CAAX,CAAxB,EAAgD,CAAhD,EAAqD,CACrD0jC,EAAA,CAAWC,CAAX,CAAA,EAA8BD,CAAA,CAAWC,CAAX,CAA9B,EAA4D,CAA5D,EAAiE,CAHnC,CArFrBnrD,KAiCXgmB,yBAAA,CA0DAA,QAAiC,CAACc,CAAD,CAAWU,CAAX,CAAqB,CACpDA,CAAA,CAAWA,CAAX,EAAuB2jC,CAClBD,EAAA,CAAW1jC,CAAX,CAAL,CAGEsjC,CAAAltD,KAAA,CAAmB,CAACmB,KAAMyoB,CAAP,CAAiBwjC,GAAIlkC,CAArB,CAAnB,CAHF,CACEA,CAAA,EAHkD,CA5F9B,CAmH1BtR,QAASA,GAAwB,EAAG,CAElC,IAAIg2C,CAeJ,KAAAA,YAAA,CAAmBC,QAAQ,CAACnrD,CAAD,CAAM,CAC/B,MAAIA,EAAJ,EACEkrD,CACO,CADOlrD,CACP,CAAA,IAFT,EAIOkrD,CALwB,CAoCjC,KAAA5tC,KAAA,CAAY,CAAC,mBAAD,CAAsB,gBAAtB,CAAwC,OAAxC,CAAiD,IAAjD,CAAuD,MAAvD,CACV,QAAQ,CAACnL,CAAD,CAAoB4C,CAApB,CAAoChC,CAApC,CAA2CoB,CAA3C,CAA+CI,CAA/C,CAAqD,CAE3D62C,QAASA,EAAe,CAACC,CAAD,CAAMC,CAAN,CAA0B,CAChDF,CAAAG,qBAAA,EAOA,IAAK,CAAA7zD,CAAA,CAAS2zD,CAAT,CAAL;AAAsB/vD,CAAA,CAAYyZ,CAAAnP,IAAA,CAAmBylD,CAAnB,CAAZ,CAAtB,CACEA,CAAA,CAAM92C,CAAA01B,sBAAA,CAA2BohB,CAA3B,CAGR,KAAItlB,EAAoBhzB,CAAA+yB,SAApBC,EAAsChzB,CAAA+yB,SAAAC,kBAEtCtuC,EAAA,CAAQsuC,CAAR,CAAJ,CACEA,CADF,CACsBA,CAAA57B,OAAA,CAAyB,QAAQ,CAACqhD,CAAD,CAAc,CACjE,MAAOA,EAAP,GAAuB9mB,EAD0C,CAA/C,CADtB,CAIWqB,CAJX,GAIiCrB,EAJjC,GAKEqB,CALF,CAKsB,IALtB,CAQA,OAAOhzB,EAAAnN,IAAA,CAAUylD,CAAV,CAAejxD,CAAA,CAAO,CACzB+lB,MAAOpL,CADkB,CAEzBgxB,kBAAmBA,CAFM,CAAP,CAGjBmlB,CAHiB,CAAf,CAAAriB,QAAA,CAII,QAAQ,EAAG,CAClBuiB,CAAAG,qBAAA,EADkB,CAJf,CAAA7vB,KAAA,CAOC,QAAQ,CAAC8L,CAAD,CAAW,CACvB,MAAOzyB,EAAA4T,IAAA,CAAmB0iC,CAAnB,CAAwB7jB,CAAAziC,KAAxB,CADgB,CAPpB,CAWP0mD,QAAoB,CAAChkB,CAAD,CAAO,CACpB6jB,CAAL,GACE7jB,CAIA,CAJOikB,EAAA,CAAuB,QAAvB,CAEHL,CAFG,CAEE5jB,CAAA7B,OAFF,CAEe6B,CAAA8B,WAFf,CAIP,CAAAp3B,CAAA,CAAkBs1B,CAAlB,CALF,CAQA,OAAOtzB,EAAAuzB,OAAA,CAAUD,CAAV,CATkB,CAXpB,CAtByC,CA8ClD2jB,CAAAG,qBAAA,CAAuC,CAEvC,OAAOH,EAlDoD,CADnD,CArDsB,CA8GpCh2C,QAASA,GAAqB,EAAG,CAC/B,IAAAkI,KAAA,CAAY,CAAC,YAAD,CAAe,UAAf,CAA2B,WAA3B,CACP,QAAQ,CAACrJ,CAAD,CAAexC,CAAf,CAA2BkC,CAA3B,CAAsC,CAqHjD,MA5GkBg4C,CAcN,aAAeC,QAAQ,CAACjvD,CAAD;AAAU6mC,CAAV,CAAsBqoB,CAAtB,CAAsC,CACnEtiC,CAAAA,CAAW5sB,CAAAmvD,uBAAA,CAA+B,YAA/B,CACf,KAAIC,EAAU,EACdh0D,EAAA,CAAQwxB,CAAR,CAAkB,QAAQ,CAAC2Y,CAAD,CAAU,CAClC,IAAI8pB,EAAc9mD,EAAAvI,QAAA,CAAgBulC,CAAhB,CAAAn9B,KAAA,CAA8B,UAA9B,CACdinD,EAAJ,EACEj0D,CAAA,CAAQi0D,CAAR,CAAqB,QAAQ,CAACC,CAAD,CAAc,CACrCJ,CAAJ,CAEM3vD,CADU6qD,IAAIhtD,MAAJgtD,CAAW,SAAXA,CAAuBE,EAAA,CAAgBzjB,CAAhB,CAAvBujB,CAAqD,aAArDA,CACV7qD,MAAA,CAAa+vD,CAAb,CAFN,EAGIF,CAAAzuD,KAAA,CAAa4kC,CAAb,CAHJ,CAM2C,EAN3C,GAMM+pB,CAAAjvD,QAAA,CAAoBwmC,CAApB,CANN,EAOIuoB,CAAAzuD,KAAA,CAAa4kC,CAAb,CARqC,CAA3C,CAHgC,CAApC,CAiBA,OAAO6pB,EApBgE,CAdvDJ,CAiDN,WAAaO,QAAQ,CAACvvD,CAAD,CAAU6mC,CAAV,CAAsBqoB,CAAtB,CAAsC,CAErE,IADA,IAAIM,EAAW,CAAC,KAAD,CAAQ,UAAR,CAAoB,OAApB,CAAf,CACSnkC,EAAI,CAAb,CAAgBA,CAAhB,CAAoBmkC,CAAAv0D,OAApB,CAAqC,EAAEowB,CAAvC,CAA0C,CAGxC,IAAIzN,EAAW5d,CAAA4b,iBAAA,CADA,GACA,CADM4zC,CAAA,CAASnkC,CAAT,CACN,CADoB,OACpB,EAFO6jC,CAAAO,CAAiB,GAAjBA,CAAuB,IAE9B,EADgD,GAChD,CADsD5oB,CACtD,CADmE,IACnE,CACf,IAAIjpB,CAAA3iB,OAAJ,CACE,MAAO2iB,EAL+B,CAF2B,CAjDrDoxC,CAoEN,YAAcU,QAAQ,EAAG,CACnC,MAAO14C,EAAAkR,IAAA,EAD4B,CApEnB8mC,CAiFN,YAAcW,QAAQ,CAACznC,CAAD,CAAM,CAClCA,CAAJ,GAAYlR,CAAAkR,IAAA,EAAZ,GACElR,CAAAkR,IAAA,CAAcA,CAAd,CACA,CAAA5Q,CAAAuhC,QAAA,EAFF,CADsC,CAjFtBmW;AAwGN,WAAaY,QAAQ,CAAC/lC,CAAD,CAAW,CAC1C/U,CAAAgU,gCAAA,CAAyCe,CAAzC,CAD0C,CAxG1BmlC,CAT+B,CADvC,CADmB,CA8HjCr2C,QAASA,GAAgB,EAAG,CAC1B,IAAAgI,KAAA,CAAY,CAAC,YAAD,CAAe,UAAf,CAA2B,IAA3B,CAAiC,KAAjC,CAAwC,mBAAxC,CACP,QAAQ,CAACrJ,CAAD,CAAexC,CAAf,CAA2B0C,CAA3B,CAAiCE,CAAjC,CAAwClC,CAAxC,CAA2D,CAkCtEo4B,QAASA,EAAO,CAAC5qC,CAAD,CAAKsnB,CAAL,CAAYspB,CAAZ,CAAyB,CAClCp4C,CAAA,CAAWwH,CAAX,CAAL,GACE4wC,CAEA,CAFctpB,CAEd,CADAA,CACA,CADQtnB,CACR,CAAAA,CAAA,CAAK5E,CAHP,CADuC,KAOnC6jB,EAtwnBDvkB,EAAAhC,KAAA,CAswnBkBiC,SAtwnBlB,CAswnB6BuF,CAtwnB7B,CA+vnBoC,CAQnC6wC,EAAa95C,CAAA,CAAU25C,CAAV,CAAbG,EAAuC,CAACH,CARL,CASnC5G,EAAW5iB,CAAC2pB,CAAA,CAAYr8B,CAAZ,CAAkBF,CAAnB4S,OAAA,EATwB,CAUnCigB,EAAU2C,CAAA3C,QAVyB,CAWnC7f,CAEJA,EAAA,CAAY1V,CAAAsV,MAAA,CAAe,QAAQ,EAAG,CACpC,GAAI,CACF4iB,CAAAxB,QAAA,CAAiBxoC,CAAAG,MAAA,CAAS,IAAT,CAAe8e,CAAf,CAAjB,CADE,CAEF,MAAO3c,CAAP,CAAU,CACV0nC,CAAAjC,OAAA,CAAgBzlC,CAAhB,CACA,CAAAkQ,CAAA,CAAkBlQ,CAAlB,CAFU,CAFZ,OAKU,CACR,OAAOuqD,CAAA,CAAUxlB,CAAAkG,YAAV,CADC,CAILwD,CAAL,EAAgBz8B,CAAAnP,OAAA,EAVoB,CAA1B,CAWTmiB,CAXS,CAWF,UAXE,CAaZ+f,EAAAkG,YAAA,CAAsB/lB,CACtBqlC,EAAA,CAAUrlC,CAAV,CAAA,CAAuBwiB,CAEvB,OAAO3C,EA7BgC,CAhCzC,IAAIwlB,EAAY,EA6EhBjiB,EAAAljB,OAAA,CAAiBolC,QAAQ,CAACzlB,CAAD,CAAU,CACjC,GAAKA,CAAAA,CAAL,CAAc,MAAO,CAAA,CAErB,IAAK,CAAAA,CAAA5uC,eAAA,CAAuB,aAAvB,CAAL,CACE,KAAMs0D,GAAA,CAAe,SAAf,CAAN;AAIF,GAAK,CAAAF,CAAAp0D,eAAA,CAAyB4uC,CAAAkG,YAAzB,CAAL,CAAoD,MAAO,CAAA,CAEvD5kB,EAAAA,CAAK0e,CAAAkG,YACT,KAAIvD,EAAW6iB,CAAA,CAAUlkC,CAAV,CAAf,CAGsB0e,EAAA2C,CAAA3C,QAjyGtBiJ,EAAAC,QAAJ,GAC6BD,CAAAC,QAR7BC,IAOA,CAPY,CAAA,CAOZ,CAkyGIxG,EAAAjC,OAAA,CAAgB,UAAhB,CACA,QAAO8kB,CAAA,CAAUlkC,CAAV,CAEP,OAAO7W,EAAAsV,MAAAM,OAAA,CAAsBiB,CAAtB,CAlB0B,CAqBnC,OAAOiiB,EApG+D,CAD5D,CADc,CA0K5BvkB,QAASA,GAAU,CAACnB,CAAD,CAAM,CACvB,GAAK,CAAAntB,CAAA,CAASmtB,CAAT,CAAL,CAAoB,MAAOA,EAKvB/D,GAAJ,GAGE6rC,EAAA1yC,aAAA,CAA4B,MAA5B,CAAoC0L,CAApC,CACA,CAAAA,CAAA,CAAOgnC,EAAAhnC,KAJT,CAOAgnC,GAAA1yC,aAAA,CAA4B,MAA5B,CAAoC0L,CAApC,CAEIurB,EAAAA,CAAWyb,EAAAzb,SAEV0b,EAAAA,EAAL,EAAgD,EAAhD,CAAuB1b,CAAAl0C,QAAA,CAAiB,GAAjB,CAAvB,GACEk0C,CADF,CACa,GADb,CACmBA,CADnB,CAC8B,GAD9B,CAIA,OAAO,CACLvrB,KAAMgnC,EAAAhnC,KADD,CAEL8mB,SAAUkgB,EAAAlgB,SAAA,CAA0BkgB,EAAAlgB,SAAA7rC,QAAA,CAAgC,IAAhC,CAAsC,EAAtC,CAA1B,CAAsE,EAF3E,CAGLka,KAAM6xC,EAAA7xC,KAHD,CAILi3B,OAAQ4a,EAAA5a,OAAA,CAAwB4a,EAAA5a,OAAAnxC,QAAA,CAA8B,KAA9B,CAAqC,EAArC,CAAxB,CAAmE,EAJtE,CAKLyiB,KAAMspC,EAAAtpC,KAAA,CAAsBspC,EAAAtpC,KAAAziB,QAAA,CAA4B,IAA5B;AAAkC,EAAlC,CAAtB,CAA8D,EAL/D,CAMLswC,SAAUA,CANL,CAOLE,KAAMub,EAAAvb,KAPD,CAQLQ,SAAiD,GAAvC,GAAC+a,EAAA/a,SAAAvyC,OAAA,CAA+B,CAA/B,CAAD,CACNstD,EAAA/a,SADM,CAEN,GAFM,CAEA+a,EAAA/a,SAVL,CArBgB,CAsEzB/G,QAASA,GAAyB,CAACgiB,CAAD,CAAwB,CACxD,IAAIC,EAA0B,CAACC,EAAD,CAAAztD,OAAA,CAAmButD,CAAAhe,IAAA,CAA0B7oB,EAA1B,CAAnB,CAY9B,OAAOskB,SAA2B,CAAC0iB,CAAD,CAAa,CACzCjc,CAAAA,CAAY/qB,EAAA,CAAWgnC,CAAX,CAChB,OAAOF,EAAAvqC,KAAA,CAA6B0qC,EAAAxtD,KAAA,CAAuB,IAAvB,CAA6BsxC,CAA7B,CAA7B,CAFsC,CAbS,CA6B1Dkc,QAASA,GAAiB,CAACC,CAAD,CAAOC,CAAP,CAAa,CACrCD,CAAA,CAAOlnC,EAAA,CAAWknC,CAAX,CACPC,EAAA,CAAOnnC,EAAA,CAAWmnC,CAAX,CAEP,OAAQD,EAAAzgB,SAAR,GAA0B0gB,CAAA1gB,SAA1B,EACQygB,CAAApyC,KADR,GACsBqyC,CAAAryC,KALe,CAuEvCtF,QAASA,GAAe,EAAG,CACzB,IAAA8H,KAAA,CAAYpiB,EAAA,CAAQ1E,CAAR,CADa,CAa3B42D,QAASA,GAAc,CAACr7C,CAAD,CAAY,CAajCs7C,QAASA,EAAsB,CAAC5yD,CAAD,CAAM,CACnC,GAAI,CACF,MAAO0H,mBAAA,CAAmB1H,CAAnB,CADL,CAEF,MAAOwH,CAAP,CAAU,CACV,MAAOxH,EADG,CAHuB,CAZrC,IAAI4wC,EAAct5B,CAAA,CAAU,CAAV,CAAds5B,EAA8B,EAAlC,CACIiiB,EAAc,EADlB,CAEIC,EAAmB,EAkBvB,OAAO,SAAQ,EAAG,CAAA,IACZC,CADY,CACCC,CADD,CACS90D,CADT,CACYoE,CADZ,CACmB0G,CAhBnC,IAAI,CACF,CAAA,CAgBsC4nC,CAhB/BoiB,OAAP,EAA6B,EAD3B,CAEF,MAAOxrD,CAAP,CAAU,CACV,CAAA,CAAO,EADG,CAiBZ,GAAIyrD,CAAJ,GAA4BH,CAA5B,CAKE,IAJAA,CAIK,CAJcG,CAId,CAHLF,CAGK;AAHSD,CAAA9wD,MAAA,CAAuB,IAAvB,CAGT,CAFL6wD,CAEK,CAFS,EAET,CAAA30D,CAAA,CAAI,CAAT,CAAYA,CAAZ,CAAgB60D,CAAA51D,OAAhB,CAAoCe,CAAA,EAApC,CACE80D,CAEA,CAFSD,CAAA,CAAY70D,CAAZ,CAET,CADAoE,CACA,CADQ0wD,CAAAzwD,QAAA,CAAe,GAAf,CACR,CAAY,CAAZ,CAAID,CAAJ,GACE0G,CAIA,CAJO4pD,CAAA,CAAuBI,CAAAlrD,UAAA,CAAiB,CAAjB,CAAoBxF,CAApB,CAAvB,CAIP,CAAIzB,CAAA,CAAYgyD,CAAA,CAAY7pD,CAAZ,CAAZ,CAAJ,GACE6pD,CAAA,CAAY7pD,CAAZ,CADF,CACsB4pD,CAAA,CAAuBI,CAAAlrD,UAAA,CAAiBxF,CAAjB,CAAyB,CAAzB,CAAvB,CADtB,CALF,CAWJ,OAAOuwD,EAvBS,CArBe,CAmDnCt3C,QAASA,GAAsB,EAAG,CAChC,IAAAsH,KAAA,CAAY8vC,EADoB,CA+GlC96C,QAASA,GAAe,CAAChO,CAAD,CAAW,CAmBjC8+B,QAASA,EAAQ,CAAC3/B,CAAD,CAAOgF,CAAP,CAAgB,CAC/B,GAAI9R,CAAA,CAAS8M,CAAT,CAAJ,CAAoB,CAClB,IAAIkqD,EAAU,EACd51D,EAAA,CAAQ0L,CAAR,CAAc,QAAQ,CAAC0G,CAAD,CAASjS,CAAT,CAAc,CAClCy1D,CAAA,CAAQz1D,CAAR,CAAA,CAAekrC,CAAA,CAASlrC,CAAT,CAAciS,CAAd,CADmB,CAApC,CAGA,OAAOwjD,EALW,CAOlB,MAAOrpD,EAAAmE,QAAA,CAAiBhF,CAAjB,CA1BEmqD,QA0BF,CAAgCnlD,CAAhC,CARsB,CAWjC,IAAA26B,SAAA,CAAgBA,CAEhB,KAAA9lB,KAAA,CAAY,CAAC,WAAD,CAAc,QAAQ,CAACgE,CAAD,CAAY,CAC5C,MAAO,SAAQ,CAAC7d,CAAD,CAAO,CACpB,MAAO6d,EAAA1b,IAAA,CAAcnC,CAAd,CAjCEmqD,QAiCF,CADa,CADsB,CAAlC,CAoBZxqB,EAAA,CAAS,UAAT,CAAqByqB,EAArB,CACAzqB,EAAA,CAAS,MAAT,CAAiB0qB,EAAjB,CACA1qB,EAAA,CAAS,QAAT,CAAmB2qB,EAAnB,CACA3qB,EAAA,CAAS,MAAT,CAAiB4qB,EAAjB,CACA5qB,EAAA,CAAS,SAAT,CAAoB6qB,EAApB,CACA7qB,EAAA,CAAS,WAAT,CAAsB8qB,EAAtB,CACA9qB,EAAA,CAAS,QAAT,CAAmB+qB,EAAnB,CACA/qB,EAAA,CAAS,SAAT;AAAoBgrB,EAApB,CACAhrB,EAAA,CAAS,WAAT,CAAsBirB,EAAtB,CA5DiC,CAwMnCN,QAASA,GAAY,EAAG,CACtB,MAAO,SAAQ,CAACjxD,CAAD,CAAQ0mC,CAAR,CAAoB8qB,CAApB,CAAgCC,CAAhC,CAAgD,CAC7D,GAAK,CAAAj3D,EAAA,CAAYwF,CAAZ,CAAL,CAAyB,CACvB,GAAa,IAAb,EAAIA,CAAJ,CACE,MAAOA,EAEP,MAAMzF,EAAA,CAAO,QAAP,CAAA,CAAiB,UAAjB,CAAiEyF,CAAjE,CAAN,CAJqB,CAQzByxD,CAAA,CAAiBA,CAAjB,EAAmC,GAGnC,KAAIC,CAEJ,QAJqBC,EAAAC,CAAiBlrB,CAAjBkrB,CAIrB,EACE,KAAK,UAAL,CAEE,KACF,MAAK,SAAL,CACA,KAAK,MAAL,CACA,KAAK,QAAL,CACA,KAAK,QAAL,CACEF,CAAA,CAAsB,CAAA,CAExB,MAAK,QAAL,CACEG,CAAA,CAAcC,EAAA,CAAkBprB,CAAlB,CAA8B8qB,CAA9B,CAA0CC,CAA1C,CAA0DC,CAA1D,CACd,MACF,SACE,MAAO1xD,EAdX,CAiBA,MAAOrB,MAAA8iB,UAAApU,OAAA9R,KAAA,CAA4ByE,CAA5B,CAAmC6xD,CAAnC,CA/BsD,CADzC,CAqCxBC,QAASA,GAAiB,CAACprB,CAAD,CAAa8qB,CAAb,CAAyBC,CAAzB,CAAyCC,CAAzC,CAA8D,CACtF,IAAIK,EAAwBl4D,CAAA,CAAS6sC,CAAT,CAAxBqrB,EAAiDN,CAAjDM,GAAmErrB,EAGpD,EAAA,CAAnB,GAAI8qB,CAAJ,CACEA,CADF,CACezvD,EADf,CAEY1G,CAAA,CAAWm2D,CAAX,CAFZ,GAGEA,CAHF,CAGeA,QAAQ,CAACQ,CAAD,CAASC,CAAT,CAAmB,CACtC,GAAIzzD,CAAA,CAAYwzD,CAAZ,CAAJ,CAEE,MAAO,CAAA,CAET,IAAgB,IAAhB,GAAKA,CAAL,EAAuC,IAAvC,GAA0BC,CAA1B,CAEE,MAAOD,EAAP,GAAkBC,CAEpB,IAAIp4D,CAAA,CAASo4D,CAAT,CAAJ,EAA2Bp4D,CAAA,CAASm4D,CAAT,CAA3B,EAAgD,CAAA1zD,EAAA,CAAkB0zD,CAAlB,CAAhD,CAEE,MAAO,CAAA,CAGTA,EAAA,CAASlyD,CAAA,CAAU,EAAV,CAAekyD,CAAf,CACTC,EAAA,CAAWnyD,CAAA,CAAU,EAAV;AAAemyD,CAAf,CACX,OAAqC,EAArC,GAAOD,CAAA9xD,QAAA,CAAe+xD,CAAf,CAhB+B,CAH1C,CA8BA,OAPcJ,SAAQ,CAAC72D,CAAD,CAAO,CAC3B,MAAI+2D,EAAJ,EAA8B,CAAAl4D,CAAA,CAASmB,CAAT,CAA9B,CACSk3D,EAAA,CAAYl3D,CAAZ,CAAkB0rC,CAAA,CAAW+qB,CAAX,CAAlB,CAA8CD,CAA9C,CAA0DC,CAA1D,CAA0E,CAAA,CAA1E,CADT,CAGOS,EAAA,CAAYl3D,CAAZ,CAAkB0rC,CAAlB,CAA8B8qB,CAA9B,CAA0CC,CAA1C,CAA0DC,CAA1D,CAJoB,CA3ByD,CAqCxFQ,QAASA,GAAW,CAACF,CAAD,CAASC,CAAT,CAAmBT,CAAnB,CAA+BC,CAA/B,CAA+CC,CAA/C,CAAoES,CAApE,CAA0F,CAC5G,IAAIC,EAAaT,EAAA,CAAiBK,CAAjB,CAAjB,CACIK,EAAeV,EAAA,CAAiBM,CAAjB,CAEnB,IAAsB,QAAtB,GAAKI,CAAL,EAA2D,GAA3D,GAAoCJ,CAAA1vD,OAAA,CAAgB,CAAhB,CAApC,CACE,MAAO,CAAC2vD,EAAA,CAAYF,CAAZ,CAAoBC,CAAAxsD,UAAA,CAAmB,CAAnB,CAApB,CAA2C+rD,CAA3C,CAAuDC,CAAvD,CAAuEC,CAAvE,CACH,IAAI/2D,CAAA,CAAQq3D,CAAR,CAAJ,CAGL,MAAOA,EAAAvsC,KAAA,CAAY,QAAQ,CAACzqB,CAAD,CAAO,CAChC,MAAOk3D,GAAA,CAAYl3D,CAAZ,CAAkBi3D,CAAlB,CAA4BT,CAA5B,CAAwCC,CAAxC,CAAwDC,CAAxD,CADyB,CAA3B,CAKT,QAAQU,CAAR,EACE,KAAK,QAAL,CACE,IAAIh3D,CACJ,IAAIs2D,CAAJ,CAAyB,CACvB,IAAKt2D,CAAL,GAAY42D,EAAZ,CAGE,GAAI52D,CAAAmH,OAAJ,EAAqC,GAArC,GAAmBnH,CAAAmH,OAAA,CAAW,CAAX,CAAnB,EACI2vD,EAAA,CAAYF,CAAA,CAAO52D,CAAP,CAAZ,CAAyB62D,CAAzB,CAAmCT,CAAnC,CAA+CC,CAA/C,CAA+D,CAAA,CAA/D,CADJ,CAEE,MAAO,CAAA,CAGX,OAAOU,EAAA,CAAuB,CAAA,CAAvB,CAA+BD,EAAA,CAAYF,CAAZ,CAAoBC,CAApB,CAA8BT,CAA9B,CAA0CC,CAA1C,CAA0D,CAAA,CAA1D,CATf,CAUlB,GAAqB,QAArB,GAAIY,CAAJ,CAA+B,CACpC,IAAKj3D,CAAL,GAAY62D,EAAZ,CAEE,GADIK,CACA,CADcL,CAAA,CAAS72D,CAAT,CACd,CAAA,CAAAC,CAAA,CAAWi3D,CAAX,CAAA,EAA2B,CAAA9zD,CAAA,CAAY8zD,CAAZ,CAA3B,GAIAC,CAEC,CAFkBn3D,CAElB,GAF0Bq2D,CAE1B,CAAA,CAAAS,EAAA,CADWK,CAAAC,CAAmBR,CAAnBQ,CAA4BR,CAAA,CAAO52D,CAAP,CACvC,CAAuBk3D,CAAvB,CAAoCd,CAApC,CAAgDC,CAAhD,CAAgEc,CAAhE,CAAkFA,CAAlF,CAND,CAAJ,CAOE,MAAO,CAAA,CAGX,OAAO,CAAA,CAb6B,CAepC,MAAOf,EAAA,CAAWQ,CAAX;AAAmBC,CAAnB,CAEX,MAAK,UAAL,CACE,MAAO,CAAA,CACT,SACE,MAAOT,EAAA,CAAWQ,CAAX,CAAmBC,CAAnB,CAjCX,CAd4G,CAoD9GN,QAASA,GAAgB,CAACzuD,CAAD,CAAM,CAC7B,MAAgB,KAAT,GAACA,CAAD,CAAiB,MAAjB,CAA0B,MAAOA,EADX,CA6D/B6tD,QAASA,GAAc,CAAC0B,CAAD,CAAU,CAC/B,IAAIC,EAAUD,CAAAE,eACd,OAAO,SAAQ,CAACC,CAAD,CAASC,CAAT,CAAyBC,CAAzB,CAAuC,CAChDt0D,CAAA,CAAYq0D,CAAZ,CAAJ,GACEA,CADF,CACmBH,CAAAK,aADnB,CAIIv0D,EAAA,CAAYs0D,CAAZ,CAAJ,GACEA,CADF,CACiBJ,CAAAM,SAAA,CAAiB,CAAjB,CAAAC,QADjB,CAKA,KAAIC,EAAoBL,CAAD,CAAoC,SAApC,CAAkB,eAGzC,OAAkB,KAAX,EAACD,CAAD,CACDA,CADC,CAEDO,EAAA,CAAaP,CAAb,CAAqBF,CAAAM,SAAA,CAAiB,CAAjB,CAArB,CAA0CN,CAAAU,UAA1C,CAA6DV,CAAAW,YAA7D,CAAkFP,CAAlF,CAAAhvD,QAAA,CACUovD,CADV,CAC4BL,CAD5B,CAf8C,CAFvB,CA6EjCxB,QAASA,GAAY,CAACoB,CAAD,CAAU,CAC7B,IAAIC,EAAUD,CAAAE,eACd,OAAO,SAAQ,CAACW,CAAD,CAASR,CAAT,CAAuB,CAGpC,MAAkB,KAAX,EAACQ,CAAD,CACDA,CADC,CAEDH,EAAA,CAAaG,CAAb,CAAqBZ,CAAAM,SAAA,CAAiB,CAAjB,CAArB,CAA0CN,CAAAU,UAA1C,CAA6DV,CAAAW,YAA7D,CACaP,CADb,CAL8B,CAFT,CAyB/BpvD,QAASA,GAAK,CAAC6vD,CAAD,CAAS,CAAA,IACjBC,EAAW,CADM,CACHC,CADG,CACKC,CADL,CAEjB73D,CAFiB,CAEda,CAFc,CAEXi3D,CAGmD,GAA7D,EAAKD,CAAL,CAA6BH,CAAArzD,QAAA,CAAemzD,EAAf,CAA7B;CACEE,CADF,CACWA,CAAAzvD,QAAA,CAAeuvD,EAAf,CAA4B,EAA5B,CADX,CAKgC,EAAhC,EAAKx3D,CAAL,CAAS03D,CAAAte,OAAA,CAAc,IAAd,CAAT,GAE8B,CAE5B,CAFIye,CAEJ,GAF+BA,CAE/B,CAFuD73D,CAEvD,EADA63D,CACA,EADyB,CAACH,CAAAh2D,MAAA,CAAa1B,CAAb,CAAiB,CAAjB,CAC1B,CAAA03D,CAAA,CAASA,CAAA9tD,UAAA,CAAiB,CAAjB,CAAoB5J,CAApB,CAJX,EAKmC,CALnC,CAKW63D,CALX,GAOEA,CAPF,CAO0BH,CAAAz4D,OAP1B,CAWA,KAAKe,CAAL,CAAS,CAAT,CAAY03D,CAAAhxD,OAAA,CAAc1G,CAAd,CAAZ,GAAiC+3D,EAAjC,CAA4C/3D,CAAA,EAA5C,EAEA,GAAIA,CAAJ,IAAW83D,CAAX,CAAmBJ,CAAAz4D,OAAnB,EAEE24D,CACA,CADS,CAAC,CAAD,CACT,CAAAC,CAAA,CAAwB,CAH1B,KAIO,CAGL,IADAC,CAAA,EACA,CAAOJ,CAAAhxD,OAAA,CAAcoxD,CAAd,CAAP,GAAgCC,EAAhC,CAAA,CAA2CD,CAAA,EAG3CD,EAAA,EAAyB73D,CACzB43D,EAAA,CAAS,EAET,KAAK/2D,CAAL,CAAS,CAAT,CAAYb,CAAZ,EAAiB83D,CAAjB,CAAwB93D,CAAA,EAAA,CAAKa,CAAA,EAA7B,CACE+2D,CAAA,CAAO/2D,CAAP,CAAA,CAAY,CAAC62D,CAAAhxD,OAAA,CAAc1G,CAAd,CAVV,CAeH63D,CAAJ,CAA4BG,EAA5B,GACEJ,CAEA,CAFSA,CAAAtzD,OAAA,CAAc,CAAd,CAAiB0zD,EAAjB,CAA8B,CAA9B,CAET,CADAL,CACA,CADWE,CACX,CADmC,CACnC,CAAAA,CAAA,CAAwB,CAH1B,CAMA,OAAO,CAAEvqB,EAAGsqB,CAAL,CAAatuD,EAAGquD,CAAhB,CAA0B33D,EAAG63D,CAA7B,CAhDc,CAuDvBI,QAASA,GAAW,CAACC,CAAD,CAAejB,CAAf,CAA6BkB,CAA7B,CAAsCf,CAAtC,CAA+C,CAC/D,IAAIQ,EAASM,CAAA5qB,EAAb,CACI8qB,EAAcR,CAAA34D,OAAdm5D,CAA8BF,CAAAl4D,EAGlCi3D,EAAA,CAAgBt0D,CAAA,CAAYs0D,CAAZ,CAAD,CAA8BphC,IAAAwiC,IAAA,CAASxiC,IAAA6L,IAAA,CAASy2B,CAAT,CAAkBC,CAAlB,CAAT,CAAyChB,CAAzC,CAA9B,CAAkF,CAACH,CAG9FqB,EAAAA,CAAUrB,CAAVqB,CAAyBJ,CAAAl4D,EACzBu4D,EAAAA,CAAQX,CAAA,CAAOU,CAAP,CAEZ,IAAc,CAAd,CAAIA,CAAJ,CAAiB,CAEfV,CAAAtzD,OAAA,CAAcuxB,IAAA6L,IAAA,CAASw2B,CAAAl4D,EAAT,CAAyBs4D,CAAzB,CAAd,CAGA,KAAS,IAAAz3D,EAAIy3D,CAAb,CAAsBz3D,CAAtB,CAA0B+2D,CAAA34D,OAA1B,CAAyC4B,CAAA,EAAzC,CACE+2D,CAAA,CAAO/2D,CAAP,CAAA,CAAY,CANC,CAAjB,IAcE,KAJAu3D,CAISp4D,CAJK61B,IAAA6L,IAAA,CAAS,CAAT,CAAY02B,CAAZ,CAILp4D,CAHTk4D,CAAAl4D,EAGSA;AAHQ,CAGRA,CAFT43D,CAAA34D,OAESe,CAFO61B,IAAA6L,IAAA,CAAS,CAAT,CAAY42B,CAAZ,CAAsBrB,CAAtB,CAAqC,CAArC,CAEPj3D,CADT43D,CAAA,CAAO,CAAP,CACS53D,CADG,CACHA,CAAAA,CAAAA,CAAI,CAAb,CAAgBA,CAAhB,CAAoBs4D,CAApB,CAA6Bt4D,CAAA,EAA7B,CAAkC43D,CAAA,CAAO53D,CAAP,CAAA,CAAY,CAGhD,IAAa,CAAb,EAAIu4D,CAAJ,CACE,GAAkB,CAAlB,CAAID,CAAJ,CAAc,CAAd,CAAqB,CACnB,IAASE,CAAT,CAAa,CAAb,CAAgBA,CAAhB,CAAoBF,CAApB,CAA6BE,CAAA,EAA7B,CACEZ,CAAAlsD,QAAA,CAAe,CAAf,CACA,CAAAwsD,CAAAl4D,EAAA,EAEF43D,EAAAlsD,QAAA,CAAe,CAAf,CACAwsD,EAAAl4D,EAAA,EANmB,CAArB,IAQE43D,EAAA,CAAOU,CAAP,CAAiB,CAAjB,CAAA,EAKJ,KAAA,CAAOF,CAAP,CAAqBviC,IAAA6L,IAAA,CAAS,CAAT,CAAYu1B,CAAZ,CAArB,CAAgDmB,CAAA,EAAhD,CAA+DR,CAAAjzD,KAAA,CAAY,CAAZ,CAS/D,IALI8zD,CAKJ,CALYb,CAAAc,YAAA,CAAmB,QAAQ,CAACD,CAAD,CAAQnrB,CAAR,CAAWttC,CAAX,CAAc43D,CAAd,CAAsB,CAC3DtqB,CAAA,EAAQmrB,CACRb,EAAA,CAAO53D,CAAP,CAAA,CAAYstC,CAAZ,CAAgB,EAChB,OAAOzX,KAAAC,MAAA,CAAWwX,CAAX,CAAe,EAAf,CAHoD,CAAjD,CAIT,CAJS,CAKZ,CACEsqB,CAAAlsD,QAAA,CAAe+sD,CAAf,CACA,CAAAP,CAAAl4D,EAAA,EArD6D,CA2EnEs3D,QAASA,GAAY,CAACG,CAAD,CAAS7gD,CAAT,CAAkB+hD,CAAlB,CAA4BC,CAA5B,CAAwC3B,CAAxC,CAAsD,CAEzE,GAAM,CAAAl4D,CAAA,CAAS04D,CAAT,CAAN,EAA0B,CAAAh5D,CAAA,CAASg5D,CAAT,CAA1B,EAA+CoB,KAAA,CAAMpB,CAAN,CAA/C,CAA8D,MAAO,EAErE,KAAIqB,EAAa,CAACC,QAAA,CAAStB,CAAT,CAAlB,CACIuB,EAAS,CAAA,CADb,CAEItB,EAAS7hC,IAAAojC,IAAA,CAASxB,CAAT,CAATC,CAA4B,EAFhC,CAGIwB,EAAgB,EAGpB,IAAIJ,CAAJ,CACEI,CAAA,CAAgB,QADlB,KAEO,CACLhB,CAAA,CAAerwD,EAAA,CAAM6vD,CAAN,CAEfO,GAAA,CAAYC,CAAZ,CAA0BjB,CAA1B,CAAwCrgD,CAAAuhD,QAAxC,CAAyDvhD,CAAAwgD,QAAzD,CAEIQ,EAAAA,CAASM,CAAA5qB,EACT6rB,EAAAA,CAAajB,CAAAl4D,EACb23D,EAAAA,CAAWO,CAAA5uD,EACX8vD,EAAAA,CAAW,EAIf,KAHAJ,CAGA,CAHSpB,CAAAyB,OAAA,CAAc,QAAQ,CAACL,CAAD,CAAS1rB,CAAT,CAAY,CAAE,MAAO0rB,EAAP,EAAiB,CAAC1rB,CAApB,CAAlC;AAA4D,CAAA,CAA5D,CAGT,CAAoB,CAApB,CAAO6rB,CAAP,CAAA,CACEvB,CAAAlsD,QAAA,CAAe,CAAf,CACA,CAAAytD,CAAA,EAIe,EAAjB,CAAIA,CAAJ,CACEC,CADF,CACaxB,CAAAtzD,OAAA,CAAc60D,CAAd,CAA0BvB,CAAA34D,OAA1B,CADb,EAGEm6D,CACA,CADWxB,CACX,CAAAA,CAAA,CAAS,CAAC,CAAD,CAJX,CAQI0B,EAAAA,CAAS,EAIb,KAHI1B,CAAA34D,OAGJ,EAHqB2X,CAAA2iD,OAGrB,EAFED,CAAA5tD,QAAA,CAAeksD,CAAAtzD,OAAA,CAAc,CAACsS,CAAA2iD,OAAf,CAA+B3B,CAAA34D,OAA/B,CAAAgL,KAAA,CAAmD,EAAnD,CAAf,CAEF,CAAO2tD,CAAA34D,OAAP,CAAuB2X,CAAA4iD,MAAvB,CAAA,CACEF,CAAA5tD,QAAA,CAAeksD,CAAAtzD,OAAA,CAAc,CAACsS,CAAA4iD,MAAf,CAA8B5B,CAAA34D,OAA9B,CAAAgL,KAAA,CAAkD,EAAlD,CAAf,CAEE2tD,EAAA34D,OAAJ,EACEq6D,CAAA5tD,QAAA,CAAeksD,CAAA3tD,KAAA,CAAY,EAAZ,CAAf,CAEFivD,EAAA,CAAgBI,CAAArvD,KAAA,CAAY0uD,CAAZ,CAGZS,EAAAn6D,OAAJ,GACEi6D,CADF,EACmBN,CADnB,CACgCQ,CAAAnvD,KAAA,CAAc,EAAd,CADhC,CAII0tD,EAAJ,GACEuB,CADF,EACmB,IADnB,CAC0BvB,CAD1B,CA3CK,CA+CP,MAAa,EAAb,CAAIF,CAAJ,EAAmBuB,CAAAA,CAAnB,CACSpiD,CAAA6iD,OADT,CAC0BP,CAD1B,CAC0CtiD,CAAA8iD,OAD1C,CAGS9iD,CAAA+iD,OAHT,CAG0BT,CAH1B,CAG0CtiD,CAAAgjD,OA9D+B,CAkE3EC,QAASA,GAAS,CAACC,CAAD,CAAMlC,CAAN,CAAcz4C,CAAd,CAAoB46C,CAApB,CAA6B,CAC7C,IAAIC,EAAM,EACV,IAAU,CAAV,CAAIF,CAAJ,EAAgBC,CAAhB,EAAkC,CAAlC,EAA2BD,CAA3B,CACMC,CAAJ,CACED,CADF,CACQ,CAACA,CADT,CACe,CADf,EAGEA,CACA,CADM,CAACA,CACP,CAAAE,CAAA,CAAM,GAJR,CAQF,KADAF,CACA,CADM,EACN,CADWA,CACX,CAAOA,CAAA76D,OAAP,CAAoB24D,CAApB,CAAA,CAA4BkC,CAAA,CAAM/B,EAAN,CAAkB+B,CAC1C36C,EAAJ,GACE26C,CADF,CACQA,CAAAtsC,OAAA,CAAWssC,CAAA76D,OAAX,CAAwB24D,CAAxB,CADR,CAGA,OAAOoC,EAAP,CAAaF,CAfgC,CAmB/CG,QAASA,GAAU,CAACnvD,CAAD;AAAO2kB,CAAP,CAAa1F,CAAb,CAAqB5K,CAArB,CAA2B46C,CAA3B,CAAoC,CACrDhwC,CAAA,CAASA,CAAT,EAAmB,CACnB,OAAO,SAAQ,CAACzhB,CAAD,CAAO,CAChBnI,CAAAA,CAAQmI,CAAA,CAAK,KAAL,CAAawC,CAAb,CAAA,EACZ,IAAa,CAAb,CAAIif,CAAJ,EAAkB5pB,CAAlB,CAA0B,CAAC4pB,CAA3B,CACE5pB,CAAA,EAAS4pB,CAEG,EAAd,GAAI5pB,CAAJ,EAA+B,GAA/B,GAAmB4pB,CAAnB,GAAmC5pB,CAAnC,CAA2C,EAA3C,CACA,OAAO05D,GAAA,CAAU15D,CAAV,CAAiBsvB,CAAjB,CAAuBtQ,CAAvB,CAA6B46C,CAA7B,CANa,CAF+B,CAYvDG,QAASA,GAAa,CAACpvD,CAAD,CAAOqvD,CAAP,CAAkBC,CAAlB,CAA8B,CAClD,MAAO,SAAQ,CAAC9xD,CAAD,CAAOuuD,CAAP,CAAgB,CAC7B,IAAI12D,EAAQmI,CAAA,CAAK,KAAL,CAAawC,CAAb,CAAA,EAAZ,CAEImC,EAAMmF,EAAA,EADQgoD,CAAA,CAAa,YAAb,CAA4B,EACpC,GAD2CD,CAAA,CAAY,OAAZ,CAAsB,EACjE,EAAuBrvD,CAAvB,CAEV,OAAO+rD,EAAA,CAAQ5pD,CAAR,CAAA,CAAa9M,CAAb,CALsB,CADmB,CAoBpDk6D,QAASA,GAAsB,CAACC,CAAD,CAAO,CAElC,IAAIC,EAAmBC,CAAC,IAAIv5D,IAAJ,CAASq5D,CAAT,CAAe,CAAf,CAAkB,CAAlB,CAADE,QAAA,EAGvB,OAAO,KAAIv5D,IAAJ,CAASq5D,CAAT,CAAe,CAAf,EAAwC,CAArB,EAACC,CAAD,CAA0B,CAA1B,CAA8B,EAAjD,EAAuDA,CAAvD,CAL2B,CActCE,QAASA,GAAU,CAAChrC,CAAD,CAAO,CACvB,MAAO,SAAQ,CAACnnB,CAAD,CAAO,CAAA,IACfoyD,EAAaL,EAAA,CAAuB/xD,CAAAqyD,YAAA,EAAvB,CAGbl3B,EAAAA,CAAO,CAVNm3B,IAAI35D,IAAJ25D,CAQ8BtyD,CARrBqyD,YAAA,EAATC,CAQ8BtyD,CARGuyD,SAAA,EAAjCD,CAQ8BtyD,CANnCwyD,QAAA,EAFKF,EAEiB,CAFjBA,CAQ8BtyD,CANTkyD,OAAA,EAFrBI,EAUDn3B,CAAoB,CAACi3B,CACtB9zC,EAAAA,CAAS,CAATA,CAAaiP,IAAAklC,MAAA,CAAWt3B,CAAX,CAAkB,MAAlB,CAEhB,OAAOo2B,GAAA,CAAUjzC,CAAV,CAAkB6I,CAAlB,CAPY,CADC,CAgB1BurC,QAASA,GAAS,CAAC1yD,CAAD,CAAOuuD,CAAP,CAAgB,CAChC,MAA6B,EAAtB;AAAAvuD,CAAAqyD,YAAA,EAAA,CAA0B9D,CAAAoE,KAAA,CAAa,CAAb,CAA1B,CAA4CpE,CAAAoE,KAAA,CAAa,CAAb,CADnB,CA8IlC9F,QAASA,GAAU,CAACyB,CAAD,CAAU,CAK3BsE,QAASA,EAAgB,CAACC,CAAD,CAAS,CAChC,IAAIv1D,CACJ,IAAKA,CAAL,CAAau1D,CAAAv1D,MAAA,CAAaw1D,CAAb,CAAb,CAA2C,CACrC9yD,CAAAA,CAAO,IAAIrH,IAAJ,CAAS,CAAT,CAD8B,KAErCo6D,EAAS,CAF4B,CAGrCC,EAAS,CAH4B,CAIrCC,EAAa31D,CAAA,CAAM,CAAN,CAAA,CAAW0C,CAAAkzD,eAAX,CAAiClzD,CAAAmzD,YAJT,CAKrCC,EAAa91D,CAAA,CAAM,CAAN,CAAA,CAAW0C,CAAAqzD,YAAX,CAA8BrzD,CAAAszD,SAE3Ch2D,EAAA,CAAM,CAAN,CAAJ,GACEy1D,CACA,CADSx5D,EAAA,CAAM+D,CAAA,CAAM,CAAN,CAAN,CAAiBA,CAAA,CAAM,EAAN,CAAjB,CACT,CAAA01D,CAAA,CAAQz5D,EAAA,CAAM+D,CAAA,CAAM,CAAN,CAAN,CAAiBA,CAAA,CAAM,EAAN,CAAjB,CAFV,CAIA21D,EAAA77D,KAAA,CAAgB4I,CAAhB,CAAsBzG,EAAA,CAAM+D,CAAA,CAAM,CAAN,CAAN,CAAtB,CAAuC/D,EAAA,CAAM+D,CAAA,CAAM,CAAN,CAAN,CAAvC,CAAyD,CAAzD,CAA4D/D,EAAA,CAAM+D,CAAA,CAAM,CAAN,CAAN,CAA5D,CACIlF,EAAAA,CAAImB,EAAA,CAAM+D,CAAA,CAAM,CAAN,CAAN,EAAkB,CAAlB,CAAJlF,CAA2B26D,CAC3BQ,EAAAA,CAAIh6D,EAAA,CAAM+D,CAAA,CAAM,CAAN,CAAN,EAAkB,CAAlB,CAAJi2D,CAA2BP,CAC3B/W,EAAAA,CAAI1iD,EAAA,CAAM+D,CAAA,CAAM,CAAN,CAAN,EAAkB,CAAlB,CACJk2D,EAAAA,CAAKjmC,IAAAklC,MAAA,CAAgD,GAAhD,CAAWgB,UAAA,CAAW,IAAX,EAAmBn2D,CAAA,CAAM,CAAN,CAAnB,EAA+B,CAA/B,EAAX,CACT81D,EAAAh8D,KAAA,CAAgB4I,CAAhB,CAAsB5H,CAAtB,CAAyBm7D,CAAzB,CAA4BtX,CAA5B,CAA+BuX,CAA/B,CAhByC,CAmB3C,MAAOX,EArByB,CAFlC,IAAIC,EAAgB,sGA2BpB,OAAO,SAAQ,CAAC9yD,CAAD;AAAO0zD,CAAP,CAAej0D,CAAf,CAAyB,CAAA,IAClC+7B,EAAO,EAD2B,CAElCh6B,EAAQ,EAF0B,CAGlC9C,CAHkC,CAG9BpB,CAERo2D,EAAA,CAASA,CAAT,EAAmB,YACnBA,EAAA,CAASpF,CAAAqF,iBAAA,CAAyBD,CAAzB,CAAT,EAA6CA,CACzCj9D,EAAA,CAASuJ,CAAT,CAAJ,GACEA,CADF,CACS4zD,EAAA34D,KAAA,CAAmB+E,CAAnB,CAAA,CAA2BzG,EAAA,CAAMyG,CAAN,CAA3B,CAAyC4yD,CAAA,CAAiB5yD,CAAjB,CADlD,CAII7J,EAAA,CAAS6J,CAAT,CAAJ,GACEA,CADF,CACS,IAAIrH,IAAJ,CAASqH,CAAT,CADT,CAIA,IAAK,CAAAtH,EAAA,CAAOsH,CAAP,CAAL,EAAsB,CAAAywD,QAAA,CAASzwD,CAAA/B,QAAA,EAAT,CAAtB,CACE,MAAO+B,EAGT,KAAA,CAAO0zD,CAAP,CAAA,CAEE,CADAp2D,CACA,CADQu2D,EAAA59C,KAAA,CAAwBy9C,CAAxB,CACR,GACElyD,CACA,CADQnD,EAAA,CAAOmD,CAAP,CAAclE,CAAd,CAAqB,CAArB,CACR,CAAAo2D,CAAA,CAASlyD,CAAAgoD,IAAA,EAFX,GAIEhoD,CAAAnF,KAAA,CAAWq3D,CAAX,CACA,CAAAA,CAAA,CAAS,IALX,CASF,KAAIpzD,EAAqBN,CAAAO,kBAAA,EACrBd,EAAJ,GACEa,CACA,CADqBd,EAAA,CAAiBC,CAAjB,CAA2Ba,CAA3B,CACrB,CAAAN,CAAA,CAAOI,EAAA,CAAuBJ,CAAvB,CAA6BP,CAA7B,CAAuC,CAAA,CAAvC,CAFT,CAIA3I,EAAA,CAAQ0K,CAAR,CAAe,QAAQ,CAAC3J,CAAD,CAAQ,CAC7B6G,CAAA,CAAKo1D,EAAA,CAAaj8D,CAAb,CACL2jC,EAAA,EAAQ98B,CAAA,CAAKA,CAAA,CAAGsB,CAAH,CAASsuD,CAAAqF,iBAAT,CAAmCrzD,CAAnC,CAAL,CACe,IAAV,GAAAzI,CAAA,CAAmB,GAAnB,CAA0BA,CAAA8H,QAAA,CAAc,UAAd,CAA0B,EAA1B,CAAAA,QAAA,CAAsC,KAAtC,CAA6C,GAA7C,CAHV,CAA/B,CAMA,OAAO67B,EAzC+B,CA9Bb,CA2G7BuxB,QAASA,GAAU,EAAG,CACpB,MAAO,SAAQ,CAACrV,CAAD,CAASqc,CAAT,CAAkB,CAC3B15D,CAAA,CAAY05D,CAAZ,CAAJ,GACIA,CADJ,CACc,CADd,CAGA,OAAO90D,GAAA,CAAOy4C,CAAP,CAAeqc,CAAf,CAJwB,CADb,CAqJtB/G,QAASA,GAAa,EAAG,CACvB,MAAO,SAAQ,CAAC3iD,CAAD;AAAQ2pD,CAAR,CAAeC,CAAf,CAAsB,CAEjCD,CAAA,CAD8BE,QAAhC,GAAI3mC,IAAAojC,IAAA,CAASppC,MAAA,CAAOysC,CAAP,CAAT,CAAJ,CACUzsC,MAAA,CAAOysC,CAAP,CADV,CAGUz6D,EAAA,CAAMy6D,CAAN,CAEV,IAAIl0D,CAAA,CAAYk0D,CAAZ,CAAJ,CAAwB,MAAO3pD,EAE3BlU,EAAA,CAASkU,CAAT,CAAJ,GAAqBA,CAArB,CAA6BA,CAAAjQ,SAAA,EAA7B,CACA,IAAK,CAAA/D,EAAA,CAAYgU,CAAZ,CAAL,CAAyB,MAAOA,EAEhC4pD,EAAA,CAAUA,CAAAA,CAAF,EAAW1D,KAAA,CAAM0D,CAAN,CAAX,CAA2B,CAA3B,CAA+B16D,EAAA,CAAM06D,CAAN,CACvCA,EAAA,CAAiB,CAAT,CAACA,CAAD,CAAc1mC,IAAA6L,IAAA,CAAS,CAAT,CAAY/uB,CAAA1T,OAAZ,CAA2Bs9D,CAA3B,CAAd,CAAkDA,CAE1D,OAAa,EAAb,EAAID,CAAJ,CACSG,EAAA,CAAQ9pD,CAAR,CAAe4pD,CAAf,CAAsBA,CAAtB,CAA8BD,CAA9B,CADT,CAGgB,CAAd,GAAIC,CAAJ,CACSE,EAAA,CAAQ9pD,CAAR,CAAe2pD,CAAf,CAAsB3pD,CAAA1T,OAAtB,CADT,CAGSw9D,EAAA,CAAQ9pD,CAAR,CAAekjB,IAAA6L,IAAA,CAAS,CAAT,CAAY66B,CAAZ,CAAoBD,CAApB,CAAf,CAA2CC,CAA3C,CApBwB,CADd,CA2BzBE,QAASA,GAAO,CAAC9pD,CAAD,CAAQ4pD,CAAR,CAAeG,CAAf,CAAoB,CAClC,MAAI39D,EAAA,CAAS4T,CAAT,CAAJ,CAA4BA,CAAAjR,MAAA,CAAY66D,CAAZ,CAAmBG,CAAnB,CAA5B,CAEOh7D,EAAAhC,KAAA,CAAWiT,CAAX,CAAkB4pD,CAAlB,CAAyBG,CAAzB,CAH2B,CAsjBpCjH,QAASA,GAAa,CAACr6C,CAAD,CAAS,CAoD7BuhD,QAASA,EAAiB,CAACC,CAAD,CAAiB,CACzC,MAAOA,EAAA1mB,IAAA,CAAmB,QAAQ,CAAC2mB,CAAD,CAAY,CAAA,IACxCC,EAAa,CAD2B,CACxB7vD,EAAM5K,EAE1B,IAAI7C,CAAA,CAAWq9D,CAAX,CAAJ,CACE5vD,CAAA,CAAM4vD,CADR,KAEO,IAAI99D,CAAA,CAAS89D,CAAT,CAAJ,CAAyB,CAC9B,GAA6B,GAA7B,GAAKA,CAAAn2D,OAAA,CAAiB,CAAjB,CAAL,EAA4D,GAA5D,GAAoCm2D,CAAAn2D,OAAA,CAAiB,CAAjB,CAApC,CACEo2D,CACA,CADqC,GAAxB,GAAAD,CAAAn2D,OAAA,CAAiB,CAAjB,CAAA,CAA+B,EAA/B,CAAmC,CAChD,CAAAm2D,CAAA,CAAYA,CAAAjzD,UAAA,CAAoB,CAApB,CAEd,IAAkB,EAAlB,GAAIizD,CAAJ,GACE5vD,CACIoE,CADE+J,CAAA,CAAOyhD,CAAP,CACFxrD,CAAApE,CAAAoE,SAFN,EAGI,IAAI9R;AAAM0N,CAAA,EAAV,CACAA,EAAMA,QAAQ,CAAC9M,CAAD,CAAQ,CAAE,MAAOA,EAAA,CAAMZ,CAAN,CAAT,CATI,CAahC,MAAO,CAAC0N,IAAKA,CAAN,CAAW6vD,WAAYA,CAAvB,CAlBqC,CAAvC,CADkC,CAuB3Cn9D,QAASA,EAAW,CAACQ,CAAD,CAAQ,CAC1B,OAAQ,MAAOA,EAAf,EACE,KAAK,QAAL,CACA,KAAK,SAAL,CACA,KAAK,QAAL,CACE,MAAO,CAAA,CACT,SACE,MAAO,CAAA,CANX,CAD0B,CAoC5B48D,QAASA,EAAc,CAACC,CAAD,CAAKC,CAAL,CAAS,CAC9B,IAAIr2C,EAAS,CAAb,CACIs2C,EAAQF,CAAAl3D,KADZ,CAEIq3D,EAAQF,CAAAn3D,KAEZ,IAAIo3D,CAAJ,GAAcC,CAAd,CAAqB,CACfC,IAAAA,EAASJ,CAAA78D,MAATi9D,CACAC,EAASJ,CAAA98D,MAEC,SAAd,GAAI+8D,CAAJ,EAEEE,CACA,CADSA,CAAA7vD,YAAA,EACT,CAAA8vD,CAAA,CAASA,CAAA9vD,YAAA,EAHX,EAIqB,QAJrB,GAIW2vD,CAJX,GAOMl/D,CAAA,CAASo/D,CAAT,CACJ,GADsBA,CACtB,CAD+BJ,CAAA54D,MAC/B,EAAIpG,CAAA,CAASq/D,CAAT,CAAJ,GAAsBA,CAAtB,CAA+BJ,CAAA74D,MAA/B,CARF,CAWIg5D,EAAJ,GAAeC,CAAf,GACEz2C,CADF,CACWw2C,CAAA,CAASC,CAAT,CAAmB,EAAnB,CAAuB,CADlC,CAfmB,CAArB,IAmBEz2C,EAAA,CAAoB,WAAX,GAACs2C,CAAD,CAA0B,CAA1B,CACI,WAAX,GAACC,CAAD,CAA2B,EAA3B,CACW,MAAX,GAACD,CAAD,CAAqB,CAArB,CACW,MAAX,GAACC,CAAD,CAAsB,EAAtB,CACCD,CAAD,CAASC,CAAT,CAAmB,EAAnB,CAAuB,CAG3B,OAAOv2C,EA/BuB,CA9GhC,MAAO,SAAQ,CAACziB,CAAD,CAAQm5D,CAAR,CAAuBC,CAAvB,CAAqCC,CAArC,CAAgD,CAE7D,GAAa,IAAb,EAAIr5D,CAAJ,CAAmB,MAAOA,EAC1B,IAAK,CAAAxF,EAAA,CAAYwF,CAAZ,CAAL,CACE,KAAMzF,EAAA,CAAO,SAAP,CAAA,CAAkB,UAAlB;AAAkEyF,CAAlE,CAAN,CAGGrF,CAAA,CAAQw+D,CAAR,CAAL,GAA+BA,CAA/B,CAA+C,CAACA,CAAD,CAA/C,CAC6B,EAA7B,GAAIA,CAAAr+D,OAAJ,GAAkCq+D,CAAlC,CAAkD,CAAC,GAAD,CAAlD,CAEA,KAAIG,EAAad,CAAA,CAAkBW,CAAlB,CAAjB,CAEIR,EAAaS,CAAA,CAAgB,EAAhB,CAAoB,CAFrC,CAKI91B,EAAUjoC,CAAA,CAAWg+D,CAAX,CAAA,CAAwBA,CAAxB,CAAoCT,CAK9CW,EAAAA,CAAgB56D,KAAA8iB,UAAAswB,IAAAx2C,KAAA,CAAyByE,CAAzB,CAMpBw5D,QAA4B,CAACx9D,CAAD,CAAQiE,CAAR,CAAe,CAIzC,MAAO,CACLjE,MAAOA,CADF,CAELy9D,WAAY,CAACz9D,MAAOiE,CAAR,CAAe0B,KAAM,QAArB,CAA+B1B,MAAOA,CAAtC,CAFP,CAGLy5D,gBAAiBJ,CAAAvnB,IAAA,CAAe,QAAQ,CAAC2mB,CAAD,CAAY,CACzB,IAAA,EAAAA,CAAA5vD,IAAA,CAAc9M,CAAd,CAmE3B2F,EAAAA,CAAO,MAAO3F,EAClB,IAAc,IAAd,GAAIA,CAAJ,CACE2F,CAAA,CAAO,MADT,KAEO,IAAa,QAAb,GAAIA,CAAJ,CAnBmB,CAAA,CAAA,CAE1B,GAAItG,CAAA,CAAWW,CAAAe,QAAX,CAAJ,GACEf,CACI,CADIA,CAAAe,QAAA,EACJ,CAAAvB,CAAA,CAAYQ,CAAZ,CAFN,EAE0B,MAAA,CAGtBsC,GAAA,CAAkBtC,CAAlB,CAAJ,GACEA,CACI,CADIA,CAAAuC,SAAA,EACJ,CAAA/C,CAAA,CAAYQ,CAAZ,CAFN,CAP0B,CAnDpB,MAyEC,CAACA,MAAOA,CAAR,CAAe2F,KAAMA,CAArB,CAA2B1B,MAzEmBA,CAyE9C,CA1EiD,CAAnC,CAHZ,CAJkC,CANvB,CACpBs5D,EAAA39D,KAAA,CAkBA+9D,QAAqB,CAACd,CAAD,CAAKC,CAAL,CAAS,CAC5B,IAD4B,IACnBj9D,EAAI,CADe,CACZY,EAAK68D,CAAAx+D,OAArB,CAAwCe,CAAxC,CAA4CY,CAA5C,CAAgDZ,CAAA,EAAhD,CAAqD,CACnD,IAAI4mB,EAAS6gB,CAAA,CAAQu1B,CAAAa,gBAAA,CAAmB79D,CAAnB,CAAR,CAA+Bi9D,CAAAY,gBAAA,CAAmB79D,CAAnB,CAA/B,CACb,IAAI4mB,CAAJ,CACE,MAAOA,EAAP;AAAgB62C,CAAA,CAAWz9D,CAAX,CAAA88D,WAAhB,CAA2CA,CAHM,CAOrD,OAAQr1B,CAAA,CAAQu1B,CAAAY,WAAR,CAAuBX,CAAAW,WAAvB,CAAR,EAAiDb,CAAA,CAAeC,CAAAY,WAAf,CAA8BX,CAAAW,WAA9B,CAAjD,EAAiGd,CARrE,CAlB9B,CAGA,OAFA34D,EAEA,CAFQu5D,CAAAxnB,IAAA,CAAkB,QAAQ,CAAC/2C,CAAD,CAAO,CAAE,MAAOA,EAAAgB,MAAT,CAAjC,CAtBqD,CADlC,CAkJ/B49D,QAASA,GAAW,CAACtsD,CAAD,CAAY,CAC1BjS,CAAA,CAAWiS,CAAX,CAAJ,GACEA,CADF,CACc,CACV2d,KAAM3d,CADI,CADd,CAKAA,EAAA2gB,SAAA,CAAqB3gB,CAAA2gB,SAArB,EAA2C,IAC3C,OAAO7vB,GAAA,CAAQkP,CAAR,CAPuB,CAgjBhCusD,QAASA,GAAc,CAACtrC,CAAD,CAAWC,CAAX,CAAmBoP,CAAnB,CAA2B7pB,CAA3B,CAAqC4B,CAArC,CAAmD,CACxE,IAAAmkD,WAAA,CAAkB,EAGlB,KAAAC,OAAA,CAAc,EACd,KAAAC,UAAA,CAAiB,EACjB,KAAAC,SAAA,CAAgBl5D,IAAAA,EAChB,KAAAm5D,MAAA,CAAavkD,CAAA,CAAa6Y,CAAA7nB,KAAb,EAA4B6nB,CAAAre,OAA5B,EAA6C,EAA7C,CAAA,CAAiDytB,CAAjD,CACb,KAAAu8B,OAAA,CAAc,CAAA,CAEd,KAAAC,OAAA,CADA,IAAAC,UACA,CADiB,CAAA,CAGjB,KAAAC,WAAA,CADA,IAAAC,SACA,CADgB,CAAA,CAEhB,KAAAC,aAAA,CAAoBC,EAEpB,KAAAtoC,UAAA,CAAiB5D,CACjB,KAAAmsC,UAAA,CAAiB3mD,CAEjB4mD,GAAA,CAAc,IAAd,CAlBwE,CA0iB1EA,QAASA,GAAa,CAAC1mC,CAAD,CAAW,CAC/BA,CAAA2mC,aAAA;AAAwB,EACxB3mC,EAAA2mC,aAAA,CAAsBC,EAAtB,CAAA,CAAuC,EAAE5mC,CAAA2mC,aAAA,CAAsBE,EAAtB,CAAF,CAAuC7mC,CAAA9B,UAAAzR,SAAA,CAA4Bo6C,EAA5B,CAAvC,CAFR,CAIjCC,QAASA,GAAoB,CAAC5/D,CAAD,CAAU,CAqErC6/D,QAASA,EAAiB,CAACC,CAAD,CAAOtoC,CAAP,CAAkBuoC,CAAlB,CAA+B,CACnDA,CAAJ,EAAoB,CAAAD,CAAAL,aAAA,CAAkBjoC,CAAlB,CAApB,EACEsoC,CAAAP,UAAA95C,SAAA,CAAwBq6C,CAAA9oC,UAAxB,CAAwCQ,CAAxC,CACA,CAAAsoC,CAAAL,aAAA,CAAkBjoC,CAAlB,CAAA,CAA+B,CAAA,CAFjC,EAGYuoC,CAAAA,CAHZ,EAG2BD,CAAAL,aAAA,CAAkBjoC,CAAlB,CAH3B,GAIEsoC,CAAAP,UAAA75C,YAAA,CAA2Bo6C,CAAA9oC,UAA3B,CAA2CQ,CAA3C,CACA,CAAAsoC,CAAAL,aAAA,CAAkBjoC,CAAlB,CAAA,CAA+B,CAAA,CALjC,CADuD,CAUzDwoC,QAASA,EAAmB,CAACF,CAAD,CAAOG,CAAP,CAA2BC,CAA3B,CAAoC,CAC9DD,CAAA,CAAqBA,CAAA,CAAqB,GAArB,CAA2BryD,EAAA,CAAWqyD,CAAX,CAA+B,GAA/B,CAA3B,CAAiE,EAEtFJ,EAAA,CAAkBC,CAAlB,CAAwBH,EAAxB,CAAsCM,CAAtC,CAAsE,CAAA,CAAtE,GAA0DC,CAA1D,CACAL,EAAA,CAAkBC,CAAlB,CAAwBJ,EAAxB,CAAwCO,CAAxC,CAAwE,CAAA,CAAxE,GAA4DC,CAA5D,CAJ8D,CA/E3B,IAEjC/5D,EAAMnG,CAAAmG,IAF2B,CAGjCg6D,EAAQngE,CAAAmgE,MAFAngE,EAAAogE,MAIZ95C,UAAA+5C,aAAA,CAA+BC,QAAQ,CAACL,CAAD,CAAqBryC,CAArB,CAA4Bjf,CAA5B,CAAwC,CACzEtL,CAAA,CAAYuqB,CAAZ,CAAJ,EACekyC,IA+CV,SAGL,GAlDeA,IAgDb,SAEF,CAFe,EAEf,EAAA35D,CAAA,CAlDe25D,IAkDX,SAAJ,CAlDiCG,CAkDjC,CAlDqDtxD,CAkDrD,CAnDA,GAGkBmxD,IAoDd,SAGJ,EAFEK,CAAA,CArDgBL,IAqDV,SAAN;AArDkCG,CAqDlC,CArDsDtxD,CAqDtD,CAEF,CAAI4xD,EAAA,CAvDcT,IAuDA,SAAd,CAAJ,GAvDkBA,IAwDhB,SADF,CACel6D,IAAAA,EADf,CA1DA,CAKK3G,GAAA,CAAU2uB,CAAV,CAAL,CAIMA,CAAJ,EACEuyC,CAAA,CAAM,IAAAvB,OAAN,CAAmBqB,CAAnB,CAAuCtxD,CAAvC,CACA,CAAAxI,CAAA,CAAI,IAAA04D,UAAJ,CAAoBoB,CAApB,CAAwCtxD,CAAxC,CAFF,GAIExI,CAAA,CAAI,IAAAy4D,OAAJ,CAAiBqB,CAAjB,CAAqCtxD,CAArC,CACA,CAAAwxD,CAAA,CAAM,IAAAtB,UAAN,CAAsBoB,CAAtB,CAA0CtxD,CAA1C,CALF,CAJF,EACEwxD,CAAA,CAAM,IAAAvB,OAAN,CAAmBqB,CAAnB,CAAuCtxD,CAAvC,CACA,CAAAwxD,CAAA,CAAM,IAAAtB,UAAN,CAAsBoB,CAAtB,CAA0CtxD,CAA1C,CAFF,CAYI,KAAAmwD,SAAJ,EACEe,CAAA,CAAkB,IAAlB,CA/nBUW,YA+nBV,CAAuC,CAAA,CAAvC,CAEA,CADA,IAAAvB,OACA,CADc,IAAAG,SACd,CAD8Bx5D,IAAAA,EAC9B,CAAAo6D,CAAA,CAAoB,IAApB,CAA0B,EAA1B,CAA8B,IAA9B,CAHF,GAKEH,CAAA,CAAkB,IAAlB,CAnoBUW,YAmoBV,CAAuC,CAAA,CAAvC,CAGA,CAFA,IAAAvB,OAEA,CAFcsB,EAAA,CAAc,IAAA3B,OAAd,CAEd,CADA,IAAAQ,SACA,CADgB,CAAC,IAAAH,OACjB,CAAAe,CAAA,CAAoB,IAApB,CAA0B,EAA1B,CAA8B,IAAAf,OAA9B,CARF,CAiBEwB,EAAA,CADE,IAAA3B,SAAJ,EAAqB,IAAAA,SAAA,CAAcmB,CAAd,CAArB,CACkBr6D,IAAAA,EADlB,CAEW,IAAAg5D,OAAA,CAAYqB,CAAZ,CAAJ,CACW,CAAA,CADX,CAEI,IAAApB,UAAA,CAAeoB,CAAf,CAAJ,CACW,CAAA,CADX,CAGW,IAGlBD,EAAA,CAAoB,IAApB,CAA0BC,CAA1B,CAA8CQ,CAA9C,CACA,KAAApB,aAAAgB,aAAA,CAA+BJ,CAA/B;AAAmDQ,CAAnD,CAAkE,IAAlE,CA7C6E,CAL1C,CAuFvCF,QAASA,GAAa,CAACjhE,CAAD,CAAM,CAC1B,GAAIA,CAAJ,CACE,IAAS6E,IAAAA,CAAT,GAAiB7E,EAAjB,CACE,GAAIA,CAAAa,eAAA,CAAmBgE,CAAnB,CAAJ,CACE,MAAO,CAAA,CAIb,OAAO,CAAA,CARmB,CAwwC5Bu8D,QAASA,GAAoB,CAACZ,CAAD,CAAO,CAClCA,CAAAa,YAAAt7D,KAAA,CAAsB,QAAQ,CAACxE,CAAD,CAAQ,CACpC,MAAOi/D,EAAAc,SAAA,CAAc//D,CAAd,CAAA,CAAuBA,CAAvB,CAA+BA,CAAAuC,SAAA,EADF,CAAtC,CADkC,CAWpCy9D,QAASA,GAAa,CAACl0D,CAAD,CAAQjI,CAAR,CAAiBN,CAAjB,CAAuB07D,CAAvB,CAA6BpjD,CAA7B,CAAuClD,CAAvC,CAAiD,CACrE,IAAIhT,EAAO7B,CAAA,CAAUD,CAAA,CAAQ,CAAR,CAAA8B,KAAV,CAKX,IAAKqrD,CAAAn1C,CAAAm1C,QAAL,CAAuB,CACrB,IAAIiP,EAAY,CAAA,CAEhBp8D,EAAA8J,GAAA,CAAW,kBAAX,CAA+B,QAAQ,EAAG,CACxCsyD,CAAA,CAAY,CAAA,CAD4B,CAA1C,CAKAp8D,EAAA8J,GAAA,CAAW,mBAAX,CAAgC,QAAQ,CAACuyD,CAAD,CAAK,CAI3C,GAAI19D,CAAA,CAAY09D,CAAAj0D,KAAZ,CAAJ,EAAwC,EAAxC,GAA4Bi0D,CAAAj0D,KAA5B,CACEg0D,CAAA,CAAY,CAAA,CAL6B,CAA7C,CASAp8D,EAAA8J,GAAA,CAAW,gBAAX,CAA6B,QAAQ,EAAG,CACtCsyD,CAAA,CAAY,CAAA,CACZh0C,EAAA,EAFsC,CAAxC,CAjBqB,CAuBvB,IAAIwlB,CAAJ,CAEIxlB,EAAWA,QAAQ,CAACi0C,CAAD,CAAK,CACtBzuB,CAAJ,GACE94B,CAAAsV,MAAAM,OAAA,CAAsBkjB,CAAtB,CACA,CAAAA,CAAA,CAAU,IAFZ,CAIA,IAAIwuB,CAAAA,CAAJ,CAAA,CAL0B,IAMtBjgE,EAAQ6D,CAAAqD,IAAA,EACRgc,EAAAA,CAAQg9C,CAARh9C,EAAcg9C,CAAAv6D,KAKL,WAAb,GAAIA,CAAJ,EAA6BpC,CAAA48D,OAA7B;AAA4D,OAA5D,GAA4C58D,CAAA48D,OAA5C,GACEngE,CADF,CACUgf,CAAA,CAAKhf,CAAL,CADV,CAOA,EAAIi/D,CAAAmB,WAAJ,GAAwBpgE,CAAxB,EAA4C,EAA5C,GAAkCA,CAAlC,EAAkDi/D,CAAAoB,sBAAlD,GACEpB,CAAAqB,cAAA,CAAmBtgE,CAAnB,CAA0BkjB,CAA1B,CAfF,CAL0B,CA0B5B,IAAIrH,CAAAw1C,SAAA,CAAkB,OAAlB,CAAJ,CACExtD,CAAA8J,GAAA,CAAW,OAAX,CAAoBse,CAApB,CADF,KAEO,CACL,IAAIs0C,EAAgBA,QAAQ,CAACL,CAAD,CAAK1tD,CAAL,CAAYguD,CAAZ,CAAuB,CAC5C/uB,CAAL,GACEA,CADF,CACY94B,CAAAsV,MAAA,CAAe,QAAQ,EAAG,CAClCwjB,CAAA,CAAU,IACLj/B,EAAL,EAAcA,CAAAxS,MAAd,GAA8BwgE,CAA9B,EACEv0C,CAAA,CAASi0C,CAAT,CAHgC,CAA1B,CADZ,CADiD,CAWnDr8D,EAAA8J,GAAA,CAAW,SAAX,CAAmC,QAAQ,CAACuV,CAAD,CAAQ,CACjD,IAAI9jB,EAAM8jB,CAAAu9C,QAIE,GAAZ,GAAIrhE,CAAJ,EAAmB,EAAnB,CAAwBA,CAAxB,EAAqC,EAArC,CAA+BA,CAA/B,EAA6C,EAA7C,EAAmDA,CAAnD,EAAiE,EAAjE,EAA0DA,CAA1D,EAEAmhE,CAAA,CAAcr9C,CAAd,CAAqB,IAArB,CAA2B,IAAAljB,MAA3B,CAPiD,CAAnD,CAWA,IAAI6b,CAAAw1C,SAAA,CAAkB,OAAlB,CAAJ,CACExtD,CAAA8J,GAAA,CAAW,gBAAX,CAA6B4yD,CAA7B,CAxBG,CA8BP18D,CAAA8J,GAAA,CAAW,QAAX,CAAqBse,CAArB,CAMA,IAAIy0C,EAAA,CAAyB/6D,CAAzB,CAAJ,EAAsCs5D,CAAAoB,sBAAtC,EAAoE16D,CAApE,GAA6EpC,CAAAoC,KAA7E,CACE9B,CAAA8J,GAAA,CAx0C4BgzD,yBAw0C5B,CAAmD,QAAQ,CAACT,CAAD,CAAK,CAC9D,GAAKzuB,CAAAA,CAAL,CAAc,CACZ,IAAImvB,EAAW,IAAA,SAAf;AACIC,EAAeD,CAAAE,SADnB,CAEIC,EAAmBH,CAAAI,aACvBvvB,EAAA,CAAU94B,CAAAsV,MAAA,CAAe,QAAQ,EAAG,CAClCwjB,CAAA,CAAU,IACNmvB,EAAAE,SAAJ,GAA0BD,CAA1B,EAA0CD,CAAAI,aAA1C,GAAoED,CAApE,EACE90C,CAAA,CAASi0C,CAAT,CAHgC,CAA1B,CAJE,CADgD,CAAhE,CAeFjB,EAAAgC,QAAA,CAAeC,QAAQ,EAAG,CAExB,IAAIlhE,EAAQi/D,CAAAc,SAAA,CAAcd,CAAAmB,WAAd,CAAA,CAAiC,EAAjC,CAAsCnB,CAAAmB,WAC9Cv8D,EAAAqD,IAAA,EAAJ,GAAsBlH,CAAtB,EACE6D,CAAAqD,IAAA,CAAYlH,CAAZ,CAJsB,CA/G2C,CAwJvEmhE,QAASA,GAAgB,CAACjuC,CAAD,CAASkuC,CAAT,CAAkB,CACzC,MAAO,SAAQ,CAACC,CAAD,CAAMC,CAAN,CAAoB,CAAA,IAC7B33D,CAD6B,CACtBosC,CAEX,IAAIl1C,EAAA,CAAOwgE,CAAP,CAAJ,CACE,MAAOA,EAGT,IAAIziE,CAAA,CAASyiE,CAAT,CAAJ,CAAmB,CAIK,GAAtB,GAAIA,CAAA96D,OAAA,CAAW,CAAX,CAAJ,EAA4D,GAA5D,GAA6B86D,CAAA96D,OAAA,CAAW86D,CAAAviE,OAAX,CAAwB,CAAxB,CAA7B,GACEuiE,CADF,CACQA,CAAA53D,UAAA,CAAc,CAAd,CAAiB43D,CAAAviE,OAAjB,CAA8B,CAA9B,CADR,CAGA,IAAIyiE,EAAAn+D,KAAA,CAAqBi+D,CAArB,CAAJ,CACE,MAAO,KAAIvgE,IAAJ,CAASugE,CAAT,CAETnuC,EAAAxtB,UAAA,CAAmB,CAGnB,IAFAiE,CAEA,CAFQupB,CAAA9U,KAAA,CAAYijD,CAAZ,CAER,CA6BE,MA5BA13D,EAAAge,MAAA,EA4BOxf,CA1BL4tC,CA0BK5tC,CA3BHm5D,CAAJ,CACQ,CACJE,KAAMF,CAAA9G,YAAA,EADF,CAEJiH,GAAIH,CAAA5G,SAAA,EAAJ+G,CAA8B,CAF1B,CAGJC,GAAIJ,CAAA3G,QAAA,EAHA,CAIJgH,GAAIL,CAAAM,SAAA,EAJA,CAKJC,GAAIP,CAAAh5D,WAAA,EALA;AAMJw5D,GAAIR,CAAAS,WAAA,EANA,CAOJC,IAAKV,CAAAW,gBAAA,EAALD,CAAsC,GAPlC,CADR,CAWQ,CAAER,KAAM,IAAR,CAAcC,GAAI,CAAlB,CAAqBC,GAAI,CAAzB,CAA4BC,GAAI,CAAhC,CAAmCE,GAAI,CAAvC,CAA0CC,GAAI,CAA9C,CAAiDE,IAAK,CAAtD,CAgBD75D,CAbPlJ,CAAA,CAAQ0K,CAAR,CAAe,QAAQ,CAACu4D,CAAD,CAAOj+D,CAAP,CAAc,CAC/BA,CAAJ,CAAYm9D,CAAAtiE,OAAZ,GACEi3C,CAAA,CAAIqrB,CAAA,CAAQn9D,CAAR,CAAJ,CADF,CACwB,CAACi+D,CADzB,CADmC,CAArC,CAaO/5D,CAPHA,CAOGA,CAPI,IAAIrH,IAAJ,CAASi1C,CAAAyrB,KAAT,CAAmBzrB,CAAA0rB,GAAnB,CAA4B,CAA5B,CAA+B1rB,CAAA2rB,GAA/B,CAAuC3rB,CAAA4rB,GAAvC,CAA+C5rB,CAAA8rB,GAA/C,CAAuD9rB,CAAA+rB,GAAvD,EAAiE,CAAjE,CAA8E,GAA9E,CAAoE/rB,CAAAisB,IAApE,EAAsF,CAAtF,CAOJ75D,CANQ,GAMRA,CANH4tC,CAAAyrB,KAMGr5D,EAHLA,CAAAmzD,YAAA,CAAiBvlB,CAAAyrB,KAAjB,CAGKr5D,CAAAA,CA1CQ,CA8CnB,MAAOjK,IArD0B,CADM,CA0D3CikE,QAASA,GAAmB,CAACx8D,CAAD,CAAOutB,CAAP,CAAekvC,CAAf,CAA0BvG,CAA1B,CAAkC,CAC5D,MAAOwG,SAA6B,CAACv2D,CAAD,CAAQjI,CAAR,CAAiBN,CAAjB,CAAuB07D,CAAvB,CAA6BpjD,CAA7B,CAAuClD,CAAvC,CAAiDY,CAAjD,CAA0D0B,CAA1D,CAAkE,CA0EpGqnD,QAASA,EAAW,CAACtiE,CAAD,CAAQ,CAE1B,MAAOA,EAAP,EAAgB,EAAEA,CAAAoG,QAAF,EAAmBpG,CAAAoG,QAAA,EAAnB,GAAuCpG,CAAAoG,QAAA,EAAvC,CAFU,CAK5Bm8D,QAASA,EAAsB,CAACr7D,CAAD,CAAM,CACnC,MAAOpJ,EAAA,CAAUoJ,CAAV,CAAA,EAAmB,CAAArG,EAAA,CAAOqG,CAAP,CAAnB,CAAiCs7D,CAAA,CAAmCt7D,CAAnC,CAAjC,EAA4EnC,IAAAA,EAA5E,CAAwFmC,CAD5D,CAIrCs7D,QAASA,EAAkC,CAACxiE,CAAD,CAAQshE,CAAR,CAAsB,CAC/D,IAAI15D,EAAWq3D,CAAAwD,SAAAC,UAAA,CAAwB,UAAxB,CAEXC,EAAJ,EAAwBA,CAAxB,GAA6C/6D,CAA7C,GAGE05D,CAHF,CAGiBp5D,EAAA,CAAeo5D,CAAf,CAA6B35D,EAAA,CAAiBg7D,CAAjB,CAA7B,CAHjB,CAMA,KAAIC,EAAaR,CAAA,CAAUpiE,CAAV;AAAiBshE,CAAjB,CAEZ,EAAA5I,KAAA,CAAMkK,CAAN,CAAL,EAA0Bh7D,CAA1B,GACEg7D,CADF,CACer6D,EAAA,CAAuBq6D,CAAvB,CAAmCh7D,CAAnC,CADf,CAGA,OAAOg7D,EAdwD,CAlFjEC,EAAA,CAAgB/2D,CAAhB,CAAuBjI,CAAvB,CAAgCN,CAAhC,CAAsC07D,CAAtC,CAA4Ct5D,CAA5C,CACAq6D,GAAA,CAAcl0D,CAAd,CAAqBjI,CAArB,CAA8BN,CAA9B,CAAoC07D,CAApC,CAA0CpjD,CAA1C,CAAoDlD,CAApD,CAEA,KAAImqD,EAAsB,MAAtBA,GAAan9D,CAAbm9D,EAAyC,eAAzCA,GAAgCn9D,CAApC,CACI27D,CADJ,CAEIqB,CAEJ1D,EAAA8D,SAAAv+D,KAAA,CAAmB,QAAQ,CAACxE,CAAD,CAAQ,CACjC,GAAIi/D,CAAAc,SAAA,CAAc//D,CAAd,CAAJ,CAA0B,MAAO,KAEjC,IAAIkzB,CAAA9vB,KAAA,CAAYpD,CAAZ,CAAJ,CAIE,MAAOwiE,EAAA,CAAmCxiE,CAAnC,CAA0CshE,CAA1C,CAETrC,EAAA+D,aAAA,CAAoBr9D,CATa,CAAnC,CAaAs5D,EAAAa,YAAAt7D,KAAA,CAAsB,QAAQ,CAACxE,CAAD,CAAQ,CACpC,GAAIA,CAAJ,EAAc,CAAAa,EAAA,CAAOb,CAAP,CAAd,CACE,KAAMijE,GAAA,CAAc,SAAd,CAAwDjjE,CAAxD,CAAN,CAEF,GAAIsiE,CAAA,CAAYtiE,CAAZ,CAAJ,CAAwB,CACtBshE,CAAA,CAAethE,CACf,KAAI4H,EAAWq3D,CAAAwD,SAAAC,UAAA,CAAwB,UAAxB,CAEX96D,EAAJ,GACE+6D,CACA,CADmB/6D,CACnB,CAAA05D,CAAA,CAAe/4D,EAAA,CAAuB+4D,CAAvB,CAAqC15D,CAArC,CAA+C,CAAA,CAA/C,CAFjB,CAwEF,KAAIs7D,EAAerH,CAEfiH,EAAJ,EAAkBlkE,CAAA,CAASqgE,CAAAwD,SAAAC,UAAA,CAAwB,mBAAxB,CAAT,CAAlB,GACEQ,CADF,CACiBrH,CAAA/zD,QAAA,CACJ,QADI,CACMm3D,CAAAwD,SAAAC,UAAA,CAAwB,mBAAxB,CADN,CAAA56D,QAAA,CAEJ,IAFI,CAEE,EAFF,CADjB,CAMIq7D,EAAAA,CAAa5pD,CAAA,CAAQ,MAAR,CAAA,CA3EEvZ,CA2EF;AAAuBkjE,CAAvB,CA3ESt7D,CA2ET,CAEbk7D,EAAJ,EAAkB7D,CAAAwD,SAAAC,UAAA,CAAwB,sBAAxB,CAAlB,GACES,CADF,CACcA,CAAAr7D,QAAA,CAAkB,qBAAlB,CAAyC,EAAzC,CADd,CA7EE,OAiFKq7D,EA1FiB,CAYtBR,CAAA,CADArB,CACA,CADe,IAEf,OAAO,EAjB2B,CAAtC,CAqBA,IAAIxjE,CAAA,CAAUyF,CAAA20D,IAAV,CAAJ,EAA2B30D,CAAA6/D,MAA3B,CAAuC,CACrC,IAAIC,EAAS9/D,CAAA20D,IAATmL,EAAqBpoD,CAAA,CAAO1X,CAAA6/D,MAAP,CAAA,CAAmBt3D,CAAnB,CAAzB,CACIw3D,EAAef,CAAA,CAAuBc,CAAvB,CAEnBpE,EAAAsE,YAAArL,IAAA,CAAuBsL,QAAQ,CAACxjE,CAAD,CAAQ,CACrC,MAAO,CAACsiE,CAAA,CAAYtiE,CAAZ,CAAR,EAA8BwC,CAAA,CAAY8gE,CAAZ,CAA9B,EAA2DlB,CAAA,CAAUpiE,CAAV,CAA3D,EAA+EsjE,CAD1C,CAGvC//D,EAAAikC,SAAA,CAAc,KAAd,CAAqB,QAAQ,CAACtgC,CAAD,CAAM,CAC7BA,CAAJ,GAAYm8D,CAAZ,GACEC,CAEA,CAFef,CAAA,CAAuBr7D,CAAvB,CAEf,CADAm8D,CACA,CADSn8D,CACT,CAAA+3D,CAAAwE,UAAA,EAHF,CADiC,CAAnC,CAPqC,CAgBvC,GAAI3lE,CAAA,CAAUyF,CAAAg+B,IAAV,CAAJ,EAA2Bh+B,CAAAmgE,MAA3B,CAAuC,CACrC,IAAIC,EAASpgE,CAAAg+B,IAAToiC,EAAqB1oD,CAAA,CAAO1X,CAAAmgE,MAAP,CAAA,CAAmB53D,CAAnB,CAAzB,CACI83D,EAAerB,CAAA,CAAuBoB,CAAvB,CAEnB1E,EAAAsE,YAAAhiC,IAAA,CAAuBsiC,QAAQ,CAAC7jE,CAAD,CAAQ,CACrC,MAAO,CAACsiE,CAAA,CAAYtiE,CAAZ,CAAR,EAA8BwC,CAAA,CAAYohE,CAAZ,CAA9B,EAA2DxB,CAAA,CAAUpiE,CAAV,CAA3D,EAA+E4jE,CAD1C,CAGvCrgE,EAAAikC,SAAA,CAAc,KAAd,CAAqB,QAAQ,CAACtgC,CAAD,CAAM,CAC7BA,CAAJ,GAAYy8D,CAAZ,GACEC,CAEA,CAFerB,CAAA,CAAuBr7D,CAAvB,CAEf,CADAy8D,CACA,CADSz8D,CACT,CAAA+3D,CAAAwE,UAAA,EAHF,CADiC,CAAnC,CAPqC,CA1D6D,CAD1C,CAyH9DZ,QAASA,GAAe,CAAC/2D,CAAD,CAAQjI,CAAR,CAAiBN,CAAjB;AAAuB07D,CAAvB,CAA6B6E,CAA7B,CAAyC,CAG/D,CADuB7E,CAAAoB,sBACvB,CADoDxiE,CAAA,CADzCgG,CAAAR,CAAQ,CAARA,CACkDu9D,SAAT,CACpD,GACE3B,CAAA8D,SAAAv+D,KAAA,CAAmB,QAAQ,CAACxE,CAAD,CAAQ,CACjC,IAAI4gE,EAAW/8D,CAAAP,KAAA,CA36zBSygE,UA26zBT,CAAXnD,EAAoD,EACxD,IAAIA,CAAAE,SAAJ,EAAyBF,CAAAI,aAAzB,CACE/B,CAAA+D,aAAA,CAAoBc,CADtB,KAKA,OAAO9jE,EAP0B,CAAnC,CAJ6D,CAgBjEgkE,QAASA,GAAqB,CAAC/E,CAAD,CAAO,CACnCA,CAAA8D,SAAAv+D,KAAA,CAAmB,QAAQ,CAACxE,CAAD,CAAQ,CACjC,GAAIi/D,CAAAc,SAAA,CAAc//D,CAAd,CAAJ,CAA+B,MAAO,KACtC,IAAIikE,EAAA7gE,KAAA,CAAmBpD,CAAnB,CAAJ,CAA+B,MAAO47D,WAAA,CAAW57D,CAAX,CAEtCi/D,EAAA+D,aAAA,CAAoB,QAJa,CAAnC,CAQA/D,EAAAa,YAAAt7D,KAAA,CAAsB,QAAQ,CAACxE,CAAD,CAAQ,CACpC,GAAK,CAAAi/D,CAAAc,SAAA,CAAc//D,CAAd,CAAL,CAA2B,CACzB,GAAK,CAAA1B,CAAA,CAAS0B,CAAT,CAAL,CACE,KAAMijE,GAAA,CAAc,QAAd,CAAyDjjE,CAAzD,CAAN,CAEFA,CAAA,CAAQA,CAAAuC,SAAA,EAJiB,CAM3B,MAAOvC,EAP6B,CAAtC,CATmC,CAoBrCkkE,QAASA,GAAkB,CAACh9D,CAAD,CAAM,CAC3BpJ,CAAA,CAAUoJ,CAAV,CAAJ,EAAuB,CAAA5I,CAAA,CAAS4I,CAAT,CAAvB,GACEA,CADF,CACQ00D,UAAA,CAAW10D,CAAX,CADR,CAGA,OAAQe,EAAA,CAAYf,CAAZ,CAAD,CAA0BnC,IAAAA,EAA1B,CAAoBmC,CAJI,CAejCi9D,QAASA,GAAa,CAACxK,CAAD,CAAM,CAC1B,IAAIyK,EAAYzK,CAAAp3D,SAAA,EAAhB;AACI8hE,EAAqBD,CAAAlgE,QAAA,CAAkB,GAAlB,CAEzB,OAA4B,EAA5B,GAAImgE,CAAJ,CACO,EAAL,CAAS1K,CAAT,EAAsB,CAAtB,CAAgBA,CAAhB,GAEMl0D,CAFN,CAEc,UAAA2Y,KAAA,CAAgBgmD,CAAhB,CAFd,EAKW10C,MAAA,CAAOjqB,CAAA,CAAM,CAAN,CAAP,CALX,CASO,CAVT,CAaO2+D,CAAAtlE,OAbP,CAa0BulE,CAb1B,CAa+C,CAjBrB,CAoB5BC,QAASA,GAAc,CAACC,CAAD,CAAYC,CAAZ,CAAsBC,CAAtB,CAA4B,CAG7CzkE,CAAAA,CAAQ0vB,MAAA,CAAO60C,CAAP,CAEZ,KAAIG,GAAqC1kE,CAArC0kE,CA5BU,CA4BVA,IAAqC1kE,CAAzC,CACI2kE,GAAwCH,CAAxCG,CA7BU,CA6BVA,IAAwCH,CAD5C,CAEII,GAAoCH,CAApCG,CA9BU,CA8BVA,IAAoCH,CAIxC,IAAIC,CAAJ,EAAyBC,CAAzB,EAAiDC,CAAjD,CAAmE,CACjE,IAAIC,EAAgBH,CAAA,CAAoBP,EAAA,CAAcnkE,CAAd,CAApB,CAA2C,CAA/D,CACI8kE,EAAmBH,CAAA,CAAuBR,EAAA,CAAcK,CAAd,CAAvB,CAAiD,CADxE,CAEIO,EAAeH,CAAA,CAAmBT,EAAA,CAAcM,CAAd,CAAnB,CAAyC,CAF5D,CAIIO,EAAetvC,IAAA6L,IAAA,CAASsjC,CAAT,CAAwBC,CAAxB,CAA0CC,CAA1C,CAJnB,CAKIE,EAAavvC,IAAAwvC,IAAA,CAAS,EAAT,CAAaF,CAAb,CAEjBhlE,EAAA,EAAgBilE,CAChBT,EAAA,EAAsBS,CACtBR,EAAA,EAAcQ,CAEVP,EAAJ,GAAuB1kE,CAAvB,CAA+B01B,IAAAklC,MAAA,CAAW56D,CAAX,CAA/B,CACI2kE,EAAJ,GAA0BH,CAA1B,CAAqC9uC,IAAAklC,MAAA,CAAW4J,CAAX,CAArC,CACII,EAAJ,GAAsBH,CAAtB,CAA6B/uC,IAAAklC,MAAA,CAAW6J,CAAX,CAA7B,CAdiE,CAiBnE,MAAqC,EAArC,IAAQzkE,CAAR,CAAgBwkE,CAAhB,EAA4BC,CA5BqB,CAySnDU,QAASA,GAAiB,CAAClqD,CAAD,CAAS9b,CAAT,CAAkBwL,CAAlB,CAAwB+/B,CAAxB,CAAoC7iC,CAApC,CAA8C,CAEtE,GAAI/J,CAAA,CAAU4sC,CAAV,CAAJ,CAA2B,CACzB06B,CAAA,CAAUnqD,CAAA,CAAOyvB,CAAP,CACV,IAAKx5B,CAAAk0D,CAAAl0D,SAAL,CACE,KAAM+xD,GAAA,CAAc,WAAd,CACiCt4D,CADjC,CACuC+/B,CADvC,CAAN,CAGF,MAAO06B,EAAA,CAAQjmE,CAAR,CANkB,CAQ3B,MAAO0I,EAV+D,CAmqBxEw9D,QAASA,GAAc,CAAC16D,CAAD,CAAOqW,CAAP,CAAiB,CAgGtCskD,QAASA,EAAe,CAACv7B,CAAD,CAAUC,CAAV,CAAmB,CACzC,GAAKD,CAAAA,CAAL,EAAiBjrC,CAAAirC,CAAAjrC,OAAjB,CAAiC,MAAO,EACxC;GAAKkrC,CAAAA,CAAL,EAAiBlrC,CAAAkrC,CAAAlrC,OAAjB,CAAiC,MAAOirC,EAExC,KAAIrV,EAAS,EAAb,CAGS70B,EAAI,CADb,EAAA,CACA,IAAA,CAAgBA,CAAhB,CAAoBkqC,CAAAjrC,OAApB,CAAoCe,CAAA,EAApC,CAAyC,CAEvC,IADA,IAAIoqC,EAAQF,CAAA,CAAQlqC,CAAR,CAAZ,CACSa,EAAI,CAAb,CAAgBA,CAAhB,CAAoBspC,CAAAlrC,OAApB,CAAoC4B,CAAA,EAApC,CACE,GAAIupC,CAAJ,GAAcD,CAAA,CAAQtpC,CAAR,CAAd,CAA0B,SAAS,CAErCg0B,EAAAlwB,KAAA,CAAYylC,CAAZ,CALuC,CAQzC,MAAOvV,EAfkC,CAsB3C6wC,QAASA,EAAa,CAACC,CAAD,CAAa,CACjC,GAAKA,CAAAA,CAAL,CAAiB,MAAOA,EAExB,KAAIC,EAAcD,CAEd7mE,EAAA,CAAQ6mE,CAAR,CAAJ,CACEC,CADF,CACgBD,CAAAzvB,IAAA,CAAewvB,CAAf,CAAAz7D,KAAA,CAAmC,GAAnC,CADhB,CAEWjM,CAAA,CAAS2nE,CAAT,CAAJ,CACLC,CADK,CACS1mE,MAAAY,KAAA,CAAY6lE,CAAZ,CAAAn0D,OAAA,CACL,QAAQ,CAACjS,CAAD,CAAM,CAAE,MAAOomE,EAAA,CAAWpmE,CAAX,CAAT,CADT,CAAA0K,KAAA,CAEP,GAFO,CADT,CAIKlL,CAAA,CAAS4mE,CAAT,CAJL,GAKLC,CALK,CAKSD,CALT,CAKsB,EALtB,CAQP,OAAOC,EAf0B,CArHnC96D,CAAA,CAAO,SAAP,CAAmBA,CACnB,KAAI+6D,CAEJ,OAAO,CAAC,QAAD,CAAW,QAAQ,CAACzqD,CAAD,CAAS,CACjC,MAAO,CACLgX,SAAU,IADL,CAELhD,KAAMA,QAAQ,CAACnjB,CAAD,CAAQjI,CAAR,CAAiBN,CAAjB,CAAuB,CAiDnCoiE,QAASA,EAAiB,CAACC,CAAD,CAAapuB,CAAb,CAAoB,CAC5C,IAAIquB,EAAkB,EAEtB5mE,EAAA,CAAQ2mE,CAAR,CAAoB,QAAQ,CAACjvC,CAAD,CAAY,CACtC,GAAY,CAAZ,CAAI6gB,CAAJ,EAAiBsuB,CAAA,CAAYnvC,CAAZ,CAAjB,CACEmvC,CAAA,CAAYnvC,CAAZ,CACA,EAD0BmvC,CAAA,CAAYnvC,CAAZ,CAC1B,EADoD,CACpD,EADyD6gB,CACzD,CAAIsuB,CAAA,CAAYnvC,CAAZ,CAAJ,GAA+B,EAAU,CAAV,CAAE6gB,CAAF,CAA/B,EACEquB,CAAArhE,KAAA,CAAqBmyB,CAArB,CAJkC,CAAxC,CASA,OAAOkvC,EAAA/7D,KAAA,CAAqB,GAArB,CAZqC,CAe9Ci8D,QAASA,EAAuB,CAACC,CAAD,CAAY,CAI1C,GAAIA,CAAJ;AAAkBhlD,CAAlB,CAA4B,CACfilD,IAAAA,EAAAA,CAAAA,CA3CbR,EAAcE,CAAA,CAAwBF,CAAxB,EAAwBA,CAkFtB9hE,MAAA,CAAkB,GAAlB,CAlFF,CAAsC,CAAtC,CACdJ,EAAA8kC,UAAA,CAAeo9B,CAAf,CAyC4B,CAA5B,IAGgBQ,EAvChB,CAuCgBA,CAvChB,CADAR,CACA,CADcE,CAAA,CAAwBF,CAAxB,EAAwBA,CA6EtB9hE,MAAA,CAAkB,GAAlB,CA7EF,CAAuC,EAAvC,CACd,CAAAJ,CAAAglC,aAAA,CAAkBk9B,CAAlB,CA0CAS,EAAA,CAAYF,CAV8B,CA/D5C,IAAIF,EAAcjiE,CAAAoI,KAAA,CAAa,cAAb,CAAlB,CACIi6D,EAAY,CAAA,CADhB,CAEID,CAECH,EAAL,GAGEA,CACA,CADcx/D,CAAA,EACd,CAAAzC,CAAAoI,KAAA,CAAa,cAAb,CAA6B65D,CAA7B,CAJF,CAOa,UAAb,GAAIn7D,CAAJ,GACO+6D,CAOL,GANEA,CAMF,CANyBzqD,CAAA,CAAO,QAAP,CAAiBkrD,QAAkB,CAACC,CAAD,CAAS,CAEjE,MAAOA,EAAP,CAAgB,CAFiD,CAA5C,CAMzB,EAAAt6D,CAAA7I,OAAA,CAAayiE,CAAb,CAAmCK,CAAnC,CARF,CAWAj6D,EAAA7I,OAAA,CAAagY,CAAA,CAAO1X,CAAA,CAAKoH,CAAL,CAAP,CAAmB46D,CAAnB,CAAb,CAsDAc,QAA2B,CAACC,CAAD,CAAiB,CAC1C,GAAIJ,CAAJ,GAAkBllD,CAAlB,CAA4B,CA1C5B,IAAIulD,EA2CYN,CA3CZM,EA2CYN,CA6BAtiE,MAAA,CAAkB,GAAlB,CAxEhB,CACI6iE,EA0C4BF,CA1C5BE,EA0C4BF,CA6BhB3iE,MAAA,CAAkB,GAAlB,CAxEhB,CAGI8iE,EAAgBnB,CAAA,CAAgBiB,CAAhB,CAA+BC,CAA/B,CAHpB,CAIIE,EAAapB,CAAA,CAAgBkB,CAAhB,CAA+BD,CAA/B,CAJjB,CAMII,EAAiBhB,CAAA,CAAkBc,CAAlB,CAAkC,EAAlC,CANrB,CAOIG,EAAcjB,CAAA,CAAkBe,CAAlB,CAA8B,CAA9B,CAElBnjE,EAAA8kC,UAAA,CAAeu+B,CAAf,CACArjE,EAAAglC,aAAA,CAAkBo+B,CAAlB,CAgC4B,CAI5BV,CAAA,CAAiBK,CALyB,CAtD5C,CAvBmC,CAFhC,CAD0B,CAA5B,CAJ+B,CA6kCxClrC,QAASA,GAAoB,CAACngB,CAAD,CAASE,CAAT,CAAqB9B,CAArB,CAAwCiX,CAAxC,CAAuDy8B,CAAvD,CAAkE8Z,CAAlE,CAA8E,CACzG,MAAO,CACL50C,SAAU,GADL,CAELlmB,QAASA,QAAQ,CAACwmB,CAAD,CAAWhvB,CAAX,CAAiB,CAKhC,IAAIsD,EAAKoU,CAAA,CAAO1X,CAAA,CAAK+sB,CAAL,CAAP,CACT,OAAOw2C,SAAuB,CAACh7D,CAAD;AAAQjI,CAAR,CAAiB,CAC7CA,CAAA8J,GAAA,CAAWo/C,CAAX,CAAsB,QAAQ,CAAC7pC,CAAD,CAAQ,CACpC,IAAIwK,EAAWA,QAAQ,EAAG,CACxB7mB,CAAA,CAAGiF,CAAH,CAAU,CAACk9C,OAAQ9lC,CAAT,CAAV,CADwB,CAI1B,IAAK/H,CAAAm1B,QAAL,CAEO,GAAIu2B,CAAJ,CACL/6D,CAAA9I,WAAA,CAAiB0qB,CAAjB,CADK,KAGL,IAAI,CACFA,CAAA,EADE,CAEF,MAAOxiB,CAAP,CAAc,CACdmO,CAAA,CAAkBnO,CAAlB,CADc,CAPlB,IACEY,EAAAE,OAAA,CAAa0hB,CAAb,CANkC,CAAtC,CAD6C,CANf,CAF7B,CADkG,CA+zC3Gq5C,QAASA,GAAiB,CAACnlC,CAAD,CAASvoB,CAAT,CAA4B6c,CAA5B,CAAmC3D,CAAnC,CAA6CtX,CAA7C,CAAqDlD,CAArD,CAA+DwE,CAA/D,CAAyElB,CAAzE,CAA6E1B,CAA7E,CAA2F,CAEnH,IAAAqtD,YAAA,CADA,IAAA5G,WACA,CADkB1wC,MAAAxxB,IAElB,KAAA+oE,gBAAA,CAAuBliE,IAAAA,EACvB,KAAAw+D,YAAA,CAAmB,EACnB,KAAA2D,iBAAA,CAAwB,EACxB,KAAAnE,SAAA,CAAgB,EAChB,KAAAjD,YAAA,CAAmB,EACnB,KAAAqH,qBAAA,CAA4B,EAC5B,KAAAC,WAAA,CAAkB,CAAA,CAClB,KAAAC,SAAA,CAAgB,CAAA,CAChB,KAAAhJ,UAAA,CAAiB,CAAA,CACjB,KAAAF,OAAA,CAAc,CAAA,CACd,KAAAC,OAAA,CAAc,CAAA,CACd,KAAAG,SAAA,CAAgB,CAAA,CAChB,KAAAR,OAAA,CAAc,EACd,KAAAC,UAAA,CAAiB,EACjB,KAAAC,SAAA;AAAgBl5D,IAAAA,EAChB,KAAAm5D,MAAA,CAAavkD,CAAA,CAAauc,CAAAvrB,KAAb,EAA2B,EAA3B,CAA+B,CAAA,CAA/B,CAAA,CAAsCi3B,CAAtC,CACb,KAAA48B,aAAA,CAAoBC,EACpB,KAAAgE,SAAA,CAAgB6E,EAChB,KAAAC,eAAA,CAAsB,EAEtB,KAAAC,qBAAA,CAA4B,IAAAA,qBAAA7gE,KAAA,CAA+B,IAA/B,CAE5B,KAAA8gE,gBAAA,CAAuBxsD,CAAA,CAAOib,CAAA/f,QAAP,CACvB,KAAAuxD,sBAAA,CAA6B,IAAAD,gBAAA9/B,OAC7B,KAAAggC,aAAA,CAAoB,IAAAF,gBACpB,KAAAG,aAAA,CAAoB,IAAAF,sBACpB,KAAAG,kBAAA,CAAyB,IACzB,KAAAC,cAAA,CAAqB/iE,IAAAA,EACrB,KAAAi+D,aAAA,CAAoB,OAEpB,KAAA+E,yBAAA,CAAgC,CAEhC,KAAAjiC,QAAA,CAAelE,CACf,KAAAomC,YAAA,CAAmBpmC,CAAAwnB,MACnB,KAAA6e,OAAA,CAAc/xC,CACd;IAAAC,UAAA,CAAiB5D,CACjB,KAAAmsC,UAAA,CAAiB3mD,CACjB,KAAAmwD,UAAA,CAAiB3rD,CACjB,KAAAo9B,QAAA,CAAe1+B,CACf,KAAAM,IAAA,CAAWF,CACX,KAAA8sD,mBAAA,CAA0B9uD,CAE1BslD,GAAA,CAAc,IAAd,CACAyJ,GAAA,CAAkB,IAAlB,CA9CmH,CAqzBrHA,QAASA,GAAiB,CAACnJ,CAAD,CAAO,CAS/BA,CAAAn5B,QAAA7iC,OAAA,CAAoBolE,QAAqB,CAACv8D,CAAD,CAAQ,CAC3Cw8D,CAAAA,CAAarJ,CAAA0I,aAAA,CAAkB77D,CAAlB,CAKbw8D,EAAJ,GAAmBrJ,CAAA+H,YAAnB,EAGG/H,CAAA+H,YAHH,GAGwB/H,CAAA+H,YAHxB,EAG4CsB,CAH5C,GAG2DA,CAH3D,EAKErJ,CAAAsJ,gBAAA,CAAqBD,CAArB,CAGF,OAAOA,EAdwC,CAAjD,CAT+B,CA+TjCE,QAASA,GAAY,CAACr9C,CAAD,CAAU,CAC7B,IAAAs9C,UAAA,CAAiBt9C,CADY,CAijB/B6hB,QAASA,GAAQ,CAAC5sC,CAAD,CAAMQ,CAAN,CAAW,CAC1B3B,CAAA,CAAQ2B,CAAR,CAAa,QAAQ,CAACZ,CAAD,CAAQZ,CAAR,CAAa,CAC3BtB,CAAA,CAAUsC,CAAA,CAAIhB,CAAJ,CAAV,CAAL,GACEgB,CAAA,CAAIhB,CAAJ,CADF,CACaY,CADb,CADgC,CAAlC,CAD0B,CAu4F5B0oE,QAASA,GAAuB,CAACC,CAAD,CAAW3oE,CAAX,CAAkB,CAChD2oE,CAAArlE,KAAA,CAAc,UAAd,CAA0BtD,CAA1B,CAQA2oE,EAAAplE,KAAA,CAAc,UAAd,CAA0BvD,CAA1B,CATgD,CA8xClD4oE,QAASA,GAAgB,CAAC9a,CAAD,CAAQ+a,CAAR,CAAoBr+C,CAApB,CAAyB,CAChD,GAAKsjC,CAAL,CAAA,CAEIlvD,CAAA,CAASkvD,CAAT,CAAJ,GACEA,CADF,CACU,IAAI7sD,MAAJ,CAAW,GAAX,CAAiB6sD,CAAjB,CAAyB,GAAzB,CADV,CAIA,IAAK1qD,CAAA0qD,CAAA1qD,KAAL,CACE,KAAM7E,EAAA,CAAO,WAAP,CAAA,CAAoB,UAApB;AACqDsqE,CADrD,CAEJ/a,CAFI,CAEGllD,EAAA,CAAY4hB,CAAZ,CAFH,CAAN,CAKF,MAAOsjC,EAZP,CADgD,CAgBlDgb,QAASA,GAAW,CAAC5hE,CAAD,CAAM,CACpB6hE,CAAAA,CAASrnE,EAAA,CAAMwF,CAAN,CACb,OAAOe,EAAA,CAAY8gE,CAAZ,CAAA,CAAuB,EAAvB,CAA2BA,CAFV,CAz5mC1B,IAAI/qE,GAAe,CACjBD,eAAgB,CADC,CAEjBI,sBAAuB,CAAA,CAFN,CAAnB,CAsPI6qE,GAAsB,oBAtP1B,CA6PI1pE,GAAiBP,MAAA0mB,UAAAnmB,eA7PrB,CAsQIwE,EAAYA,QAAQ,CAACk3D,CAAD,CAAS,CAAC,MAAOp8D,EAAA,CAASo8D,CAAT,CAAA,CAAmBA,CAAA5tD,YAAA,EAAnB,CAA0C4tD,CAAlD,CAtQjC,CA+QI/oD,GAAYA,QAAQ,CAAC+oD,CAAD,CAAS,CAAC,MAAOp8D,EAAA,CAASo8D,CAAT,CAAA,CAAmBA,CAAA19C,YAAA,EAAnB,CAA0C09C,CAAlD,CA/QjC,CAmRIhzC,EAnRJ,CAoRInpB,CApRJ,CAqRI6O,EArRJ,CAsRInM,GAAoB,EAAAA,MAtRxB,CAuRI4C,GAAoB,EAAAA,OAvRxB,CAwRIK,GAAoB,EAAAA,KAxRxB,CAyRIjC,GAAoBxD,MAAA0mB,UAAAljB,SAzRxB,CA0RIE,GAAoB1D,MAAA0D,eA1RxB,CA2RImC,GAAoBrG,CAAA,CAAO,IAAP,CA3RxB,CA8RI6N,GAAoB1O,CAAA0O,QAApBA,GAAuC1O,CAAA0O,QAAvCA,CAAwD,EAAxDA,CA9RJ,CA+RI8F,EA/RJ,CAgSIhS,GAAoB,CAOxB8nB,GAAA,CAAOtqB,CAAAyJ,SAAA8hE,aAiQP,KAAIhhE,EAAcynB,MAAAgpC,MAAdzwD,EAA8BA,QAAoB,CAAC0xD,CAAD,CAAM,CAE1D,MAAOA,EAAP,GAAeA,CAF2C,CA2B5D13D,EAAA6lB,QAAA,CAAe,EAgCf5lB,GAAA4lB,QAAA;AAAmB,EAiOnB,KAAI3kB,GAAqB,wFAAzB,CAUI6b,EAAOA,QAAQ,CAAChf,CAAD,CAAQ,CACzB,MAAOpB,EAAA,CAASoB,CAAT,CAAA,CAAkBA,CAAAgf,KAAA,EAAlB,CAAiChf,CADf,CAV3B,CAiBImuD,GAAkBA,QAAQ,CAAC/J,CAAD,CAAI,CAChC,MAAOA,EAAAt8C,QAAA,CACI,6BADJ,CACmC,MADnC,CAAAA,QAAA,CAGI,OAHJ,CAGa,OAHb,CADyB,CAjBlC,CA8ZIkK,GAAMA,QAAQ,EAAG,CACnB,GAAK,CAAAlU,CAAA,CAAUkU,EAAAk3D,MAAV,CAAL,CAA2B,CAGzB,IAAIC,EAAgBzrE,CAAAyJ,SAAA2D,cAAA,CAA8B,UAA9B,CAAhBq+D,EACYzrE,CAAAyJ,SAAA2D,cAAA,CAA8B,eAA9B,CAEhB,IAAIq+D,CAAJ,CAAkB,CAChB,IAAIC,EAAiBD,CAAA9+D,aAAA,CAA0B,QAA1B,CAAjB++D,EACUD,CAAA9+D,aAAA,CAA0B,aAA1B,CACd2H,GAAAk3D,MAAA,CAAY,CACV7kB,aAAc,CAAC+kB,CAAf/kB,EAAgF,EAAhFA,GAAkC+kB,CAAAllE,QAAA,CAAuB,gBAAvB,CADxB,CAEVmlE,cAAe,CAACD,CAAhBC,EAAkF,EAAlFA;AAAmCD,CAAAllE,QAAA,CAAuB,iBAAvB,CAFzB,CAHI,CAAlB,IAOO,CACL8N,CAAAA,CAAAA,EAUF,IAAI,CAEF,IAAIwT,QAAJ,CAAa,EAAb,CACA,CAAA,CAAA,CAAO,CAAA,CAHL,CAIF,MAAOrc,CAAP,CAAU,CACV,CAAA,CAAO,CAAA,CADG,CAdV6I,CAAAk3D,MAAA,CAAY,CACV7kB,aAAc,CADJ,CAEVglB,cAAe,CAAA,CAFL,CADP,CAbkB,CAqB3B,MAAOr3D,GAAAk3D,MAtBY,CA9ZrB,CAueIz7D,GAAKA,QAAQ,EAAG,CAClB,GAAI3P,CAAA,CAAU2P,EAAA67D,MAAV,CAAJ,CAAyB,MAAO77D,GAAA67D,MAChC,KAAIC,CAAJ,CACI1pE,CADJ,CACOY,EAAK2J,EAAAtL,OADZ,CACmC4L,CADnC,CAC2CC,CAC3C,KAAK9K,CAAL,CAAS,CAAT,CAAYA,CAAZ,CAAgBY,CAAhB,CAAoB,EAAEZ,CAAtB,CAGE,GAFA6K,CACA6+D,CADSn/D,EAAA,CAAevK,CAAf,CACT0pE,CAAAA,CAAAA,CAAK7rE,CAAAyJ,SAAA2D,cAAA,CAA8B,GAA9B,CAAoCJ,CAAA5C,QAAA,CAAe,GAAf,CAAoB,KAApB,CAApC,CAAiE,KAAjE,CACL,CAAQ,CACN6C,CAAA,CAAO4+D,CAAAl/D,aAAA,CAAgBK,CAAhB,CAAyB,IAAzB,CACP,MAFM,CAMV,MAAQ+C,GAAA67D,MAAR,CAAmB3+D,CAbD,CAvepB,CAunBI5C,GAAa,IAvnBjB,CA6wBIqC,GAAiB,CAAC,KAAD,CAAQ,UAAR,CAAoB,KAApB,CAA2B,OAA3B,CA7wBrB,CA40BIW,GAlDJy+D,QAA2B,CAACriE,CAAD,CAAW,CACpC,IAAI0L,EAAS1L,CAAAsiE,cAEb,IAAK52D,CAAAA,CAAL,CAGE,MAAO,CAAA,CAIT,IAAM,EAAAA,CAAA,WAAkBnV,EAAAgsE,kBAAlB,EAA8C72D,CAA9C,WAAgEnV,EAAAisE,iBAAhE,CAAN,CACE,MAAO,CAAA,CAGLrzC;CAAAA,CAAazjB,CAAAyjB,WAGjB,OAFWszC,CAACtzC,CAAAuzC,aAAA,CAAwB,KAAxB,CAADD,CAAiCtzC,CAAAuzC,aAAA,CAAwB,MAAxB,CAAjCD,CAAkEtzC,CAAAuzC,aAAA,CAAwB,YAAxB,CAAlED,CAEJE,MAAA,CAAW,QAAQ,CAAClpE,CAAD,CAAM,CAC9B,GAAKA,CAAAA,CAAL,CACE,MAAO,CAAA,CAET,IAAKZ,CAAAY,CAAAZ,MAAL,CACE,MAAO,CAAA,CAGT,KAAIivB,EAAO9nB,CAAA+W,cAAA,CAAuB,GAAvB,CACX+Q,EAAApC,KAAA,CAAYjsB,CAAAZ,MAEZ,IAAImH,CAAAuF,SAAAq9D,OAAJ,GAAiC96C,CAAA86C,OAAjC,CAEE,MAAO,CAAA,CAKT,QAAQ96C,CAAA0kB,SAAR,EACE,KAAK,OAAL,CACA,KAAK,QAAL,CACA,KAAK,MAAL,CACA,KAAK,OAAL,CACA,KAAK,OAAL,CACA,KAAK,OAAL,CACE,MAAO,CAAA,CACT,SACE,MAAO,CAAA,CATX,CAlB8B,CAAzB,CAjB6B,CAkDT,CAAmBj2C,CAAAyJ,SAAnB,CA50B7B,CA6pCI8F,GAAoB,QA7pCxB,CAqqCIM,GAAkB,CAAA,CArqCtB,CAi1CIrE,GAAiB,CAj1CrB,CAq6DI4I,GAAU,CAGZk4D,KAAM,OAHM,CAIZC,MAAO,CAJK,CAKZC,MAAO,CALK,CAMZC,IAAK,CANO,CAOZC,SAAU,uBAPE,CAyRdp8D,EAAAq8D,QAAA,CAAiB,OA1gGC,KA4gGdtqD,GAAU/R,CAAAqZ,MAAVtH;AAAyB,EA5gGX,CA6gGdW,GAAO,CAKX1S,EAAAM,MAAA,CAAeg8D,QAAQ,CAACjnE,CAAD,CAAO,CAE5B,MAAO,KAAAgkB,MAAA,CAAWhkB,CAAA,CAAK,IAAAgnE,QAAL,CAAX,CAAP,EAAyC,EAFb,CAQ9B,KAAI7sD,GAAwB,WAA5B,CACI+sD,GAAiB,OADrB,CAEIhqD,GAAkB,CAAEiqD,WAAY,UAAd,CAA0BC,WAAY,WAAtC,CAFtB,CAGIxrD,GAAe1gB,CAAA,CAAO,QAAP,CAHnB,CA2BI4gB,GAAoB,+BA3BxB,CA4BInB,GAAc,WA5BlB,CA6BIG,GAAkB,YA7BtB,CA8BIM,GAAmB,0EA9BvB,CAgCIH,GAAU,CACZ,OAAU,CAAC,CAAD,CAAI,8BAAJ,CAAoC,WAApC,CADE,CAGZ,MAAS,CAAC,CAAD,CAAI,SAAJ,CAAe,UAAf,CAHG,CAIZ,IAAO,CAAC,CAAD,CAAI,mBAAJ,CAAyB,qBAAzB,CAJK,CAKZ,GAAM,CAAC,CAAD,CAAI,gBAAJ,CAAsB,kBAAtB,CALM,CAMZ,GAAM,CAAC,CAAD,CAAI,oBAAJ;AAA0B,uBAA1B,CANM,CAOZ,SAAY,CAAC,CAAD,CAAI,EAAJ,CAAQ,EAAR,CAPA,CAUdA,GAAAosD,SAAA,CAAmBpsD,EAAArL,OACnBqL,GAAAqsD,MAAA,CAAgBrsD,EAAAssD,MAAhB,CAAgCtsD,EAAAusD,SAAhC,CAAmDvsD,EAAAwsD,QAAnD,CAAqExsD,EAAAysD,MACrEzsD,GAAA0sD,GAAA,CAAa1sD,EAAA2sD,GAqFb,KAAI1mD,GAAiB7mB,CAAAwtE,KAAAzlD,UAAA0lD,SAAjB5mD,EAAgE,QAAQ,CAAC7V,CAAD,CAAM,CAEhF,MAAO,CAAG,EAAA,IAAA08D,wBAAA,CAA6B18D,CAA7B,CAAA,CAAoC,EAApC,CAFsE,CAAlF,CAqTId,GAAkBI,CAAAyX,UAAlB7X,CAAqC,CACvCy9D,MAAOhsD,EADgC,CAEvC9c,SAAUA,QAAQ,EAAG,CACnB,IAAIvC,EAAQ,EACZf,EAAA,CAAQ,IAAR,CAAc,QAAQ,CAACkK,CAAD,CAAI,CAAEnJ,CAAAwE,KAAA,CAAW,EAAX,CAAgB2E,CAAhB,CAAF,CAA1B,CACA,OAAO,GAAP,CAAanJ,CAAA8J,KAAA,CAAW,IAAX,CAAb,CAAgC,GAHb,CAFkB,CAQvCqgD,GAAIA,QAAQ,CAAClmD,CAAD,CAAQ,CAChB,MAAiB,EAAV,EAACA,CAAD,CAAepF,CAAA,CAAO,IAAA,CAAKoF,CAAL,CAAP,CAAf,CAAqCpF,CAAA,CAAO,IAAA,CAAK,IAAAC,OAAL,CAAmBmF,CAAnB,CAAP,CAD5B,CARmB,CAYvCnF,OAAQ,CAZ+B,CAavC0F,KAAMA,EAbiC,CAcvC5E,KAAM,EAAAA,KAdiC,CAevCuE,OAAQ,EAAAA,OAf+B,CArTzC,CA4UI2e,GAAe,EACnB7jB,EAAA,CAAQ,2DAAA,MAAA,CAAA,GAAA,CAAR;AAAgF,QAAQ,CAACe,CAAD,CAAQ,CAC9F8iB,EAAA,CAAahf,CAAA,CAAU9D,CAAV,CAAb,CAAA,CAAiCA,CAD6D,CAAhG,CAGA,KAAI+iB,GAAmB,EACvB9jB,EAAA,CAAQ,kDAAA,MAAA,CAAA,GAAA,CAAR,CAAuE,QAAQ,CAACe,CAAD,CAAQ,CACrF+iB,EAAA,CAAiB/iB,CAAjB,CAAA,CAA0B,CAAA,CAD2D,CAAvF,CAGA,KAAI8oC,GAAe,CACjB,YAAe,WADE,CAEjB,YAAe,WAFE,CAGjB,MAAS,KAHQ,CAIjB,MAAS,KAJQ,CAKjB,UAAa,SALI,CAMjB,OAAU,MANO,CAqBnB7pC,EAAA,CAAQ,CACNgN,KAAM0U,EADA,CAEN2qD,WAAY9qD,EAFN,CAGN+lB,QAnbFglC,QAAsB,CAACloE,CAAD,CAAO,CAC3B,IAASjE,IAAAA,CAAT,GAAgB2gB,GAAA,CAAQ1c,CAAAwc,MAAR,CAAhB,CACE,MAAO,CAAA,CAET,OAAO,CAAA,CAJoB,CAgbrB,CAIN5R,UAAWu9D,QAAwB,CAACn8D,CAAD,CAAQ,CACzC,IADyC,IAChCxP,EAAI,CAD4B,CACzBY,EAAK4O,CAAAvQ,OAArB,CAAmCe,CAAnC,CAAuCY,CAAvC,CAA2CZ,CAAA,EAA3C,CACE2gB,EAAA,CAAiBnR,CAAA,CAAMxP,CAAN,CAAjB,CACA,CAAAmgB,EAAA,CAAU3Q,CAAA,CAAMxP,CAAN,CAAV,CAHuC,CAJrC,CAAR,CAUG,QAAQ,CAACgH,CAAD,CAAK8D,CAAL,CAAW,CACpBqD,CAAA,CAAOrD,CAAP,CAAA,CAAe9D,CADK,CAVtB,CAcA5H,EAAA,CAAQ,CACNgN,KAAM0U,EADA,CAEN5S,cAAe4T,EAFT,CAIN7V,MAAOA,QAAQ,CAACjI,CAAD,CAAU,CAEvB,MAAOhF,EAAAoN,KAAA,CAAYpI,CAAZ,CAAqB,QAArB,CAAP,EAAyC8d,EAAA,CAAoB9d,CAAAie,WAApB;AAA0Cje,CAA1C,CAAmD,CAAC,eAAD,CAAkB,QAAlB,CAAnD,CAFlB,CAJnB,CASNgK,aAAcA,QAAQ,CAAChK,CAAD,CAAU,CAE9B,MAAOhF,EAAAoN,KAAA,CAAYpI,CAAZ,CAAqB,eAArB,CAAP,EAAgDhF,CAAAoN,KAAA,CAAYpI,CAAZ,CAAqB,yBAArB,CAFlB,CAT1B,CAcNiK,WAAY4T,EAdN,CAgBNpW,SAAUA,QAAQ,CAACzH,CAAD,CAAU,CAC1B,MAAO8d,GAAA,CAAoB9d,CAApB,CAA6B,WAA7B,CADmB,CAhBtB,CAoBNmlC,WAAYA,QAAQ,CAACnlC,CAAD,CAAU8G,CAAV,CAAgB,CAClC9G,CAAA4nE,gBAAA,CAAwB9gE,CAAxB,CADkC,CApB9B,CAwBN+Z,SAAU3D,EAxBJ,CA0BN2qD,IAAKA,QAAQ,CAAC7nE,CAAD,CAAU8G,CAAV,CAAgB3K,CAAhB,CAAuB,CAClC2K,CAAA,CAxgBO4S,EAAA,CAwgBgB5S,CAxgBH7C,QAAA,CAAayiE,EAAb,CAA6B,KAA7B,CAAb,CA0gBP,IAAIzsE,CAAA,CAAUkC,CAAV,CAAJ,CACE6D,CAAAmmB,MAAA,CAAcrf,CAAd,CAAA,CAAsB3K,CADxB,KAGE,OAAO6D,EAAAmmB,MAAA,CAAcrf,CAAd,CANyB,CA1B9B,CAoCNpH,KAAMA,QAAQ,CAACM,CAAD,CAAU8G,CAAV,CAAgB3K,CAAhB,CAAuB,CAEnC,IAAIiJ,EAAWpF,CAAAoF,SACf,IAAIA,CAAJ,GAAiBC,EAAjB,EA75CsByiE,CA65CtB,GAAmC1iE,CAAnC,EA35CoBuyB,CA25CpB,GAAuEvyB,CAAvE,EACGpF,CAAAwG,aADH,CAAA,CAKIuhE,IAAAA,EAAiB9nE,CAAA,CAAU6G,CAAV,CAAjBihE,CACAC,EAAgB/oD,EAAA,CAAa8oD,CAAb,CAEpB,IAAI9tE,CAAA,CAAUkC,CAAV,CAAJ,CAGgB,IAAd,GAAIA,CAAJ,EAAiC,CAAA,CAAjC,GAAuBA,CAAvB,EAA0C6rE,CAA1C,CACEhoE,CAAA4nE,gBAAA,CAAwB9gE,CAAxB,CADF,CAGE9G,CAAAsd,aAAA,CAAqBxW,CAArB;AAA2BkhE,CAAA,CAAgBD,CAAhB,CAAiC5rE,CAA5D,CANJ,KAiBE,OANA8rE,EAMO,CANDjoE,CAAAwG,aAAA,CAAqBM,CAArB,CAMC,CAJHkhE,CAIG,EAJsB,IAItB,GAJcC,CAId,GAHLA,CAGK,CAHCF,CAGD,EAAQ,IAAR,GAAAE,CAAA,CAAe/mE,IAAAA,EAAf,CAA2B+mE,CAzBpC,CAHmC,CApC/B,CAoENxoE,KAAMA,QAAQ,CAACO,CAAD,CAAU8G,CAAV,CAAgB3K,CAAhB,CAAuB,CACnC,GAAIlC,CAAA,CAAUkC,CAAV,CAAJ,CACE6D,CAAA,CAAQ8G,CAAR,CAAA,CAAgB3K,CADlB,KAGE,OAAO6D,EAAA,CAAQ8G,CAAR,CAJ0B,CApE/B,CA4ENg5B,KAAO,QAAQ,EAAG,CAIhBooC,QAASA,EAAO,CAACloE,CAAD,CAAU7D,CAAV,CAAiB,CAC/B,GAAIwC,CAAA,CAAYxC,CAAZ,CAAJ,CAAwB,CACtB,IAAIiJ,EAAWpF,CAAAoF,SACf,OA18CgByU,EA08CT,GAACzU,CAAD,EAAmCA,CAAnC,GAAgDC,EAAhD,CAAkErF,CAAAgb,YAAlE,CAAwF,EAFzE,CAIxBhb,CAAAgb,YAAA,CAAsB7e,CALS,CAHjC+rE,CAAAC,IAAA,CAAc,EACd,OAAOD,EAFS,CAAZ,EA5EA,CAyFN7kE,IAAKA,QAAQ,CAACrD,CAAD,CAAU7D,CAAV,CAAiB,CAC5B,GAAIwC,CAAA,CAAYxC,CAAZ,CAAJ,CAAwB,CACtB,GAAI6D,CAAAooE,SAAJ,EAA+C,QAA/C,GAAwBroE,EAAA,CAAUC,CAAV,CAAxB,CAAyD,CACvD,IAAI4iB,EAAS,EACbxnB,EAAA,CAAQ4E,CAAAsnB,QAAR,CAAyB,QAAQ,CAAClY,CAAD,CAAS,CACpCA,CAAAi5D,SAAJ,EACEzlD,CAAAjiB,KAAA,CAAYyO,CAAAjT,MAAZ,EAA4BiT,CAAA0wB,KAA5B,CAFsC,CAA1C,CAKA,OAAOld,EAPgD,CASzD,MAAO5iB,EAAA7D,MAVe,CAYxB6D,CAAA7D,MAAA,CAAgBA,CAbY,CAzFxB,CAyGNgJ,KAAMA,QAAQ,CAACnF,CAAD,CAAU7D,CAAV,CAAiB,CAC7B,GAAIwC,CAAA,CAAYxC,CAAZ,CAAJ,CACE,MAAO6D,EAAA2a,UAETe,GAAA,CAAa1b,CAAb,CAAsB,CAAA,CAAtB,CACAA,EAAA2a,UAAA,CAAoBxe,CALS,CAzGzB;AAiHN6I,MAAOoZ,EAjHD,CAAR,CAkHG,QAAQ,CAACpb,CAAD,CAAK8D,CAAL,CAAW,CAIpBqD,CAAAyX,UAAA,CAAiB9a,CAAjB,CAAA,CAAyB,QAAQ,CAACwhE,CAAD,CAAOC,CAAP,CAAa,CAAA,IACxCvsE,CADwC,CACrCT,CADqC,CAExCitE,EAAY,IAAAvtE,OAKhB,IAAI+H,CAAJ,GAAWob,EAAX,EACKzf,CAAA,CAA2B,CAAf,GAACqE,CAAA/H,OAAD,EAAqB+H,CAArB,GAA4Bka,EAA5B,EAA8Cla,CAA9C,GAAqD6a,EAArD,CAA0EyqD,CAA1E,CAAiFC,CAA7F,CADL,CAC0G,CACxG,GAAIvuE,CAAA,CAASsuE,CAAT,CAAJ,CAAoB,CAGlB,IAAKtsE,CAAL,CAAS,CAAT,CAAYA,CAAZ,CAAgBwsE,CAAhB,CAA2BxsE,CAAA,EAA3B,CACE,GAAIgH,CAAJ,GAAW8Z,EAAX,CAEE9Z,CAAA,CAAG,IAAA,CAAKhH,CAAL,CAAH,CAAYssE,CAAZ,CAFF,KAIE,KAAK/sE,CAAL,GAAY+sE,EAAZ,CACEtlE,CAAA,CAAG,IAAA,CAAKhH,CAAL,CAAH,CAAYT,CAAZ,CAAiB+sE,CAAA,CAAK/sE,CAAL,CAAjB,CAKN,OAAO,KAdW,CAkBdY,CAAAA,CAAQ6G,CAAAmlE,IAERrrE,EAAAA,CAAM6B,CAAA,CAAYxC,CAAZ,CAAD,CAAuB01B,IAAAwiC,IAAA,CAASmU,CAAT,CAAoB,CAApB,CAAvB,CAAgDA,CACzD,KAAS3rE,CAAT,CAAa,CAAb,CAAgBA,CAAhB,CAAoBC,CAApB,CAAwBD,CAAA,EAAxB,CAA6B,CAC3B,IAAI84B,EAAY3yB,CAAA,CAAG,IAAA,CAAKnG,CAAL,CAAH,CAAYyrE,CAAZ,CAAkBC,CAAlB,CAChBpsE,EAAA,CAAQA,CAAA,CAAQA,CAAR,CAAgBw5B,CAAhB,CAA4BA,CAFT,CAI7B,MAAOx5B,EA1B+F,CA8BxG,IAAKH,CAAL,CAAS,CAAT,CAAYA,CAAZ,CAAgBwsE,CAAhB,CAA2BxsE,CAAA,EAA3B,CACEgH,CAAA,CAAG,IAAA,CAAKhH,CAAL,CAAH,CAAYssE,CAAZ,CAAkBC,CAAlB,CAGF,OAAO,KA1CmC,CAJ1B,CAlHtB,CA8OAntE,EAAA,CAAQ,CACNqsE,WAAY9qD,EADN,CAGN7S,GAAI2+D,QAAiB,CAACzoE,CAAD,CAAU8B,CAAV,CAAgBkB,CAAhB,CAAoBoZ,CAApB,CAAiC,CACpD,GAAIniB,CAAA,CAAUmiB,CAAV,CAAJ,CAA4B,KAAMhB,GAAA,CAAa,QAAb,CAAN,CAG5B,GAAKxB,EAAA,CAAkB5Z,CAAlB,CAAL,CAAA,CAIIic,CAAAA,CAAeI,EAAA,CAAmBrc,CAAnB,CAA4B,CAAA,CAA5B,CACnB,KAAIuK,EAAS0R,CAAA1R,OAAb,CACI+R,EAASL,CAAAK,OAERA,EAAL,GACEA,CADF,CACWL,CAAAK,OADX,CACiC6C,EAAA,CAAmBnf,CAAnB,CAA4BuK,CAA5B,CADjC,CAKIm+D,EAAAA,CAA6B,CAArB,EAAA5mE,CAAAzB,QAAA,CAAa,GAAb,CAAA;AAAyByB,CAAAhC,MAAA,CAAW,GAAX,CAAzB,CAA2C,CAACgC,CAAD,CAiBvD,KAhBA,IAAI9F,EAAI0sE,CAAAztE,OAAR,CAEI0tE,EAAaA,QAAQ,CAAC7mE,CAAD,CAAOqe,CAAP,CAA8ByoD,CAA9B,CAA+C,CACtE,IAAInpD,EAAWlV,CAAA,CAAOzI,CAAP,CAEV2d,EAAL,GACEA,CAEA,CAFWlV,CAAA,CAAOzI,CAAP,CAEX,CAF0B,EAE1B,CADA2d,CAAAU,sBACA,CADiCA,CACjC,CAAa,UAAb,GAAIre,CAAJ,EAA4B8mE,CAA5B,EACE5oE,CAAA8e,iBAAA,CAAyBhd,CAAzB,CAA+Bwa,CAA/B,CAJJ,CAQAmD,EAAA9e,KAAA,CAAcqC,CAAd,CAXsE,CAcxE,CAAOhH,CAAA,EAAP,CAAA,CACE8F,CACA,CADO4mE,CAAA,CAAM1sE,CAAN,CACP,CAAI0gB,EAAA,CAAgB5a,CAAhB,CAAJ,EACE6mE,CAAA,CAAWjsD,EAAA,CAAgB5a,CAAhB,CAAX,CAAkCwe,EAAlC,CACA,CAAAqoD,CAAA,CAAW7mE,CAAX,CAAiBZ,IAAAA,EAAjB,CAA4B,CAAA,CAA5B,CAFF,EAIEynE,CAAA,CAAW7mE,CAAX,CApCJ,CAJoD,CAHhD,CAgDNkoB,IAAK7N,EAhDC,CAkDN0sD,IAAKA,QAAQ,CAAC7oE,CAAD,CAAU8B,CAAV,CAAgBkB,CAAhB,CAAoB,CAC/BhD,CAAA,CAAUhF,CAAA,CAAOgF,CAAP,CAKVA,EAAA8J,GAAA,CAAWhI,CAAX,CAAiBgnE,QAASA,EAAI,EAAG,CAC/B9oE,CAAAgqB,IAAA,CAAYloB,CAAZ,CAAkBkB,CAAlB,CACAhD,EAAAgqB,IAAA,CAAYloB,CAAZ,CAAkBgnE,CAAlB,CAF+B,CAAjC,CAIA9oE,EAAA8J,GAAA,CAAWhI,CAAX,CAAiBkB,CAAjB,CAV+B,CAlD3B,CA+DNu5B,YAAaA,QAAQ,CAACv8B,CAAD,CAAU+oE,CAAV,CAAuB,CAAA,IACtC3oE,CADsC,CAC/BnC,EAAS+B,CAAAie,WACpBvC,GAAA,CAAa1b,CAAb,CACA5E,EAAA,CAAQ,IAAI+O,CAAJ,CAAW4+D,CAAX,CAAR,CAAiC,QAAQ,CAACvpE,CAAD,CAAO,CAC1CY,CAAJ,CACEnC,CAAA+qE,aAAA,CAAoBxpE,CAApB,CAA0BY,CAAAuL,YAA1B,CADF,CAGE1N,CAAAwkC,aAAA,CAAoBjjC,CAApB,CAA0BQ,CAA1B,CAEFI,EAAA,CAAQZ,CANsC,CAAhD,CAH0C,CA/DtC,CA4ENypE,SAAUA,QAAQ,CAACjpE,CAAD,CAAU,CAC1B,IAAIipE,EAAW,EACf7tE,EAAA,CAAQ4E,CAAA8a,WAAR,CAA4B,QAAQ,CAAC9a,CAAD,CAAU,CAnrD1B6Z,CAorDlB;AAAI7Z,CAAAoF,SAAJ,EACE6jE,CAAAtoE,KAAA,CAAcX,CAAd,CAF0C,CAA9C,CAKA,OAAOipE,EAPmB,CA5EtB,CAsFNpsC,SAAUA,QAAQ,CAAC78B,CAAD,CAAU,CAC1B,MAAOA,EAAAkpE,gBAAP,EAAkClpE,CAAA8a,WAAlC,EAAwD,EAD9B,CAtFtB,CA0FN5V,OAAQA,QAAQ,CAAClF,CAAD,CAAUR,CAAV,CAAgB,CAC9B,IAAI4F,EAAWpF,CAAAoF,SACf,IAjsDoByU,CAisDpB,GAAIzU,CAAJ,EA5rD8B8Y,EA4rD9B,GAAsC9Y,CAAtC,CAAA,CAEA5F,CAAA,CAAO,IAAI2K,CAAJ,CAAW3K,CAAX,CAEP,KAASxD,IAAAA,EAAI,CAAJA,CAAOY,EAAK4C,CAAAvE,OAArB,CAAkCe,CAAlC,CAAsCY,CAAtC,CAA0CZ,CAAA,EAA1C,CAEEgE,CAAAoa,YAAA,CADY5a,CAAA0mD,CAAKlqD,CAALkqD,CACZ,CANF,CAF8B,CA1F1B,CAsGNijB,QAASA,QAAQ,CAACnpE,CAAD,CAAUR,CAAV,CAAgB,CAC/B,GA5sDoBqa,CA4sDpB,GAAI7Z,CAAAoF,SAAJ,CAA4C,CAC1C,IAAIhF,EAAQJ,CAAA+a,WACZ3f,EAAA,CAAQ,IAAI+O,CAAJ,CAAW3K,CAAX,CAAR,CAA0B,QAAQ,CAAC0mD,CAAD,CAAQ,CACxClmD,CAAAgpE,aAAA,CAAqB9iB,CAArB,CAA4B9lD,CAA5B,CADwC,CAA1C,CAF0C,CADb,CAtG3B,CA+GNoa,KAAMA,QAAQ,CAACxa,CAAD,CAAUopE,CAAV,CAAoB,CACR,IAAA,EAAApuE,CAAA,CAAOouE,CAAP,CAAA9iB,GAAA,CAAoB,CAApB,CAAA9oD,MAAA,EAAA,CAA+B,CAA/B,CAAA,CAhuBtBS,EAguBa+B,CAhuBJie,WAEThgB,EAAJ,EACEA,CAAAwkC,aAAA,CAAoBhC,CAApB,CA6tBezgC,CA7tBf,CAGFygC,EAAArmB,YAAA,CA0tBiBpa,CA1tBjB,CAytBkC,CA/G5B,CAmHNksB,OAAQ5N,EAnHF,CAqHN+qD,OAAQA,QAAQ,CAACrpE,CAAD,CAAU,CACxBse,EAAA,CAAate,CAAb,CAAsB,CAAA,CAAtB,CADwB,CArHpB,CAyHNspE,MAAOA,QAAQ,CAACtpE,CAAD,CAAUupE,CAAV,CAAsB,CAAA,IAC/BnpE,EAAQJ,CADuB,CACd/B,EAAS+B,CAAAie,WAE9B;GAAIhgB,CAAJ,CAAY,CACVsrE,CAAA,CAAa,IAAIp/D,CAAJ,CAAWo/D,CAAX,CAEb,KAHU,IAGDvtE,EAAI,CAHH,CAGMY,EAAK2sE,CAAAtuE,OAArB,CAAwCe,CAAxC,CAA4CY,CAA5C,CAAgDZ,CAAA,EAAhD,CAAqD,CACnD,IAAIwD,EAAO+pE,CAAA,CAAWvtE,CAAX,CACXiC,EAAA+qE,aAAA,CAAoBxpE,CAApB,CAA0BY,CAAAuL,YAA1B,CACAvL,EAAA,CAAQZ,CAH2C,CAH3C,CAHuB,CAzH/B,CAuINuhB,SAAUrD,EAvIJ,CAwINsD,YAAa5D,EAxIP,CA0INosD,YAAaA,QAAQ,CAACxpE,CAAD,CAAUmd,CAAV,CAAoBssD,CAApB,CAA+B,CAC9CtsD,CAAJ,EACE/hB,CAAA,CAAQ+hB,CAAArd,MAAA,CAAe,GAAf,CAAR,CAA6B,QAAQ,CAACgzB,CAAD,CAAY,CAC/C,IAAI42C,EAAiBD,CACjB9qE,EAAA,CAAY+qE,CAAZ,CAAJ,GACEA,CADF,CACmB,CAACxsD,EAAA,CAAeld,CAAf,CAAwB8yB,CAAxB,CADpB,CAGA,EAAC42C,CAAA,CAAiBhsD,EAAjB,CAAkCN,EAAnC,EAAsDpd,CAAtD,CAA+D8yB,CAA/D,CAL+C,CAAjD,CAFgD,CA1I9C,CAsJN70B,OAAQA,QAAQ,CAAC+B,CAAD,CAAU,CAExB,MAAO,CADH/B,CACG,CADM+B,CAAAie,WACN,GAxvDuBC,EAwvDvB,GAAUjgB,CAAAmH,SAAV,CAA4DnH,CAA5D,CAAqE,IAFpD,CAtJpB,CA2JN2qD,KAAMA,QAAQ,CAAC5oD,CAAD,CAAU,CACtB,MAAOA,EAAA2pE,mBADe,CA3JlB,CA+JNhqE,KAAMA,QAAQ,CAACK,CAAD,CAAUmd,CAAV,CAAoB,CAChC,MAAInd,EAAA4pE,qBAAJ,CACS5pE,CAAA4pE,qBAAA,CAA6BzsD,CAA7B,CADT,CAGS,EAJuB,CA/J5B,CAuKN3f,MAAOie,EAvKD,CAyKN9Q,eAAgBA,QAAQ,CAAC3K,CAAD,CAAUqf,CAAV,CAAiBwqD,CAAjB,CAAkC,CAAA,IAEpDC,CAFoD,CAE1BC,CAF0B,CAGpD7gB,EAAY7pC,CAAAvd,KAAZonD,EAA0B7pC,CAH0B,CAIpDpD,EAAeI,EAAA,CAAmBrc,CAAnB,CAInB,IAFIyf,CAEJ,EAHIlV,CAGJ,CAHa0R,CAGb,EAH6BA,CAAA1R,OAG7B;AAFyBA,CAAA,CAAO2+C,CAAP,CAEzB,CAEE4gB,CAmBA,CAnBa,CACXrxB,eAAgBA,QAAQ,EAAG,CAAE,IAAAj5B,iBAAA,CAAwB,CAAA,CAA1B,CADhB,CAEXF,mBAAoBA,QAAQ,EAAG,CAAE,MAAiC,CAAA,CAAjC,GAAO,IAAAE,iBAAT,CAFpB,CAGXK,yBAA0BA,QAAQ,EAAG,CAAE,IAAAF,4BAAA,CAAmC,CAAA,CAArC,CAH1B,CAIXK,8BAA+BA,QAAQ,EAAG,CAAE,MAA4C,CAAA,CAA5C,GAAO,IAAAL,4BAAT,CAJ/B,CAKXI,gBAAiB3hB,CALN,CAMX0D,KAAMonD,CANK,CAOX3oC,OAAQvgB,CAPG,CAmBb,CARIqf,CAAAvd,KAQJ,GAPEgoE,CAOF,CAPersE,CAAA,CAAOqsE,CAAP,CAAmBzqD,CAAnB,CAOf,EAHA2qD,CAGA,CAHen8D,EAAA,CAAY4R,CAAZ,CAGf,CAFAsqD,CAEA,CAFcF,CAAA,CAAkB,CAACC,CAAD,CAAAnnE,OAAA,CAAoBknE,CAApB,CAAlB,CAAyD,CAACC,CAAD,CAEvE,CAAA1uE,CAAA,CAAQ4uE,CAAR,CAAsB,QAAQ,CAAChnE,CAAD,CAAK,CAC5B8mE,CAAA9pD,8BAAA,EAAL,EACEhd,CAAAG,MAAA,CAASnD,CAAT,CAAkB+pE,CAAlB,CAF+B,CAAnC,CA7BsD,CAzKpD,CAAR,CA6MG,QAAQ,CAAC/mE,CAAD,CAAK8D,CAAL,CAAW,CAIpBqD,CAAAyX,UAAA,CAAiB9a,CAAjB,CAAA,CAAyB,QAAQ,CAACwhE,CAAD,CAAOC,CAAP,CAAa0B,CAAb,CAAmB,CAGlD,IAFA,IAAI9tE,CAAJ,CAESH,EAAI,CAFb,CAEgBY,EAAK,IAAA3B,OAArB,CAAkCe,CAAlC;AAAsCY,CAAtC,CAA0CZ,CAAA,EAA1C,CACM2C,CAAA,CAAYxC,CAAZ,CAAJ,EACEA,CACA,CADQ6G,CAAA,CAAG,IAAA,CAAKhH,CAAL,CAAH,CAAYssE,CAAZ,CAAkBC,CAAlB,CAAwB0B,CAAxB,CACR,CAAIhwE,CAAA,CAAUkC,CAAV,CAAJ,GAEEA,CAFF,CAEUnB,CAAA,CAAOmB,CAAP,CAFV,CAFF,EAOEof,EAAA,CAAepf,CAAf,CAAsB6G,CAAA,CAAG,IAAA,CAAKhH,CAAL,CAAH,CAAYssE,CAAZ,CAAkBC,CAAlB,CAAwB0B,CAAxB,CAAtB,CAGJ,OAAOhwE,EAAA,CAAUkC,CAAV,CAAA,CAAmBA,CAAnB,CAA2B,IAdgB,CAJhC,CA7MtB,CAoOAgO,EAAAyX,UAAA9e,KAAA,CAAwBqH,CAAAyX,UAAA9X,GACxBK,EAAAyX,UAAAsoD,OAAA,CAA0B//D,CAAAyX,UAAAoI,IA4D1B,KAAImgD,GAASjvE,MAAAiD,OAAA,CAAc,IAAd,CAObijB,GAAAQ,UAAA,CAAsB,CACpBwoD,KAAMA,QAAQ,CAAC7uE,CAAD,CAAM,CACdA,CAAJ,GAAY,IAAAgmB,SAAZ,GACE,IAAAA,SACA,CADgBhmB,CAChB,CAAA,IAAAimB,WAAA,CAAkB,IAAAH,MAAAhhB,QAAA,CAAmB9E,CAAnB,CAFpB,CAIA,OAAO,KAAAimB,WALW,CADA,CAQpB6oD,cAAeA,QAAQ,CAAC9uE,CAAD,CAAM,CAC3B,MAAO6I,EAAA,CAAY7I,CAAZ,CAAA,CAAmB4uE,EAAnB,CAA4B5uE,CADR,CART,CAWpB0N,IAAKA,QAAQ,CAAC1N,CAAD,CAAM,CACjBA,CAAA,CAAM,IAAA8uE,cAAA,CAAmB9uE,CAAnB,CACFu5B,EAAAA,CAAM,IAAAs1C,KAAA,CAAU7uE,CAAV,CACV,IAAa,EAAb,GAAIu5B,CAAJ,CACE,MAAO,KAAAxT,QAAA,CAAawT,CAAb,CAJQ,CAXC,CAkBpBrQ,IAAKA,QAAQ,CAAClpB,CAAD,CAAM,CACjBA,CAAA,CAAM,IAAA8uE,cAAA,CAAmB9uE,CAAnB,CAEN,OAAgB,EAAhB,GADU,IAAA6uE,KAAAt1C,CAAUv5B,CAAVu5B,CAFO,CAlBC;AAuBpBrzB,IAAKA,QAAQ,CAAClG,CAAD,CAAMY,CAAN,CAAa,CACxBZ,CAAA,CAAM,IAAA8uE,cAAA,CAAmB9uE,CAAnB,CACN,KAAIu5B,EAAM,IAAAs1C,KAAA,CAAU7uE,CAAV,CACG,GAAb,GAAIu5B,CAAJ,GACEA,CADF,CACQ,IAAAtT,WADR,CAC0B,IAAAH,MAAApmB,OAD1B,CAGA,KAAAomB,MAAA,CAAWyT,CAAX,CAAA,CAAkBv5B,CAClB,KAAA+lB,QAAA,CAAawT,CAAb,CAAA,CAAoB34B,CAPI,CAvBN,CAmCpBmuE,OAAQA,QAAQ,CAAC/uE,CAAD,CAAM,CACpBA,CAAA,CAAM,IAAA8uE,cAAA,CAAmB9uE,CAAnB,CACFu5B,EAAAA,CAAM,IAAAs1C,KAAA,CAAU7uE,CAAV,CACV,IAAa,EAAb,GAAIu5B,CAAJ,CACE,MAAO,CAAA,CAET,KAAAzT,MAAA/gB,OAAA,CAAkBw0B,CAAlB,CAAuB,CAAvB,CACA,KAAAxT,QAAAhhB,OAAA,CAAoBw0B,CAApB,CAAyB,CAAzB,CACA,KAAAvT,SAAA,CAAgBlnB,GAChB,KAAAmnB,WAAA,CAAmB,EACnB,OAAO,CAAA,CAVa,CAnCF,CAoDtB,KAAIkD,GAAQtD,EAAZ,CAEIjI,GAAgB,CAAa,QAAQ,EAAG,CAC1C,IAAAwH,KAAA,CAAY,CAAC,QAAQ,EAAG,CACtB,MAAO+D,GADe,CAAZ,CAD8B,CAAxB,CAFpB,CAuEI5C,GAAY,aAvEhB,CAwEIC,GAAU,uBAxEd,CAyEIwoD,GAAe,GAzEnB,CA0EIC,GAAS,sBA1Eb,CA2EI3oD,GAAiB,kCA3ErB,CA4EI9V,GAAkBrR,CAAA,CAAO,WAAP,CAw4BtBoN;EAAAoc,WAAA,CAl3BAM,QAAiB,CAACxhB,CAAD,CAAKmE,CAAL,CAAeL,CAAf,CAAqB,CAAA,IAChCmd,CAIJ,IAAkB,UAAlB,GAAI,MAAOjhB,EAAX,CACE,IAAM,EAAAihB,CAAA,CAAUjhB,CAAAihB,QAAV,CAAN,CAA6B,CAC3BA,CAAA,CAAU,EACV,IAAIjhB,CAAA/H,OAAJ,CAAe,CACb,GAAIkM,CAAJ,CAIE,KAHKpM,EAAA,CAAS+L,CAAT,CAGC,EAHkBA,CAGlB,GAFJA,CAEI,CAFG9D,CAAA8D,KAEH,EAFckb,EAAA,CAAOhf,CAAP,CAEd,EAAA+I,EAAA,CAAgB,UAAhB,CACyEjF,CADzE,CAAN,CAGF2jE,CAAA,CAAUhpD,EAAA,CAAYze,CAAZ,CACV5H,EAAA,CAAQqvE,CAAA,CAAQ,CAAR,CAAA3qE,MAAA,CAAiByqE,EAAjB,CAAR,CAAwC,QAAQ,CAAC1/D,CAAD,CAAM,CACpDA,CAAA5G,QAAA,CAAYumE,EAAZ,CAAoB,QAAQ,CAAChxD,CAAD,CAAMkxD,CAAN,CAAkB5jE,CAAlB,CAAwB,CAClDmd,CAAAtjB,KAAA,CAAamG,CAAb,CADkD,CAApD,CADoD,CAAtD,CATa,CAef9D,CAAAihB,QAAA,CAAaA,CAjBc,CAA7B,CADF,IAoBWnpB,EAAA,CAAQkI,CAAR,CAAJ,EACLqjD,CAEA,CAFOrjD,CAAA/H,OAEP,CAFmB,CAEnB,CADA8P,EAAA,CAAY/H,CAAA,CAAGqjD,CAAH,CAAZ,CAAsB,IAAtB,CACA,CAAApiC,CAAA,CAAUjhB,CAAAtF,MAAA,CAAS,CAAT,CAAY2oD,CAAZ,CAHL,EAKLt7C,EAAA,CAAY/H,CAAZ,CAAgB,IAAhB,CAAsB,CAAA,CAAtB,CAEF,OAAOihB,EAhC6B,CAqoCtC,KAAI0mD,GAAiBjwE,CAAA,CAAO,UAAP,CAArB,CAqDI6Z,GAAuCA,QAAQ,EAAG,CACpD,IAAAoM,KAAA,CAAYviB,CADwC,CArDtD,CA2DIqW,GAA0CA,QAAQ,EAAG,CACvD,IAAIq0C,EAAkB,IAAIpkC,EAA1B,CACIkmD,EAAqB,EAEzB,KAAAjqD,KAAA,CAAY,CAAC,iBAAD,CAAoB,YAApB,CACP,QAAQ,CAACjM,CAAD,CAAoB4C,CAApB,CAAgC,CAkC3CuzD,QAASA,EAAU,CAACziE,CAAD,CAAO0Y,CAAP,CAAgB3kB,CAAhB,CAAuB,CACxC,IAAImjD,EAAU,CAAA,CACVx+B,EAAJ,GACEA,CAEA,CAFU/lB,CAAA,CAAS+lB,CAAT,CAAA,CAAoBA,CAAAhhB,MAAA,CAAc,GAAd,CAApB;AACAhF,CAAA,CAAQgmB,CAAR,CAAA,CAAmBA,CAAnB,CAA6B,EACvC,CAAA1lB,CAAA,CAAQ0lB,CAAR,CAAiB,QAAQ,CAACgS,CAAD,CAAY,CAC/BA,CAAJ,GACEwsB,CACA,CADU,CAAA,CACV,CAAAl3C,CAAA,CAAK0qB,CAAL,CAAA,CAAkB32B,CAFpB,CADmC,CAArC,CAHF,CAUA,OAAOmjD,EAZiC,CAe1CwrB,QAASA,EAAqB,EAAG,CAC/B1vE,CAAA,CAAQwvE,CAAR,CAA4B,QAAQ,CAAC5qE,CAAD,CAAU,CAC5C,IAAIoI,EAAO0gD,CAAA7/C,IAAA,CAAoBjJ,CAApB,CACX,IAAIoI,CAAJ,CAAU,CACR,IAAI2iE,EAAW5jD,EAAA,CAAannB,CAAAN,KAAA,CAAa,OAAb,CAAb,CAAf,CACIilC,EAAQ,EADZ,CAEIE,EAAW,EACfzpC,EAAA,CAAQgN,CAAR,CAAc,QAAQ,CAAC6gC,CAAD,CAASnW,CAAT,CAAoB,CAEpCmW,CAAJ,GADepoB,CAAE,CAAAkqD,CAAA,CAASj4C,CAAT,CACjB,GACMmW,CAAJ,CACEtE,CADF,GACYA,CAAA1pC,OAAA,CAAe,GAAf,CAAqB,EADjC,EACuC63B,CADvC,CAGE+R,CAHF,GAGeA,CAAA5pC,OAAA,CAAkB,GAAlB,CAAwB,EAHvC,EAG6C63B,CAJ/C,CAFwC,CAA1C,CAWA13B,EAAA,CAAQ4E,CAAR,CAAiB,QAAQ,CAAC2mB,CAAD,CAAM,CACzBge,CAAJ,EACEjnB,EAAA,CAAeiJ,CAAf,CAAoBge,CAApB,CAEEE,EAAJ,EACEznB,EAAA,CAAkBuJ,CAAlB,CAAuBke,CAAvB,CAL2B,CAA/B,CAQAikB,EAAAwhB,OAAA,CAAuBtqE,CAAvB,CAvBQ,CAFkC,CAA9C,CA4BA4qE,EAAA3vE,OAAA,CAA4B,CA7BG,CAhDjC,MAAO,CACLw0B,QAASrxB,CADJ,CAEL0L,GAAI1L,CAFC,CAGL4rB,IAAK5rB,CAHA,CAIL4sE,IAAK5sE,CAJA,CAMLuC,KAAMA,QAAQ,CAACX,CAAD,CAAUqf,CAAV,CAAiBiI,CAAjB,CAA0B2jD,CAA1B,CAAwC,CAChDA,CAAJ,EACEA,CAAA,EAGF3jD,EAAA,CAAUA,CAAV,EAAqB,EACjBA,EAAA4jD,KAAJ,EACElrE,CAAA6nE,IAAA,CAAYvgD,CAAA4jD,KAAZ,CAEE5jD,EAAA6jD,GAAJ,EACEnrE,CAAA6nE,IAAA,CAAYvgD,CAAA6jD,GAAZ,CAGF,IAAI7jD,CAAAvG,SAAJ,EAAwBuG,CAAAtG,YAAxB,CAoEF,GAnEwCD,CAmEpC,CAnEoCuG,CAAAvG,SAmEpC,CAnEsDC,CAmEtD,CAnEsDsG,CAAAtG,YAmEtD,CALA5Y,CAKA,CALO0gD,CAAA7/C,IAAA,CA9DoBjJ,CA8DpB,CAKP,EALuC,EAKvC,CAHAorE,CAGA,CAHeP,CAAA,CAAWziE,CAAX,CAAiBijE,CAAjB,CAAsB,CAAA,CAAtB,CAGf,CAFAC,CAEA,CAFiBT,CAAA,CAAWziE,CAAX,CAAiB8jB,CAAjB,CAAyB,CAAA,CAAzB,CAEjB;AAAAk/C,CAAA,EAAgBE,CAApB,CAEExiB,CAAArnD,IAAA,CArE6BzB,CAqE7B,CAA6BoI,CAA7B,CAGA,CAFAwiE,CAAAjqE,KAAA,CAtE6BX,CAsE7B,CAEA,CAAkC,CAAlC,GAAI4qE,CAAA3vE,OAAJ,EACEqc,CAAA0rB,aAAA,CAAwB8nC,CAAxB,CAtEES,EAAAA,CAAS,IAAI72D,CAIjB62D,EAAAC,SAAA,EACA,OAAOD,EAtB6C,CANjD,CADoC,CADjC,CAJ2C,CA3DzD,CAiLIp3D,GAAmB,CAAC,UAAD,CAA0B,QAAQ,CAACxM,CAAD,CAAW,CAClE,IAAI0E,EAAW,IAAf,CACIo/D,EAAkB,IADtB,CAEIC,EAAe,IAEnB,KAAAC,uBAAA,CAA8BzwE,MAAAiD,OAAA,CAAc,IAAd,CAyC9B,KAAAsoC,SAAA,CAAgBC,QAAQ,CAAC5/B,CAAD,CAAOgF,CAAP,CAAgB,CACtC,GAAIhF,CAAJ,EAA+B,GAA/B,GAAYA,CAAApE,OAAA,CAAY,CAAZ,CAAZ,CACE,KAAMioE,GAAA,CAAe,SAAf,CAAuF7jE,CAAvF,CAAN,CAGF,IAAIvL,EAAMuL,CAANvL,CAAa,YACjB8Q,EAAAs/D,uBAAA,CAAgC7kE,CAAA0iB,OAAA,CAAY,CAAZ,CAAhC,CAAA,CAAkDjuB,CAClDoM,EAAAmE,QAAA,CAAiBvQ,CAAjB,CAAsBuQ,CAAtB,CAPsC,CA+CxC,KAAA4/D,aAAA,CAAoBE,QAAQ,CAACC,CAAD,CAAW,CACZ,CAAzB,GAAIluE,SAAA1C,OAAJ,GACEywE,CADF,CACiBlwE,CAAA,CAAWqwE,CAAX,CAAA,CAAuBA,CAAvB,CAAkC,IADnD,CAIA,OAAOH,EAL8B,CA2BvC,KAAAD,gBAAA,CAAuBK,QAAQ,CAACjlC,CAAD,CAAa,CAC1C,GAAyB,CAAzB,GAAIlpC,SAAA1C,OAAJ,GACEwwE,CADF,CACqB5kC,CAAD,WAAuBzpC,OAAvB;AAAiCypC,CAAjC,CAA8C,IADlE,GAGwBklC,8BAChBxsE,KAAA,CAAmBksE,CAAA/sE,SAAA,EAAnB,CAJR,CAMM,KADA+sE,EACM,CADY,IACZ,CAAAd,EAAA,CAAe,SAAf,CA9SWqB,YA8SX,CAAN,CAIN,MAAOP,EAXmC,CAc5C,KAAA9qD,KAAA,CAAY,CAAC,gBAAD,CAAmB,QAAQ,CAACnM,CAAD,CAAiB,CACtDy3D,QAASA,EAAS,CAACjsE,CAAD,CAAUksE,CAAV,CAAyBC,CAAzB,CAAuC,CAIvD,GAAIA,CAAJ,CAAkB,CAChB,IAAIC,CAhTyB,EAAA,CAAA,CACnC,IAASpwE,CAAT,CAAa,CAAb,CAAgBA,CAAhB,CA+SyCmwE,CA/SrBlxE,OAApB,CAAoCe,CAAA,EAApC,CAAyC,CACvC,IAAI2qB,EA8SmCwlD,CA9S7B,CAAQnwE,CAAR,CACV,IAfeqwE,CAef,GAAI1lD,CAAAvhB,SAAJ,CAAmC,CACjC,CAAA,CAAOuhB,CAAP,OAAA,CADiC,CAFI,CADN,CAAA,CAAA,IAAA,EAAA,CAiTzBylD,CAAAA,CAAJ,EAAkBA,CAAAnuD,WAAlB,EAA2CmuD,CAAAE,uBAA3C,GACEH,CADF,CACiB,IADjB,CAFgB,CAMdA,CAAJ,CACEA,CAAA7C,MAAA,CAAmBtpE,CAAnB,CADF,CAGEksE,CAAA/C,QAAA,CAAsBnpE,CAAtB,CAbqD,CAoCzD,MAAO,CAuDL8J,GAAI0K,CAAA1K,GAvDC,CAsFLkgB,IAAKxV,CAAAwV,IAtFA,CAwGLghD,IAAKx2D,CAAAw2D,IAxGA,CAuILv7C,QAASjb,CAAAib,QAvIJ,CAiNL/E,OAAQA,QAAQ,CAAC6gD,CAAD,CAAS,CACnBA,CAAA7gD,OAAJ,EACE6gD,CAAA7gD,OAAA,EAFqB,CAjNpB,CA+OL6hD,MAAOA,QAAQ,CAACvsE,CAAD,CAAU/B,CAAV,CAAkBqrE,CAAlB,CAAyBhiD,CAAzB,CAAkC,CAC/CrpB,CAAA,CAASA,CAAT,EAAmBjD,CAAA,CAAOiD,CAAP,CACnBqrE,EAAA,CAAQA,CAAR,EAAiBtuE,CAAA,CAAOsuE,CAAP,CACjBrrE,EAAA,CAASA,CAAT,EAAmBqrE,CAAArrE,OAAA,EACnBguE,EAAA,CAAUjsE,CAAV,CAAmB/B,CAAnB,CAA2BqrE,CAA3B,CACA,OAAO90D,EAAA7T,KAAA,CAAoBX,CAApB;AAA6B,OAA7B,CAAsCqnB,EAAA,CAAsBC,CAAtB,CAAtC,CALwC,CA/O5C,CA+QLklD,KAAMA,QAAQ,CAACxsE,CAAD,CAAU/B,CAAV,CAAkBqrE,CAAlB,CAAyBhiD,CAAzB,CAAkC,CAC9CrpB,CAAA,CAASA,CAAT,EAAmBjD,CAAA,CAAOiD,CAAP,CACnBqrE,EAAA,CAAQA,CAAR,EAAiBtuE,CAAA,CAAOsuE,CAAP,CACjBrrE,EAAA,CAASA,CAAT,EAAmBqrE,CAAArrE,OAAA,EACnBguE,EAAA,CAAUjsE,CAAV,CAAmB/B,CAAnB,CAA2BqrE,CAA3B,CACA,OAAO90D,EAAA7T,KAAA,CAAoBX,CAApB,CAA6B,MAA7B,CAAqCqnB,EAAA,CAAsBC,CAAtB,CAArC,CALuC,CA/Q3C,CA0SLmlD,MAAOA,QAAQ,CAACzsE,CAAD,CAAUsnB,CAAV,CAAmB,CAChC,MAAO9S,EAAA7T,KAAA,CAAoBX,CAApB,CAA6B,OAA7B,CAAsCqnB,EAAA,CAAsBC,CAAtB,CAAtC,CAAsE,QAAQ,EAAG,CACtFtnB,CAAAksB,OAAA,EADsF,CAAjF,CADyB,CA1S7B,CAuULnL,SAAUA,QAAQ,CAAC/gB,CAAD,CAAU8yB,CAAV,CAAqBxL,CAArB,CAA8B,CAC9CA,CAAA,CAAUD,EAAA,CAAsBC,CAAtB,CACVA,EAAAvG,SAAA,CAAmBmG,EAAA,CAAaI,CAAAolD,SAAb,CAA+B55C,CAA/B,CACnB,OAAOte,EAAA7T,KAAA,CAAoBX,CAApB,CAA6B,UAA7B,CAAyCsnB,CAAzC,CAHuC,CAvU3C,CAoWLtG,YAAaA,QAAQ,CAAChhB,CAAD,CAAU8yB,CAAV,CAAqBxL,CAArB,CAA8B,CACjDA,CAAA,CAAUD,EAAA,CAAsBC,CAAtB,CACVA,EAAAtG,YAAA,CAAsBkG,EAAA,CAAaI,CAAAtG,YAAb,CAAkC8R,CAAlC,CACtB,OAAOte,EAAA7T,KAAA,CAAoBX,CAApB,CAA6B,aAA7B,CAA4CsnB,CAA5C,CAH0C,CApW9C,CAmYLqlD,SAAUA,QAAQ,CAAC3sE,CAAD,CAAUqrE,CAAV,CAAen/C,CAAf,CAAuB5E,CAAvB,CAAgC,CAChDA,CAAA,CAAUD,EAAA,CAAsBC,CAAtB,CACVA,EAAAvG,SAAA,CAAmBmG,EAAA,CAAaI,CAAAvG,SAAb,CAA+BsqD,CAA/B,CACnB/jD,EAAAtG,YAAA,CAAsBkG,EAAA,CAAaI,CAAAtG,YAAb,CAAkCkL,CAAlC,CACtB,OAAO1X,EAAA7T,KAAA,CAAoBX,CAApB,CAA6B,UAA7B;AAAyCsnB,CAAzC,CAJyC,CAnY7C,CAkbLslD,QAASA,QAAQ,CAAC5sE,CAAD,CAAUkrE,CAAV,CAAgBC,CAAhB,CAAoBr4C,CAApB,CAA+BxL,CAA/B,CAAwC,CACvDA,CAAA,CAAUD,EAAA,CAAsBC,CAAtB,CACVA,EAAA4jD,KAAA,CAAe5jD,CAAA4jD,KAAA,CAAeztE,CAAA,CAAO6pB,CAAA4jD,KAAP,CAAqBA,CAArB,CAAf,CAA4CA,CAC3D5jD,EAAA6jD,GAAA,CAAe7jD,CAAA6jD,GAAA,CAAe1tE,CAAA,CAAO6pB,CAAA6jD,GAAP,CAAmBA,CAAnB,CAAf,CAA4CA,CAG3D7jD,EAAAulD,YAAA,CAAsB3lD,EAAA,CAAaI,CAAAulD,YAAb,CADV/5C,CACU,EADG,mBACH,CACtB,OAAOte,EAAA7T,KAAA,CAAoBX,CAApB,CAA6B,SAA7B,CAAwCsnB,CAAxC,CAPgD,CAlbpD,CArC+C,CAA5C,CAtIsD,CAA7C,CAjLvB,CA2xBIzS,GAAgDA,QAAQ,EAAG,CAC7D,IAAA8L,KAAA,CAAY,CAAC,OAAD,CAAU,QAAQ,CAAC7H,CAAD,CAAQ,CAGpCg0D,QAASA,EAAW,CAAC9pE,CAAD,CAAK,CACvB+pE,CAAApsE,KAAA,CAAeqC,CAAf,CACuB,EAAvB,CAAI+pE,CAAA9xE,OAAJ,EACA6d,CAAA,CAAM,QAAQ,EAAG,CACf,IAAS,IAAA9c,EAAI,CAAb,CAAgBA,CAAhB,CAAoB+wE,CAAA9xE,OAApB,CAAsCe,CAAA,EAAtC,CACE+wE,CAAA,CAAU/wE,CAAV,CAAA,EAEF+wE,EAAA,CAAY,EAJG,CAAjB,CAHuB,CAFzB,IAAIA,EAAY,EAahB,OAAO,SAAQ,EAAG,CAChB,IAAIC,EAAS,CAAA,CACbF,EAAA,CAAY,QAAQ,EAAG,CACrBE,CAAA,CAAS,CAAA,CADY,CAAvB,CAGA,OAAO,SAAQ,CAACnjD,CAAD,CAAW,CACpBmjD,CAAJ,CACEnjD,CAAA,EADF,CAGEijD,CAAA,CAAYjjD,CAAZ,CAJsB,CALV,CAdkB,CAA1B,CADiD,CA3xB/D,CA0zBIlV,GAA8CA,QAAQ,EAAG,CAC3D,IAAAgM,KAAA,CAAY,CAAC,IAAD,CAAO,UAAP,CAAmB,mBAAnB,CAAwC,oBAAxC,CAA8D,UAA9D,CACP,QAAQ,CAACnJ,CAAD;AAAOQ,CAAP,CAAmBpD,CAAnB,CAAwCU,CAAxC,CAA8DoD,CAA9D,CAAwE,CA0CnFu0D,QAASA,EAAa,CAAC9uD,CAAD,CAAO,CAC3B,IAAA+uD,QAAA,CAAa/uD,CAAb,CAEA,KAAIgvD,EAAUv4D,CAAA,EAKd,KAAAw4D,eAAA,CAAsB,EACtB,KAAAC,MAAA,CAAaC,QAAQ,CAACtqE,CAAD,CAAK,CACpBsS,CAAA,EAAJ,CALAoD,CAAA,CAMc1V,CANd,CAAa,CAAb,CAAgB,CAAA,CAAhB,CAKA,CAGEmqE,CAAA,CAAQnqE,CAAR,CAJsB,CAO1B,KAAAuqE,OAAA,CAAc,CAhBa,CApC7BN,CAAAO,MAAA,CAAsBC,QAAQ,CAACD,CAAD,CAAQ3jD,CAAR,CAAkB,CAI9C++B,QAASA,EAAI,EAAG,CACd,GAAIxoD,CAAJ,GAAcotE,CAAAvyE,OAAd,CACE4uB,CAAA,CAAS,CAAA,CAAT,CADF,KAKA2jD,EAAA,CAAMptE,CAAN,CAAA,CAAa,QAAQ,CAACyqC,CAAD,CAAW,CACb,CAAA,CAAjB,GAAIA,CAAJ,CACEhhB,CAAA,CAAS,CAAA,CAAT,CADF,EAIAzpB,CAAA,EACA,CAAAwoD,CAAA,EALA,CAD8B,CAAhC,CANc,CAHhB,IAAIxoD,EAAQ,CAEZwoD,EAAA,EAH8C,CAqBhDqkB,EAAAzzD,IAAA,CAAoBk0D,QAAQ,CAACC,CAAD,CAAU9jD,CAAV,CAAoB,CAO9C+jD,QAASA,EAAU,CAAC/iC,CAAD,CAAW,CAC5B5B,CAAA,CAASA,CAAT,EAAmB4B,CACf,GAAE8I,CAAN,GAAgBg6B,CAAA1yE,OAAhB,EACE4uB,CAAA,CAASof,CAAT,CAH0B,CAN9B,IAAI0K,EAAQ,CAAZ,CACI1K,EAAS,CAAA,CACb7tC,EAAA,CAAQuyE,CAAR,CAAiB,QAAQ,CAACpC,CAAD,CAAS,CAChCA,CAAA7+B,KAAA,CAAYkhC,CAAZ,CADgC,CAAlC,CAH8C,CAkChDX,EAAArrD,UAAA,CAA0B,CACxBsrD,QAASA,QAAQ,CAAC/uD,CAAD,CAAO,CACtB,IAAAA,KAAA,CAAYA,CAAZ,EAAoB,EADE,CADA,CAKxBuuB,KAAMA,QAAQ,CAAC1pC,CAAD,CAAK,CA9DK6qE,CA+DtB,GAAI,IAAAN,OAAJ,CACEvqE,CAAA,EADF,CAGE,IAAAoqE,eAAAzsE,KAAA,CAAyBqC,CAAzB,CAJe,CALK,CAaxBw+C,SAAUpjD,CAbc,CAexB0vE,WAAYA,QAAQ,EAAG,CACrB,GAAKzjC,CAAA,IAAAA,QAAL,CAAmB,CACjB,IAAItnC;AAAO,IACX,KAAAsnC,QAAA,CAAe7yB,CAAA,CAAG,QAAQ,CAACg0B,CAAD,CAAUT,CAAV,CAAkB,CAC1ChoC,CAAA2pC,KAAA,CAAU,QAAQ,CAACzD,CAAD,CAAS,CACV,CAAA,CAAf,GAAIA,CAAJ,CACE8B,CAAA,EADF,CAGES,CAAA,EAJuB,CAA3B,CAD0C,CAA7B,CAFE,CAYnB,MAAO,KAAAnB,QAbc,CAfC,CA+BxBtL,KAAMA,QAAQ,CAACgvC,CAAD,CAAiBC,CAAjB,CAAgC,CAC5C,MAAO,KAAAF,WAAA,EAAA/uC,KAAA,CAAuBgvC,CAAvB,CAAuCC,CAAvC,CADqC,CA/BtB,CAmCxB,QAAS1uC,QAAQ,CAACjf,CAAD,CAAU,CACzB,MAAO,KAAAytD,WAAA,EAAA,CAAkB,OAAlB,CAAA,CAA2BztD,CAA3B,CADkB,CAnCH,CAuCxB,UAAW6rB,QAAQ,CAAC7rB,CAAD,CAAU,CAC3B,MAAO,KAAAytD,WAAA,EAAA,CAAkB,SAAlB,CAAA,CAA6BztD,CAA7B,CADoB,CAvCL,CA2CxB4tD,MAAOA,QAAQ,EAAG,CACZ,IAAA9vD,KAAA8vD,MAAJ,EACE,IAAA9vD,KAAA8vD,MAAA,EAFc,CA3CM,CAiDxBC,OAAQA,QAAQ,EAAG,CACb,IAAA/vD,KAAA+vD,OAAJ,EACE,IAAA/vD,KAAA+vD,OAAA,EAFe,CAjDK,CAuDxBxV,IAAKA,QAAQ,EAAG,CACV,IAAAv6C,KAAAu6C,IAAJ,EACE,IAAAv6C,KAAAu6C,IAAA,EAEF,KAAAyV,SAAA,CAAc,CAAA,CAAd,CAJc,CAvDQ,CA8DxBzjD,OAAQA,QAAQ,EAAG,CACb,IAAAvM,KAAAuM,OAAJ,EACE,IAAAvM,KAAAuM,OAAA,EAEF,KAAAyjD,SAAA,CAAc,CAAA,CAAd,CAJiB,CA9DK;AAqExB3C,SAAUA,QAAQ,CAAC3gC,CAAD,CAAW,CAC3B,IAAI9nC,EAAO,IAjIKqrE,EAkIhB,GAAIrrE,CAAAwqE,OAAJ,GACExqE,CAAAwqE,OACA,CAnImBc,CAmInB,CAAAtrE,CAAAsqE,MAAA,CAAW,QAAQ,EAAG,CACpBtqE,CAAAorE,SAAA,CAActjC,CAAd,CADoB,CAAtB,CAFF,CAF2B,CArEL,CA+ExBsjC,SAAUA,QAAQ,CAACtjC,CAAD,CAAW,CAxILgjC,CAyItB,GAAI,IAAAN,OAAJ,GACEnyE,CAAA,CAAQ,IAAAgyE,eAAR,CAA6B,QAAQ,CAACpqE,CAAD,CAAK,CACxCA,CAAA,CAAG6nC,CAAH,CADwC,CAA1C,CAIA,CADA,IAAAuiC,eAAAnyE,OACA,CAD6B,CAC7B,CAAA,IAAAsyE,OAAA,CA9IoBM,CAyItB,CAD2B,CA/EL,CA0F1B,OAAOZ,EAvJ4E,CADzE,CAD+C,CA1zB7D,CAq+BI54D,GAA0BA,QAAQ,EAAG,CACvC,IAAAsM,KAAA,CAAY,CAAC,OAAD,CAAU,IAAV,CAAgB,iBAAhB,CAAmC,QAAQ,CAAC7H,CAAD,CAAQtB,CAAR,CAAY9C,CAAZ,CAA6B,CAElF,MAAO,SAAQ,CAAC1U,CAAD,CAAUsuE,CAAV,CAA0B,CA4BvC3gE,QAASA,EAAG,EAAG,CACbmL,CAAA,CAAM,QAAQ,EAAG,CAWbwO,CAAAvG,SAAJ,GACE/gB,CAAA+gB,SAAA,CAAiBuG,CAAAvG,SAAjB,CACA,CAAAuG,CAAAvG,SAAA,CAAmB,IAFrB,CAIIuG,EAAAtG,YAAJ,GACEhhB,CAAAghB,YAAA,CAAoBsG,CAAAtG,YAApB,CACA,CAAAsG,CAAAtG,YAAA,CAAsB,IAFxB,CAIIsG,EAAA6jD,GAAJ,GACEnrE,CAAA6nE,IAAA,CAAYvgD,CAAA6jD,GAAZ,CACA,CAAA7jD,CAAA6jD,GAAA,CAAa,IAFf,CAjBOoD,EAAL;AACEhD,CAAAC,SAAA,EAEF+C,EAAA,CAAS,CAAA,CALM,CAAjB,CAOA,OAAOhD,EARM,CAvBf,IAAIjkD,EAAUgnD,CAAVhnD,EAA4B,EAC3BA,EAAAknD,WAAL,GACElnD,CADF,CACY/mB,EAAA,CAAK+mB,CAAL,CADZ,CAOIA,EAAAmnD,cAAJ,GACEnnD,CAAA4jD,KADF,CACiB5jD,CAAA6jD,GADjB,CAC8B,IAD9B,CAII7jD,EAAA4jD,KAAJ,GACElrE,CAAA6nE,IAAA,CAAYvgD,CAAA4jD,KAAZ,CACA,CAAA5jD,CAAA4jD,KAAA,CAAe,IAFjB,CAjBuC,KAsBnCqD,CAtBmC,CAsB3BhD,EAAS,IAAI72D,CACzB,OAAO,CACLg6D,MAAO/gE,CADF,CAEL+qD,IAAK/qD,CAFA,CAvBgC,CAFyC,CAAxE,CAD2B,CAr+BzC,CAumGIqf,EAAiBtyB,CAAA,CAAO,UAAP,CAvmGrB,CA0mGIkpC,GAAuB,IAD3B+qC,QAA4B,EAAG,EAS/BlgE,GAAAwV,QAAA,CAA2B,CAAC,UAAD,CAAa,uBAAb,CAwwF3Bkf,GAAAvhB,UAAAgtD,cAAA,CAAuCC,QAAQ,EAAG,CAAE,MAAO,KAAA9rC,cAAP,GAA8Ba,EAAhC,CAGlD,KAAIzM,GAAgB,sBAApB,CACI4O,GAAuB,aAD3B,CA6GIgB,GAAoBrsC,CAAA,CAAO,aAAP,CA7GxB,CAgHI6rC,GAAY,4BAhHhB,CAwYI1wB,GAAqCA,QAAQ,EAAG,CAClD,IAAA8K,KAAA,CAAY,CAAC,WAAD,CAAc,QAAQ,CAACvL,CAAD,CAAY,CAC5C,MAAO,SAAQ,CAAC05D,CAAD,CAAU,CASnBA,CAAJ,CACO1pE,CAAA0pE,CAAA1pE,SADP;AAC2B0pE,CAD3B,WAC8C9zE,EAD9C,GAEI8zE,CAFJ,CAEcA,CAAA,CAAQ,CAAR,CAFd,EAKEA,CALF,CAKY15D,CAAA,CAAU,CAAV,CAAA05B,KAEZ,OAAOggC,EAAAC,YAAP,CAA6B,CAhBN,CADmB,CAAlC,CADsC,CAxYpD,CA+ZI1mC,GAAmB,kBA/ZvB,CAgaImB,GAAgC,CAAC,eAAgBnB,EAAhB,CAAmC,gBAApC,CAhapC,CAiaIE,GAAa,eAjajB,CAkaIC,GAAY,CACd,IAAK,IADS,CAEd,IAAK,IAFS,CAlahB,CAsaIN,GAAyB,aAta7B,CAuaIO,GAAc/tC,CAAA,CAAO,OAAP,CAvalB,CAuoEI42C,GAAqB/oC,EAAA+oC,mBAArBA,CAAkD52C,CAAA,CAAO,cAAP,CACtD42C,GAAAc,cAAA,CAAmC48B,QAAQ,CAAClvC,CAAD,CAAO,CAChD,KAAMwR,GAAA,CAAmB,UAAnB,CAGsDxR,CAHtD,CAAN,CADgD,CAOlDwR,GAAAC,OAAA,CAA4B09B,QAAQ,CAACnvC,CAAD,CAAOjc,CAAP,CAAY,CAC9C,MAAOytB,GAAA,CAAmB,QAAnB,CAA6DxR,CAA7D,CAAmEjc,CAAAnlB,SAAA,EAAnE,CADuC,CAiZhD,KAAI00C,GAAkB14C,CAAA,CAAO,WAAP,CAAtB,CA4OIqc,GAAuCA,QAAQ,EAAG,CACpD,IAAA4J,KAAA,CAAYC,QAAQ,EAAG,CAIrB0uB,QAASA,EAAc,CAAC4/B,CAAD,CAAa,CAClC,IAAIrlD,EAAWA,QAAQ,CAACzhB,CAAD,CAAO,CAC5ByhB,CAAAzhB,KAAA,CAAgBA,CAChByhB,EAAAslD,OAAA,CAAkB,CAAA,CAFU,CAI9BtlD,EAAA8B,GAAA,CAAcujD,CACd,OAAOrlD,EAN2B,CAHpC,IAAI4kB,EAAYlmC,EAAAkmC,UAAhB;AACI2gC,EAAc,EAWlB,OAAO,CAUL9/B,eAAgBA,QAAQ,CAACpnB,CAAD,CAAM,CACxBgnD,CAAAA,CAAa,GAAbA,CAAmBxwE,CAAC+vC,CAAAvgC,UAAA,EAADxP,UAAA,CAAiC,EAAjC,CACvB,KAAIkwC,EAAe,oBAAfA,CAAsCsgC,CAA1C,CACIrlD,EAAWylB,CAAA,CAAe4/B,CAAf,CACfE,EAAA,CAAYxgC,CAAZ,CAAA,CAA4BH,CAAA,CAAUygC,CAAV,CAA5B,CAAoDrlD,CACpD,OAAO+kB,EALqB,CAVzB,CA0BLG,UAAWA,QAAQ,CAACH,CAAD,CAAe,CAChC,MAAOwgC,EAAA,CAAYxgC,CAAZ,CAAAugC,OADyB,CA1B7B,CAsCL5/B,YAAaA,QAAQ,CAACX,CAAD,CAAe,CAClC,MAAOwgC,EAAA,CAAYxgC,CAAZ,CAAAxmC,KAD2B,CAtC/B,CAiDLonC,eAAgBA,QAAQ,CAACZ,CAAD,CAAe,CAErC,OAAOH,CAAA,CADQ2gC,CAAAvlD,CAAY+kB,CAAZ/kB,CACE8B,GAAV,CACP,QAAOyjD,CAAA,CAAYxgC,CAAZ,CAH8B,CAjDlC,CAbc,CAD6B,CA5OtD,CAiUIygC,GAAa,gCAjUjB,CAkUI36B,GAAgB,CAAC,KAAQ,EAAT,CAAa,MAAS,GAAtB,CAA2B,IAAO,EAAlC,CAlUpB,CAmUII,GAAkBp6C,CAAA,CAAO,WAAP,CAnUtB,CAuXIm6C,GAAqB,eAvXzB,CA0oBIy6B,GAAoB,CAMtBC,SAAS,EANa,CAYtB15B,QAAS,CAAA,CAZa,CAkBtBoD,UAAW,CAAA,CAlBW,CAwBtBhD,UAAWA,QAAQ,EAAG,CAlVtB,IAmV6Bf,IAAAA,EAAAA,IAAAA,OAAAA,CAA4BG,EAAAA,IAAAA,OAA5BH,CA3TzBE,EAASvvC,EAAA,CA2T6B,IAAAsvC,SA3T7B,CA2TgBD,CA1T3BxuB,EAAO8oD,CAAA;AAAY,GAAZ,CAAkBtpE,EAAA,CAAiBspE,CAAjB,CAAlB,CAAgD,EA0T5Bt6B,CAtVzBF,EA6BgBy6B,CA7BL3vE,MAAA,CAAW,GAAX,CAsVco1C,CArVzBl5C,EAAIg5C,CAAA/5C,OAER,CAAOe,CAAA,EAAP,CAAA,CAEEg5C,CAAA,CAASh5C,CAAT,CAAA,CAAckK,EAAA,CAAiB8uC,CAAA,CAASh5C,CAAT,CAAAiI,QAAA,CAAoB,MAApB,CAA4B,GAA5B,CAAjB,CAiVd,KAAAyrE,MAAA,CA9UK16B,CAAA/uC,KAAAkF,CAAc,GAAdA,CA8UL,EAvTaiqC,CAAA,CAAS,GAAT,CAAeA,CAAf,CAAwB,EAuTrC,EAvT2C1uB,CAwT3C,KAAA6oD,SAAA,CAAgB,IAAAr5B,eAAA,CAAoB,IAAAw5B,MAApB,CAChB,KAAA32B,uBAAA,CAA8B,CAAA,CAHV,CAxBA,CAiDtBjB,OAAQb,EAAA,CAAe,UAAf,CAjDc,CAwEtB/uB,IAAKA,QAAQ,CAACA,CAAD,CAAM,CACjB,GAAIvpB,CAAA,CAAYupB,CAAZ,CAAJ,CACE,MAAO,KAAAwnD,MAGT,KAAI9tE,EAAQytE,EAAA90D,KAAA,CAAgB2N,CAAhB,CACZ,EAAItmB,CAAA,CAAM,CAAN,CAAJ,EAAwB,EAAxB,GAAgBsmB,CAAhB,GAA4B,IAAA/c,KAAA,CAAU3F,kBAAA,CAAmB5D,CAAA,CAAM,CAAN,CAAnB,CAAV,CAC5B,EAAIA,CAAA,CAAM,CAAN,CAAJ,EAAgBA,CAAA,CAAM,CAAN,CAAhB,EAAoC,EAApC,GAA4BsmB,CAA5B,GAAwC,IAAAktB,OAAA,CAAYxzC,CAAA,CAAM,CAAN,CAAZ,EAAwB,EAAxB,CACxC,KAAA8kB,KAAA,CAAU9kB,CAAA,CAAM,CAAN,CAAV,EAAsB,EAAtB,CAEA,OAAO,KAVU,CAxEG,CAuGtBkuC,SAAUmH,EAAA,CAAe,YAAf,CAvGY,CAmItB94B,KAAM84B,EAAA,CAAe,QAAf,CAnIgB,CAuJtBxC,KAAMwC,EAAA,CAAe,QAAf,CAvJgB,CAiLtB9rC,KAAM+rC,EAAA,CAAqB,QAArB,CAA+B,QAAQ,CAAC/rC,CAAD,CAAO,CAClDA,CAAA,CAAgB,IAAT;AAAAA,CAAA,CAAgBA,CAAAzM,SAAA,EAAhB,CAAkC,EACzC,OAA0B,GAAnB,GAAAyM,CAAAzI,OAAA,CAAY,CAAZ,CAAA,CAAyByI,CAAzB,CAAgC,GAAhC,CAAsCA,CAFK,CAA9C,CAjLgB,CAmOtBiqC,OAAQA,QAAQ,CAACA,CAAD,CAASu6B,CAAT,CAAqB,CACnC,OAAQhyE,SAAA1C,OAAR,EACE,KAAK,CAAL,CACE,MAAO,KAAAk6C,SACT,MAAK,CAAL,CACE,GAAIp6C,CAAA,CAASq6C,CAAT,CAAJ,EAAwB36C,CAAA,CAAS26C,CAAT,CAAxB,CACEA,CACA,CADSA,CAAA12C,SAAA,EACT,CAAA,IAAAy2C,SAAA,CAAgB1vC,EAAA,CAAc2vC,CAAd,CAFlB,KAGO,IAAIp7C,CAAA,CAASo7C,CAAT,CAAJ,CACLA,CAMA,CANS70C,EAAA,CAAK60C,CAAL,CAAa,EAAb,CAMT,CAJAh6C,CAAA,CAAQg6C,CAAR,CAAgB,QAAQ,CAACj5C,CAAD,CAAQZ,CAAR,CAAa,CACtB,IAAb,EAAIY,CAAJ,EAAmB,OAAOi5C,CAAA,CAAO75C,CAAP,CADS,CAArC,CAIA,CAAA,IAAA45C,SAAA,CAAgBC,CAPX,KASL,MAAMN,GAAA,CAAgB,UAAhB,CAAN,CAGF,KACF,SACMn2C,CAAA,CAAYgxE,CAAZ,CAAJ,EAA8C,IAA9C,GAA+BA,CAA/B,CACE,OAAO,IAAAx6B,SAAA,CAAcC,CAAd,CADT,CAGE,IAAAD,SAAA,CAAcC,CAAd,CAHF,CAG0Bu6B,CAxB9B,CA4BA,IAAA15B,UAAA,EACA,OAAO,KA9B4B,CAnOf,CAyRtBvvB,KAAMwwB,EAAA,CAAqB,QAArB,CAA+B,QAAQ,CAACxwB,CAAD,CAAO,CAClD,MAAgB,KAAT,GAAAA,CAAA,CAAgBA,CAAAhoB,SAAA,EAAhB,CAAkC,EADS,CAA9C,CAzRgB,CAqStBuF,QAASA,QAAQ,EAAG,CAClB,IAAAg1C,UAAA,CAAiB,CAAA,CACjB,OAAO,KAFW,CArSE,CA2SxB79C;CAAA,CAAQ,CAAC47C,EAAD,CAA6BN,EAA7B,CAAkDjB,EAAlD,CAAR,CAA6E,QAAQ,CAACm6B,CAAD,CAAW,CAC9FA,CAAAhuD,UAAA,CAAqB1mB,MAAAiD,OAAA,CAAcmxE,EAAd,CAqBrBM,EAAAhuD,UAAAsH,MAAA,CAA2B2mD,QAAQ,CAAC3mD,CAAD,CAAQ,CACzC,GAAKjuB,CAAA0C,SAAA1C,OAAL,CACE,MAAO,KAAAs4C,QAGT,IAAIq8B,CAAJ,GAAiBn6B,EAAjB,EAAsCI,CAAA,IAAAA,QAAtC,CACE,KAAMf,GAAA,CAAgB,SAAhB,CAAN,CAMF,IAAAvB,QAAA,CAAe50C,CAAA,CAAYuqB,CAAZ,CAAA,CAAqB,IAArB,CAA4BA,CAC3C,KAAA6vB,uBAAA,CAA8B,CAAA,CAE9B,OAAO,KAfkC,CAtBmD,CAAhG,CAwkBA,KAAI+2B,GAAep1E,CAAA,CAAO,QAAP,CAAnB,CAEI0iD,GAAgB,EAAAj8C,YAAAygB,UAAA1kB,QAFpB,CAsCI6yE,GAAYttE,CAAA,EAChBrH,EAAA,CAAQ,+CAAA,MAAA,CAAA,GAAA,CAAR,CAAoE,QAAQ,CAACw/C,CAAD,CAAW,CAAEm1B,EAAA,CAAUn1B,CAAV,CAAA,CAAsB,CAAA,CAAxB,CAAvF,CACA,KAAIo1B,GAAS,CAAC,EAAI,IAAL,CAAW,EAAI,IAAf,CAAqB,EAAI,IAAzB,CAA+B,EAAI,IAAnC,CAAyC,EAAI,IAA7C,CAAmD,IAAK,GAAxD,CAA8D,IAAI,GAAlE,CAAb,CASI7xB,GAAQA,QAAc,CAAC72B,CAAD,CAAU,CAClC,IAAAA,QAAA,CAAeA,CADmB,CAIpC62B,GAAAv8B,UAAA,CAAkB,CAChBzgB,YAAag9C,EADG;AAGhB8xB,IAAKA,QAAQ,CAACnwC,CAAD,CAAO,CAClB,IAAAA,KAAA,CAAYA,CACZ,KAAA1/B,MAAA,CAAa,CAGb,KAFA,IAAA8vE,OAEA,CAFc,EAEd,CAAO,IAAA9vE,MAAP,CAAoB,IAAA0/B,KAAA7kC,OAApB,CAAA,CAEE,GADI01C,CACA,CADK,IAAA7Q,KAAAp9B,OAAA,CAAiB,IAAAtC,MAAjB,CACL,CAAO,GAAP,GAAAuwC,CAAA,EAAqB,GAArB,GAAcA,CAAlB,CACE,IAAAw/B,WAAA,CAAgBx/B,CAAhB,CADF,KAEO,IAAI,IAAAl2C,SAAA,CAAck2C,CAAd,CAAJ,EAAgC,GAAhC,GAAyBA,CAAzB,EAAuC,IAAAl2C,SAAA,CAAc,IAAA21E,KAAA,EAAd,CAAvC,CACL,IAAAC,WAAA,EADK,KAEA,IAAI,IAAA5vB,kBAAA,CAAuB,IAAA6vB,cAAA,EAAvB,CAAJ,CACL,IAAAC,UAAA,EADK,KAEA,IAAI,IAAAC,GAAA,CAAQ7/B,CAAR,CAAY,aAAZ,CAAJ,CACL,IAAAu/B,OAAAvvE,KAAA,CAAiB,CAACP,MAAO,IAAAA,MAAR,CAAoB0/B,KAAM6Q,CAA1B,CAAjB,CACA,CAAA,IAAAvwC,MAAA,EAFK,KAGA,IAAI,IAAAqwE,aAAA,CAAkB9/B,CAAlB,CAAJ,CACL,IAAAvwC,MAAA,EADK,KAEA,CACL,IAAIswE,EAAM//B,CAAN+/B,CAAW,IAAAN,KAAA,EAAf,CACIO,EAAMD,CAANC,CAAY,IAAAP,KAAA,CAAU,CAAV,CADhB,CAGIQ,EAAMb,EAAA,CAAUW,CAAV,CAHV,CAIIG,EAAMd,EAAA,CAAUY,CAAV,CAFAZ,GAAAe,CAAUngC,CAAVmgC,CAGV;AAAWF,CAAX,EAAkBC,CAAlB,EACMzqC,CAEJ,CAFYyqC,CAAA,CAAMF,CAAN,CAAaC,CAAA,CAAMF,CAAN,CAAY//B,CAErC,CADA,IAAAu/B,OAAAvvE,KAAA,CAAiB,CAACP,MAAO,IAAAA,MAAR,CAAoB0/B,KAAMsG,CAA1B,CAAiCwU,SAAU,CAAA,CAA3C,CAAjB,CACA,CAAA,IAAAx6C,MAAA,EAAcgmC,CAAAnrC,OAHhB,EAKE,IAAA81E,WAAA,CAAgB,4BAAhB,CAA8C,IAAA3wE,MAA9C,CAA0D,IAAAA,MAA1D,CAAuE,CAAvE,CAXG,CAeT,MAAO,KAAA8vE,OAjCW,CAHJ,CAuChBM,GAAIA,QAAQ,CAAC7/B,CAAD,CAAKqgC,CAAL,CAAY,CACtB,MAA8B,EAA9B,GAAOA,CAAA3wE,QAAA,CAAcswC,CAAd,CADe,CAvCR,CA2ChBy/B,KAAMA,QAAQ,CAACp0E,CAAD,CAAI,CACZ85D,CAAAA,CAAM95D,CAAN85D,EAAW,CACf,OAAQ,KAAA11D,MAAD,CAAc01D,CAAd,CAAoB,IAAAh2B,KAAA7kC,OAApB,CAAwC,IAAA6kC,KAAAp9B,OAAA,CAAiB,IAAAtC,MAAjB,CAA8B01D,CAA9B,CAAxC,CAA6E,CAAA,CAFpE,CA3CF,CAgDhBr7D,SAAUA,QAAQ,CAACk2C,CAAD,CAAK,CACrB,MAAQ,GAAR,EAAeA,CAAf,EAA2B,GAA3B,EAAqBA,CAArB,EAAiD,QAAjD,GAAmC,MAAOA,EADrB,CAhDP,CAoDhB8/B,aAAcA,QAAQ,CAAC9/B,CAAD,CAAK,CAEzB,MAAe,GAAf,GAAQA,CAAR,EAA6B,IAA7B,GAAsBA,CAAtB,EAA4C,IAA5C,GAAqCA,CAArC,EACe,IADf,GACQA,CADR,EAC8B,IAD9B,GACuBA,CADvB,EAC6C,QAD7C,GACsCA,CAHb,CApDX,CA0DhB8P,kBAAmBA,QAAQ,CAAC9P,CAAD,CAAK,CAC9B,MAAO,KAAArpB,QAAAm5B,kBAAA;AACH,IAAAn5B,QAAAm5B,kBAAA,CAA+B9P,CAA/B,CAAmC,IAAAsgC,YAAA,CAAiBtgC,CAAjB,CAAnC,CADG,CAEH,IAAAugC,uBAAA,CAA4BvgC,CAA5B,CAH0B,CA1DhB,CAgEhBugC,uBAAwBA,QAAQ,CAACvgC,CAAD,CAAK,CACnC,MAAQ,GAAR,EAAeA,CAAf,EAA2B,GAA3B,EAAqBA,CAArB,EACQ,GADR,EACeA,CADf,EAC2B,GAD3B,EACqBA,CADrB,EAEQ,GAFR,GAEgBA,CAFhB,EAE6B,GAF7B,GAEsBA,CAHa,CAhErB,CAsEhB+P,qBAAsBA,QAAQ,CAAC/P,CAAD,CAAK,CACjC,MAAO,KAAArpB,QAAAo5B,qBAAA,CACH,IAAAp5B,QAAAo5B,qBAAA,CAAkC/P,CAAlC,CAAsC,IAAAsgC,YAAA,CAAiBtgC,CAAjB,CAAtC,CADG,CAEH,IAAAwgC,0BAAA,CAA+BxgC,CAA/B,CAH6B,CAtEnB,CA4EhBwgC,0BAA2BA,QAAQ,CAACxgC,CAAD,CAAKygC,CAAL,CAAS,CAC1C,MAAO,KAAAF,uBAAA,CAA4BvgC,CAA5B,CAAgCygC,CAAhC,CAAP,EAA8C,IAAA32E,SAAA,CAAck2C,CAAd,CADJ,CA5E5B,CAgFhBsgC,YAAaA,QAAQ,CAACtgC,CAAD,CAAK,CACxB,MAAkB,EAAlB,GAAIA,CAAA11C,OAAJ,CAA4B01C,CAAA0gC,WAAA,CAAc,CAAd,CAA5B;CAEQ1gC,CAAA0gC,WAAA,CAAc,CAAd,CAFR,EAE4B,EAF5B,EAEkC1gC,CAAA0gC,WAAA,CAAc,CAAd,CAFlC,CAEqD,QAH7B,CAhFV,CAsFhBf,cAAeA,QAAQ,EAAG,CACxB,IAAI3/B,EAAK,IAAA7Q,KAAAp9B,OAAA,CAAiB,IAAAtC,MAAjB,CAAT,CACIgwE,EAAO,IAAAA,KAAA,EACX,IAAKA,CAAAA,CAAL,CACE,MAAOz/B,EAET,KAAI2gC,EAAM3gC,CAAA0gC,WAAA,CAAc,CAAd,CAAV,CACIE,EAAMnB,CAAAiB,WAAA,CAAgB,CAAhB,CACV,OAAW,MAAX,EAAIC,CAAJ,EAA4B,KAA5B,EAAqBA,CAArB,EAA6C,KAA7C,EAAsCC,CAAtC,EAA8D,KAA9D,EAAuDA,CAAvD,CACS5gC,CADT,CACcy/B,CADd,CAGOz/B,CAXiB,CAtFV,CAoGhB6gC,cAAeA,QAAQ,CAAC7gC,CAAD,CAAK,CAC1B,MAAe,GAAf,GAAQA,CAAR,EAA6B,GAA7B,GAAsBA,CAAtB,EAAoC,IAAAl2C,SAAA,CAAck2C,CAAd,CADV,CApGZ,CAwGhBogC,WAAYA,QAAQ,CAAC1pE,CAAD,CAAQqnE,CAAR,CAAehW,CAAf,CAAoB,CACtCA,CAAA,CAAMA,CAAN,EAAa,IAAAt4D,MACTqxE,EAAAA,CAAUx3E,CAAA,CAAUy0E,CAAV,CAAA,CACJ,IADI,CACGA,CADH,CACY,GADZ,CACkB,IAAAtuE,MADlB,CAC+B,IAD/B,CACsC,IAAA0/B,KAAAl6B,UAAA,CAAoB8oE,CAApB,CAA2BhW,CAA3B,CADtC,CACwE,GADxE,CAEJ,GAFI,CAEEA,CAChB,MAAMoX,GAAA,CAAa,QAAb,CACFzoE,CADE,CACKoqE,CADL,CACa,IAAA3xC,KADb,CAAN,CALsC,CAxGxB,CAiHhBuwC,WAAYA,QAAQ,EAAG,CAGrB,IAFA,IAAI5c,EAAS,EAAb,CACIib,EAAQ,IAAAtuE,MACZ,CAAO,IAAAA,MAAP;AAAoB,IAAA0/B,KAAA7kC,OAApB,CAAA,CAAsC,CACpC,IAAI01C,EAAK1wC,CAAA,CAAU,IAAA6/B,KAAAp9B,OAAA,CAAiB,IAAAtC,MAAjB,CAAV,CACT,IAAW,GAAX,GAAIuwC,CAAJ,EAAkB,IAAAl2C,SAAA,CAAck2C,CAAd,CAAlB,CACE8iB,CAAA,EAAU9iB,CADZ,KAEO,CACL,IAAI+gC,EAAS,IAAAtB,KAAA,EACb,IAAW,GAAX,GAAIz/B,CAAJ,EAAkB,IAAA6gC,cAAA,CAAmBE,CAAnB,CAAlB,CACEje,CAAA,EAAU9iB,CADZ,KAEO,IAAI,IAAA6gC,cAAA,CAAmB7gC,CAAnB,CAAJ,EACH+gC,CADG,EACO,IAAAj3E,SAAA,CAAci3E,CAAd,CADP,EAEkC,GAFlC,GAEHje,CAAA/wD,OAAA,CAAc+wD,CAAAx4D,OAAd,CAA8B,CAA9B,CAFG,CAGLw4D,CAAA,EAAU9iB,CAHL,KAIA,IAAI,CAAA,IAAA6gC,cAAA,CAAmB7gC,CAAnB,CAAJ,EACD+gC,CADC,EACU,IAAAj3E,SAAA,CAAci3E,CAAd,CADV,EAEkC,GAFlC,GAEHje,CAAA/wD,OAAA,CAAc+wD,CAAAx4D,OAAd,CAA8B,CAA9B,CAFG,CAKL,KALK,KAGL,KAAA81E,WAAA,CAAgB,kBAAhB,CAXG,CAgBP,IAAA3wE,MAAA,EApBoC,CAsBtC,IAAA8vE,OAAAvvE,KAAA,CAAiB,CACfP,MAAOsuE,CADQ,CAEf5uC,KAAM2zB,CAFS,CAGfpmD,SAAU,CAAA,CAHK,CAIflR,MAAO0vB,MAAA,CAAO4nC,CAAP,CAJQ,CAAjB,CAzBqB,CAjHP,CAkJhB8c,UAAWA,QAAQ,EAAG,CACpB,IAAI7B,EAAQ,IAAAtuE,MAEZ,KADA,IAAAA,MACA,EADc,IAAAkwE,cAAA,EAAAr1E,OACd,CAAO,IAAAmF,MAAP;AAAoB,IAAA0/B,KAAA7kC,OAApB,CAAA,CAAsC,CACpC,IAAI01C,EAAK,IAAA2/B,cAAA,EACT,IAAK,CAAA,IAAA5vB,qBAAA,CAA0B/P,CAA1B,CAAL,CACE,KAEF,KAAAvwC,MAAA,EAAcuwC,CAAA11C,OALsB,CAOtC,IAAAi1E,OAAAvvE,KAAA,CAAiB,CACfP,MAAOsuE,CADQ,CAEf5uC,KAAM,IAAAA,KAAApiC,MAAA,CAAgBgxE,CAAhB,CAAuB,IAAAtuE,MAAvB,CAFS,CAGfwmC,WAAY,CAAA,CAHG,CAAjB,CAVoB,CAlJN,CAmKhBupC,WAAYA,QAAQ,CAACwB,CAAD,CAAQ,CAC1B,IAAIjD,EAAQ,IAAAtuE,MACZ,KAAAA,MAAA,EAIA,KAHA,IAAI+2D,EAAS,EAAb,CACIya,EAAYD,CADhB,CAEIjhC,EAAS,CAAA,CACb,CAAO,IAAAtwC,MAAP,CAAoB,IAAA0/B,KAAA7kC,OAApB,CAAA,CAAsC,CACpC,IAAI01C,EAAK,IAAA7Q,KAAAp9B,OAAA,CAAiB,IAAAtC,MAAjB,CAAT,CACAwxE,EAAAA,CAAAA,CAAajhC,CACb,IAAID,CAAJ,CACa,GAAX,GAAIC,CAAJ,EACMkhC,CAKJ,CALU,IAAA/xC,KAAAl6B,UAAA,CAAoB,IAAAxF,MAApB,CAAiC,CAAjC,CAAoC,IAAAA,MAApC,CAAiD,CAAjD,CAKV,CAJKyxE,CAAAjwE,MAAA,CAAU,aAAV,CAIL,EAHE,IAAAmvE,WAAA,CAAgB,6BAAhB,CAAgDc,CAAhD,CAAsD,GAAtD,CAGF,CADA,IAAAzxE,MACA,EADc,CACd,CAAA+2D,CAAA,EAAU2a,MAAAC,aAAA,CAAoBh0E,QAAA,CAAS8zE,CAAT;AAAc,EAAd,CAApB,CANZ,EASE1a,CATF,EAQY6Y,EAAAgC,CAAOrhC,CAAPqhC,CARZ,EAS4BrhC,CAE5B,CAAAD,CAAA,CAAS,CAAA,CAZX,KAaO,IAAW,IAAX,GAAIC,CAAJ,CACLD,CAAA,CAAS,CAAA,CADJ,KAEA,CAAA,GAAIC,CAAJ,GAAWghC,CAAX,CAAkB,CACvB,IAAAvxE,MAAA,EACA,KAAA8vE,OAAAvvE,KAAA,CAAiB,CACfP,MAAOsuE,CADQ,CAEf5uC,KAAM8xC,CAFS,CAGfvkE,SAAU,CAAA,CAHK,CAIflR,MAAOg7D,CAJQ,CAAjB,CAMA,OARuB,CAUvBA,CAAA,EAAUxmB,CAVL,CAYP,IAAAvwC,MAAA,EA9BoC,CAgCtC,IAAA2wE,WAAA,CAAgB,oBAAhB,CAAsCrC,CAAtC,CAtC0B,CAnKZ,CA6MlB,KAAIp0B,EAAMA,QAAY,CAAC2C,CAAD,CAAQ31B,CAAR,CAAiB,CACrC,IAAA21B,MAAA,CAAaA,CACb,KAAA31B,QAAA,CAAeA,CAFsB,CAKvCgzB,EAAAc,QAAA,CAAc,SACdd,EAAA23B,oBAAA,CAA0B,qBAC1B33B,EAAA6B,qBAAA,CAA2B,sBAC3B7B,EAAAsB,sBAAA,CAA4B,uBAC5BtB,EAAAqB,kBAAA,CAAwB,mBACxBrB,EAAAK,iBAAA,CAAuB,kBACvBL,EAAAG,gBAAA,CAAsB,iBACtBH;CAAAO,eAAA,CAAqB,gBACrBP,EAAAC,iBAAA,CAAuB,kBACvBD,EAAAyB,WAAA,CAAiB,YACjBzB,EAAAgB,QAAA,CAAc,SACdhB,EAAA8B,gBAAA,CAAsB,iBACtB9B,EAAA43B,SAAA,CAAe,UACf53B,EAAA+B,iBAAA,CAAuB,kBACvB/B,EAAAiC,eAAA,CAAqB,gBACrBjC,EAAAkC,iBAAA,CAAuB,kBAGvBlC,EAAAuC,iBAAA,CAAuB,kBAEvBvC,EAAA14B,UAAA,CAAgB,CACdo5B,IAAKA,QAAQ,CAAClb,CAAD,CAAO,CAClB,IAAAA,KAAA,CAAYA,CACZ,KAAAowC,OAAA,CAAc,IAAAjzB,MAAAgzB,IAAA,CAAenwC,CAAf,CAEV3jC,EAAAA,CAAQ,IAAAg2E,QAAA,EAEe,EAA3B,GAAI,IAAAjC,OAAAj1E,OAAJ,EACE,IAAA81E,WAAA,CAAgB,wBAAhB,CAA0C,IAAAb,OAAA,CAAY,CAAZ,CAA1C,CAGF,OAAO/zE,EAVW,CADN;AAcdg2E,QAASA,QAAQ,EAAG,CAElB,IADA,IAAIrjC,EAAO,EACX,CAAA,CAAA,CAGE,GAFyB,CAEpB,CAFD,IAAAohC,OAAAj1E,OAEC,EAF0B,CAAA,IAAAm1E,KAAA,CAAU,GAAV,CAAe,GAAf,CAAoB,GAApB,CAAyB,GAAzB,CAE1B,EADHthC,CAAAnuC,KAAA,CAAU,IAAAyxE,oBAAA,EAAV,CACG,CAAA,CAAA,IAAAC,OAAA,CAAY,GAAZ,CAAL,CACE,MAAO,CAAEvwE,KAAMw4C,CAAAc,QAAR,CAAqBtM,KAAMA,CAA3B,CANO,CAdN,CAyBdsjC,oBAAqBA,QAAQ,EAAG,CAC9B,MAAO,CAAEtwE,KAAMw4C,CAAA23B,oBAAR,CAAiCprC,WAAY,IAAAyrC,YAAA,EAA7C,CADuB,CAzBlB,CA6BdA,YAAaA,QAAQ,EAAG,CAEtB,IADA,IAAI72B,EAAO,IAAA5U,WAAA,EACX,CAAO,IAAAwrC,OAAA,CAAY,GAAZ,CAAP,CAAA,CACE52B,CAAA,CAAO,IAAAjuC,OAAA,CAAYiuC,CAAZ,CAET,OAAOA,EALe,CA7BV,CAqCd5U,WAAYA,QAAQ,EAAG,CACrB,MAAO,KAAA0rC,WAAA,EADc,CArCT,CAyCdA,WAAYA,QAAQ,EAAG,CACrB,IAAI3vD,EAAS,IAAA4vD,QAAA,EACb,IAAI,IAAAH,OAAA,CAAY,GAAZ,CAAJ,CAAsB,CACpB,GAAK,CAAA11B,EAAA,CAAa/5B,CAAb,CAAL,CACE,KAAMktD,GAAA,CAAa,MAAb,CAAN;AAGFltD,CAAA,CAAS,CAAE9gB,KAAMw4C,CAAA6B,qBAAR,CAAkCV,KAAM74B,CAAxC,CAAgD84B,MAAO,IAAA62B,WAAA,EAAvD,CAA0E33B,SAAU,GAApF,CALW,CAOtB,MAAOh4B,EATc,CAzCT,CAqDd4vD,QAASA,QAAQ,EAAG,CAClB,IAAIjzE,EAAO,IAAAkzE,UAAA,EAAX,CACI52B,CADJ,CAEIC,CACJ,OAAI,KAAAu2B,OAAA,CAAY,GAAZ,CAAJ,GACEx2B,CACI,CADQ,IAAAhV,WAAA,EACR,CAAA,IAAA6rC,QAAA,CAAa,GAAb,CAFN,GAGI52B,CACO,CADM,IAAAjV,WAAA,EACN,CAAA,CAAE/kC,KAAMw4C,CAAAsB,sBAAR,CAAmCr8C,KAAMA,CAAzC,CAA+Cs8C,UAAWA,CAA1D,CAAqEC,WAAYA,CAAjF,CAJX,EAOOv8C,CAXW,CArDN,CAmEdkzE,UAAWA,QAAQ,EAAG,CAEpB,IADA,IAAIh3B,EAAO,IAAAk3B,WAAA,EACX,CAAO,IAAAN,OAAA,CAAY,IAAZ,CAAP,CAAA,CACE52B,CAAA,CAAO,CAAE35C,KAAMw4C,CAAAqB,kBAAR,CAA+Bf,SAAU,IAAzC,CAA+Ca,KAAMA,CAArD,CAA2DC,MAAO,IAAAi3B,WAAA,EAAlE,CAET,OAAOl3B,EALa,CAnER,CA2Edk3B,WAAYA,QAAQ,EAAG,CAErB,IADA,IAAIl3B,EAAO,IAAAm3B,SAAA,EACX,CAAO,IAAAP,OAAA,CAAY,IAAZ,CAAP,CAAA,CACE52B,CAAA;AAAO,CAAE35C,KAAMw4C,CAAAqB,kBAAR,CAA+Bf,SAAU,IAAzC,CAA+Ca,KAAMA,CAArD,CAA2DC,MAAO,IAAAk3B,SAAA,EAAlE,CAET,OAAOn3B,EALc,CA3ET,CAmFdm3B,SAAUA,QAAQ,EAAG,CAGnB,IAFA,IAAIn3B,EAAO,IAAAo3B,WAAA,EAAX,CACIzsC,CACJ,CAAQA,CAAR,CAAgB,IAAAisC,OAAA,CAAY,IAAZ,CAAiB,IAAjB,CAAsB,KAAtB,CAA4B,KAA5B,CAAhB,CAAA,CACE52B,CAAA,CAAO,CAAE35C,KAAMw4C,CAAAK,iBAAR,CAA8BC,SAAUxU,CAAAtG,KAAxC,CAAoD2b,KAAMA,CAA1D,CAAgEC,MAAO,IAAAm3B,WAAA,EAAvE,CAET,OAAOp3B,EANY,CAnFP,CA4Fdo3B,WAAYA,QAAQ,EAAG,CAGrB,IAFA,IAAIp3B,EAAO,IAAAq3B,SAAA,EAAX,CACI1sC,CACJ,CAAQA,CAAR,CAAgB,IAAAisC,OAAA,CAAY,GAAZ,CAAiB,GAAjB,CAAsB,IAAtB,CAA4B,IAA5B,CAAhB,CAAA,CACE52B,CAAA,CAAO,CAAE35C,KAAMw4C,CAAAK,iBAAR,CAA8BC,SAAUxU,CAAAtG,KAAxC,CAAoD2b,KAAMA,CAA1D,CAAgEC,MAAO,IAAAo3B,SAAA,EAAvE,CAET,OAAOr3B,EANc,CA5FT,CAqGdq3B,SAAUA,QAAQ,EAAG,CAGnB,IAFA,IAAIr3B,EAAO,IAAAs3B,eAAA,EAAX,CACI3sC,CACJ,CAAQA,CAAR,CAAgB,IAAAisC,OAAA,CAAY,GAAZ,CAAgB,GAAhB,CAAhB,CAAA,CACE52B,CAAA,CAAO,CAAE35C,KAAMw4C,CAAAK,iBAAR;AAA8BC,SAAUxU,CAAAtG,KAAxC,CAAoD2b,KAAMA,CAA1D,CAAgEC,MAAO,IAAAq3B,eAAA,EAAvE,CAET,OAAOt3B,EANY,CArGP,CA8Gds3B,eAAgBA,QAAQ,EAAG,CAGzB,IAFA,IAAIt3B,EAAO,IAAAu3B,MAAA,EAAX,CACI5sC,CACJ,CAAQA,CAAR,CAAgB,IAAAisC,OAAA,CAAY,GAAZ,CAAgB,GAAhB,CAAoB,GAApB,CAAhB,CAAA,CACE52B,CAAA,CAAO,CAAE35C,KAAMw4C,CAAAK,iBAAR,CAA8BC,SAAUxU,CAAAtG,KAAxC,CAAoD2b,KAAMA,CAA1D,CAAgEC,MAAO,IAAAs3B,MAAA,EAAvE,CAET,OAAOv3B,EANkB,CA9Gb,CAuHdu3B,MAAOA,QAAQ,EAAG,CAChB,IAAI5sC,CACJ,OAAA,CAAKA,CAAL,CAAa,IAAAisC,OAAA,CAAY,GAAZ,CAAiB,GAAjB,CAAsB,GAAtB,CAAb,EACS,CAAEvwE,KAAMw4C,CAAAG,gBAAR,CAA6BG,SAAUxU,CAAAtG,KAAvC,CAAmDj5B,OAAQ,CAAA,CAA3D,CAAiE20C,SAAU,IAAAw3B,MAAA,EAA3E,CADT,CAGS,IAAAC,QAAA,EALO,CAvHJ,CAgIdA,QAASA,QAAQ,EAAG,CAClB,IAAIA,CACA,KAAAZ,OAAA,CAAY,GAAZ,CAAJ,EACEY,CACA,CADU,IAAAX,YAAA,EACV,CAAA,IAAAI,QAAA,CAAa,GAAb,CAFF,EAGW,IAAAL,OAAA,CAAY,GAAZ,CAAJ,CACLY,CADK,CACK,IAAAC,iBAAA,EADL,CAEI,IAAAb,OAAA,CAAY,GAAZ,CAAJ;AACLY,CADK,CACK,IAAAj3B,OAAA,EADL,CAEI,IAAAm3B,gBAAA13E,eAAA,CAAoC,IAAA20E,KAAA,EAAAtwC,KAApC,CAAJ,CACLmzC,CADK,CACK1yE,EAAA,CAAK,IAAA4yE,gBAAA,CAAqB,IAAAT,QAAA,EAAA5yC,KAArB,CAAL,CADL,CAEI,IAAAxY,QAAA+1B,SAAA5hD,eAAA,CAAqC,IAAA20E,KAAA,EAAAtwC,KAArC,CAAJ,CACLmzC,CADK,CACK,CAAEnxE,KAAMw4C,CAAAgB,QAAR,CAAqBn/C,MAAO,IAAAmrB,QAAA+1B,SAAA,CAAsB,IAAAq1B,QAAA,EAAA5yC,KAAtB,CAA5B,CADL,CAEI,IAAAswC,KAAA,EAAAxpC,WAAJ,CACLqsC,CADK,CACK,IAAArsC,WAAA,EADL,CAEI,IAAAwpC,KAAA,EAAA/iE,SAAJ,CACL4lE,CADK,CACK,IAAA5lE,SAAA,EADL,CAGL,IAAA0jE,WAAA,CAAgB,0BAAhB,CAA4C,IAAAX,KAAA,EAA5C,CAIF,KADA,IAAIxnB,CACJ,CAAQA,CAAR,CAAe,IAAAypB,OAAA,CAAY,GAAZ,CAAiB,GAAjB,CAAsB,GAAtB,CAAf,CAAA,CACoB,GAAlB,GAAIzpB,CAAA9oB,KAAJ,EACEmzC,CACA,CADU,CAACnxE,KAAMw4C,CAAAO,eAAP,CAA2BqB,OAAQ+2B,CAAnC,CAA4Ct1E,UAAW,IAAAy1E,eAAA,EAAvD,CACV,CAAA,IAAAV,QAAA,CAAa,GAAb,CAFF;AAGyB,GAAlB,GAAI9pB,CAAA9oB,KAAJ,EACLmzC,CACA,CADU,CAAEnxE,KAAMw4C,CAAAC,iBAAR,CAA8ByB,OAAQi3B,CAAtC,CAA+Cp1C,SAAU,IAAAgJ,WAAA,EAAzD,CAA4E2T,SAAU,CAAA,CAAtF,CACV,CAAA,IAAAk4B,QAAA,CAAa,GAAb,CAFK,EAGkB,GAAlB,GAAI9pB,CAAA9oB,KAAJ,CACLmzC,CADK,CACK,CAAEnxE,KAAMw4C,CAAAC,iBAAR,CAA8ByB,OAAQi3B,CAAtC,CAA+Cp1C,SAAU,IAAA+I,WAAA,EAAzD,CAA4E4T,SAAU,CAAA,CAAtF,CADL,CAGL,IAAAu2B,WAAA,CAAgB,YAAhB,CAGJ,OAAOkC,EAnCW,CAhIN,CAsKdzlE,OAAQA,QAAQ,CAAC6lE,CAAD,CAAiB,CAC3BpxD,CAAAA,CAAO,CAACoxD,CAAD,CAGX,KAFA,IAAIzwD,EAAS,CAAC9gB,KAAMw4C,CAAAO,eAAP,CAA2BqB,OAAQ,IAAAtV,WAAA,EAAnC,CAAsDjpC,UAAWskB,CAAjE,CAAuEzU,OAAQ,CAAA,CAA/E,CAEb,CAAO,IAAA6kE,OAAA,CAAY,GAAZ,CAAP,CAAA,CACEpwD,CAAAthB,KAAA,CAAU,IAAAkmC,WAAA,EAAV,CAGF,OAAOjkB,EARwB,CAtKnB,CAiLdwwD,eAAgBA,QAAQ,EAAG,CACzB,IAAInxD,EAAO,EACX,IAA8B,GAA9B,GAAI,IAAAqxD,UAAA,EAAAxzC,KAAJ,EACE,EACE7d,EAAAthB,KAAA,CAAU,IAAA2xE,YAAA,EAAV,CADF,OAES,IAAAD,OAAA,CAAY,GAAZ,CAFT,CADF;CAKA,MAAOpwD,EAPkB,CAjLb,CA2Ld2kB,WAAYA,QAAQ,EAAG,CACrB,IAAIR,EAAQ,IAAAssC,QAAA,EACPtsC,EAAAQ,WAAL,EACE,IAAAmqC,WAAA,CAAgB,2BAAhB,CAA6C3qC,CAA7C,CAEF,OAAO,CAAEtkC,KAAMw4C,CAAAyB,WAAR,CAAwBj1C,KAAMs/B,CAAAtG,KAA9B,CALc,CA3LT,CAmMdzyB,SAAUA,QAAQ,EAAG,CAEnB,MAAO,CAAEvL,KAAMw4C,CAAAgB,QAAR,CAAqBn/C,MAAO,IAAAu2E,QAAA,EAAAv2E,MAA5B,CAFY,CAnMP,CAwMd+2E,iBAAkBA,QAAQ,EAAG,CAC3B,IAAIt1D,EAAW,EACf,IAA8B,GAA9B,GAAI,IAAA01D,UAAA,EAAAxzC,KAAJ,EACE,EAAG,CACD,GAAI,IAAAswC,KAAA,CAAU,GAAV,CAAJ,CAEE,KAEFxyD,EAAAjd,KAAA,CAAc,IAAAkmC,WAAA,EAAd,CALC,CAAH,MAMS,IAAAwrC,OAAA,CAAY,GAAZ,CANT,CADF,CASA,IAAAK,QAAA,CAAa,GAAb,CAEA,OAAO,CAAE5wE,KAAMw4C,CAAA8B,gBAAR,CAA6Bx+B,SAAUA,CAAvC,CAboB,CAxMf,CAwNdo+B,OAAQA,QAAQ,EAAG,CAAA,IACbM,EAAa,EADA,CACIze,CACrB,IAA8B,GAA9B,GAAI,IAAAy1C,UAAA,EAAAxzC,KAAJ,EACE,EAAG,CACD,GAAI,IAAAswC,KAAA,CAAU,GAAV,CAAJ,CAEE,KAEFvyC;CAAA,CAAW,CAAC/7B,KAAMw4C,CAAA43B,SAAP,CAAqBqB,KAAM,MAA3B,CACP,KAAAnD,KAAA,EAAA/iE,SAAJ,EACEwwB,CAAAtiC,IAGA,CAHe,IAAA8R,SAAA,EAGf,CAFAwwB,CAAA2c,SAEA,CAFoB,CAAA,CAEpB,CADA,IAAAk4B,QAAA,CAAa,GAAb,CACA,CAAA70C,CAAA1hC,MAAA,CAAiB,IAAA0qC,WAAA,EAJnB,EAKW,IAAAupC,KAAA,EAAAxpC,WAAJ,EACL/I,CAAAtiC,IAEA,CAFe,IAAAqrC,WAAA,EAEf,CADA/I,CAAA2c,SACA,CADoB,CAAA,CACpB,CAAI,IAAA41B,KAAA,CAAU,GAAV,CAAJ,EACE,IAAAsC,QAAA,CAAa,GAAb,CACA,CAAA70C,CAAA1hC,MAAA,CAAiB,IAAA0qC,WAAA,EAFnB,EAIEhJ,CAAA1hC,MAJF,CAImB0hC,CAAAtiC,IAPd,EASI,IAAA60E,KAAA,CAAU,GAAV,CAAJ,EACL,IAAAsC,QAAA,CAAa,GAAb,CAKA,CAJA70C,CAAAtiC,IAIA,CAJe,IAAAsrC,WAAA,EAIf,CAHA,IAAA6rC,QAAA,CAAa,GAAb,CAGA,CAFA70C,CAAA2c,SAEA,CAFoB,CAAA,CAEpB,CADA,IAAAk4B,QAAA,CAAa,GAAb,CACA,CAAA70C,CAAA1hC,MAAA,CAAiB,IAAA0qC,WAAA,EANZ,EAQL,IAAAkqC,WAAA,CAAgB,aAAhB,CAA+B,IAAAX,KAAA,EAA/B,CAEF9zB,EAAA37C,KAAA,CAAgBk9B,CAAhB,CA9BC,CAAH,MA+BS,IAAAw0C,OAAA,CAAY,GAAZ,CA/BT,CADF,CAkCA,IAAAK,QAAA,CAAa,GAAb,CAEA;MAAO,CAAC5wE,KAAMw4C,CAAA+B,iBAAP,CAA6BC,WAAYA,CAAzC,CAtCU,CAxNL,CAiQdy0B,WAAYA,QAAQ,CAACpoB,CAAD,CAAMviB,CAAN,CAAa,CAC/B,KAAM0pC,GAAA,CAAa,QAAb,CAEA1pC,CAAAtG,KAFA,CAEY6oB,CAFZ,CAEkBviB,CAAAhmC,MAFlB,CAEgC,CAFhC,CAEoC,IAAA0/B,KAFpC,CAE+C,IAAAA,KAAAl6B,UAAA,CAAoBwgC,CAAAhmC,MAApB,CAF/C,CAAN,CAD+B,CAjQnB,CAuQdsyE,QAASA,QAAQ,CAACc,CAAD,CAAK,CACpB,GAA2B,CAA3B,GAAI,IAAAtD,OAAAj1E,OAAJ,CACE,KAAM60E,GAAA,CAAa,MAAb,CAA0D,IAAAhwC,KAA1D,CAAN,CAGF,IAAIsG,EAAQ,IAAAisC,OAAA,CAAYmB,CAAZ,CACPptC,EAAL,EACE,IAAA2qC,WAAA,CAAgB,4BAAhB,CAA+CyC,CAA/C,CAAoD,GAApD,CAAyD,IAAApD,KAAA,EAAzD,CAEF,OAAOhqC,EATa,CAvQR,CAmRdktC,UAAWA,QAAQ,EAAG,CACpB,GAA2B,CAA3B,GAAI,IAAApD,OAAAj1E,OAAJ,CACE,KAAM60E,GAAA,CAAa,MAAb,CAA0D,IAAAhwC,KAA1D,CAAN,CAEF,MAAO,KAAAowC,OAAA,CAAY,CAAZ,CAJa,CAnRR,CA0RdE,KAAMA,QAAQ,CAACoD,CAAD,CAAKC,CAAL,CAASC,CAAT,CAAaC,CAAb,CAAiB,CAC7B,MAAO,KAAAC,UAAA,CAAe,CAAf,CAAkBJ,CAAlB,CAAsBC,CAAtB,CAA0BC,CAA1B,CAA8BC,CAA9B,CADsB,CA1RjB,CA8RdC,UAAWA,QAAQ,CAAC53E,CAAD,CAAIw3E,CAAJ,CAAQC,CAAR,CAAYC,CAAZ;AAAgBC,CAAhB,CAAoB,CACrC,GAAI,IAAAzD,OAAAj1E,OAAJ,CAAyBe,CAAzB,CAA4B,CACtBoqC,CAAAA,CAAQ,IAAA8pC,OAAA,CAAYl0E,CAAZ,CACZ,KAAI63E,EAAIztC,CAAAtG,KACR,IAAI+zC,CAAJ,GAAUL,CAAV,EAAgBK,CAAhB,GAAsBJ,CAAtB,EAA4BI,CAA5B,GAAkCH,CAAlC,EAAwCG,CAAxC,GAA8CF,CAA9C,EACK,EAACH,CAAD,EAAQC,CAAR,EAAeC,CAAf,EAAsBC,CAAtB,CADL,CAEE,MAAOvtC,EALiB,CAQ5B,MAAO,CAAA,CAT8B,CA9RzB,CA0SdisC,OAAQA,QAAQ,CAACmB,CAAD,CAAKC,CAAL,CAASC,CAAT,CAAaC,CAAb,CAAiB,CAE/B,MAAA,CADIvtC,CACJ,CADY,IAAAgqC,KAAA,CAAUoD,CAAV,CAAcC,CAAd,CAAkBC,CAAlB,CAAsBC,CAAtB,CACZ,GACE,IAAAzD,OAAApsD,MAAA,EACOsiB,CAAAA,CAFT,EAIO,CAAA,CANwB,CA1SnB,CAmTd+sC,gBAAiB,CACf,OAAQ,CAACrxE,KAAMw4C,CAAAiC,eAAP,CADO,CAEf,QAAW,CAACz6C,KAAMw4C,CAAAkC,iBAAP,CAFI,CAnTH,CAyUhB,KAAI1B,GAAkB,CA+KtBgC,GAAAl7B,UAAA,CAAwB,CACtB1Z,QAASA,QAAQ,CAAC8yC,CAAD,CAAM,CACrB,IAAIj4C,EAAO,IACX,KAAAmmB,MAAA,CAAa,CACX4qD,OAAQ,CADG,CAEX9iB,QAAS,EAFE,CAGXhuD,GAAI,CAAC+wE,KAAM,EAAP,CAAWjlC,KAAM,EAAjB,CAAqBklC,IAAK,EAA1B,CAHO,CAIXlwC,OAAQ,CAACiwC,KAAM,EAAP,CAAWjlC,KAAM,EAAjB,CAAqBklC,IAAK,EAA1B,CAJG,CAKXl1B,OAAQ,EALG,CAOb/D,EAAA,CAAgCC,CAAhC,CAAqCj4C,CAAA2S,QAArC,CACA,KAAIxX,EAAQ,EAAZ,CACI+1E,CACJ,KAAAC,MAAA,CAAa,QACb,IAAKD,CAAL,CAAkBr3B,EAAA,CAAc5B,CAAd,CAAlB,CACE,IAAA9xB,MAAAirD,UAIA;AAJuB,QAIvB,CAHIvxD,CAGJ,CAHa,IAAAkxD,OAAA,EAGb,CAFA,IAAAM,QAAA,CAAaH,CAAb,CAAyBrxD,CAAzB,CAEA,CADA,IAAAyxD,QAAA,CAAazxD,CAAb,CACA,CAAA1kB,CAAA,CAAQ,YAAR,CAAuB,IAAAo2E,iBAAA,CAAsB,QAAtB,CAAgC,OAAhC,CAErB/4B,EAAAA,CAAUkB,EAAA,CAAUzB,CAAAlM,KAAV,CACd/rC,EAAAmxE,MAAA,CAAa,QACb94E,EAAA,CAAQmgD,CAAR,CAAiB,QAAQ,CAAC2M,CAAD,CAAQ3sD,CAAR,CAAa,CACpC,IAAIg5E,EAAQ,IAARA,CAAeh5E,CACnBwH,EAAAmmB,MAAA,CAAWqrD,CAAX,CAAA,CAAoB,CAACR,KAAM,EAAP,CAAWjlC,KAAM,EAAjB,CAAqBklC,IAAK,EAA1B,CACpBjxE,EAAAmmB,MAAAirD,UAAA,CAAuBI,CACvB,KAAIC,EAASzxE,CAAA+wE,OAAA,EACb/wE,EAAAqxE,QAAA,CAAalsB,CAAb,CAAoBssB,CAApB,CACAzxE,EAAAsxE,QAAA,CAAaG,CAAb,CACAzxE,EAAAmmB,MAAA41B,OAAAn+C,KAAA,CAAuB,CAACmG,KAAMytE,CAAP,CAAcn6B,OAAQ8N,CAAA9N,OAAtB,CAAvB,CACA8N,EAAAusB,QAAA,CAAgBl5E,CARoB,CAAtC,CAUA,KAAA2tB,MAAAirD,UAAA,CAAuB,IACvB,KAAAD,MAAA,CAAa,MACb,KAAAE,QAAA,CAAap5B,CAAb,CACI05B,EAAAA,CAGF,GAHEA,CAGI,IAAAC,IAHJD,CAGe,GAHfA,CAGqB,IAAAE,OAHrBF,CAGmC,MAHnCA,CAIF,IAAAG,aAAA,EAJEH,CAKF,SALEA,CAKU,IAAAJ,iBAAA,CAAsB,IAAtB,CAA4B,SAA5B,CALVI;AAMFx2E,CANEw2E,CAOF,IAAAI,SAAA,EAPEJ,CAQF,YAGE1xE,EAAAA,CAAK,CAAC,IAAI2e,QAAJ,CAAa,SAAb,CACN,gBADM,CAEN,WAFM,CAGN,MAHM,CAIN+yD,CAJM,CAAD,EAKH,IAAAh/D,QALG,CAMHskC,EANG,CAOHC,EAPG,CAQHC,EARG,CAST,KAAAhxB,MAAA,CAAa,IAAAgrD,MAAb,CAA0BhzE,IAAAA,EAC1B,OAAO8B,EAxDc,CADD,CA4DtB2xE,IAAK,KA5DiB,CA8DtBC,OAAQ,QA9Dc,CAgEtBE,SAAUA,QAAQ,EAAG,CACnB,IAAIlyD,EAAS,EAAb,CACIk8B,EAAS,IAAA51B,MAAA41B,OADb,CAEI/7C,EAAO,IACX3H,EAAA,CAAQ0jD,CAAR,CAAgB,QAAQ,CAACnwC,CAAD,CAAQ,CAC9BiU,CAAAjiB,KAAA,CAAY,MAAZ,CAAqBgO,CAAA7H,KAArB,CAAkC,GAAlC,CAAwC/D,CAAAuxE,iBAAA,CAAsB3lE,CAAA7H,KAAtB,CAAkC,GAAlC,CAAxC,CACI6H,EAAAyrC,OAAJ,EACEx3B,CAAAjiB,KAAA,CAAYgO,CAAA7H,KAAZ,CAAwB,UAAxB,CAAqCrD,IAAAC,UAAA,CAAeiL,CAAAyrC,OAAf,CAArC,CAAoE,GAApE,CAH4B,CAAhC,CAMI0E,EAAA7jD,OAAJ,EACE2nB,CAAAjiB,KAAA,CAAY,aAAZ,CAA4Bm+C,CAAA5M,IAAA,CAAW,QAAQ,CAACl2C,CAAD,CAAI,CAAE,MAAOA,EAAA8K,KAAT,CAAvB,CAAAb,KAAA,CAAgD,GAAhD,CAA5B,CAAmF,IAAnF,CAEF,OAAO2c,EAAA3c,KAAA,CAAY,EAAZ,CAbY,CAhEC,CAgFtBquE,iBAAkBA,QAAQ,CAACxtE,CAAD;AAAO4gC,CAAP,CAAe,CACvC,MAAO,WAAP,CAAqBA,CAArB,CAA8B,IAA9B,CACI,IAAAqtC,WAAA,CAAgBjuE,CAAhB,CADJ,CAEI,IAAAgoC,KAAA,CAAUhoC,CAAV,CAFJ,CAGI,IAJmC,CAhFnB,CAuFtB+tE,aAAcA,QAAQ,EAAG,CACvB,IAAI/uE,EAAQ,EAAZ,CACI/C,EAAO,IACX3H,EAAA,CAAQ,IAAA8tB,MAAA8nC,QAAR,CAA4B,QAAQ,CAACrlC,CAAD,CAAKne,CAAL,CAAa,CAC/C1H,CAAAnF,KAAA,CAAWgrB,CAAX,CAAgB,WAAhB,CAA8B5oB,CAAA2tC,OAAA,CAAYljC,CAAZ,CAA9B,CAAoD,GAApD,CAD+C,CAAjD,CAGA,OAAI1H,EAAA7K,OAAJ,CAAyB,MAAzB,CAAkC6K,CAAAG,KAAA,CAAW,GAAX,CAAlC,CAAoD,GAApD,CACO,EAPgB,CAvFH,CAiGtB8uE,WAAYA,QAAQ,CAACC,CAAD,CAAU,CAC5B,MAAO,KAAA9rD,MAAA,CAAW8rD,CAAX,CAAAjB,KAAA94E,OAAA,CAAkC,MAAlC,CAA2C,IAAAiuB,MAAA,CAAW8rD,CAAX,CAAAjB,KAAA9tE,KAAA,CAA8B,GAA9B,CAA3C,CAAgF,GAAhF,CAAsF,EADjE,CAjGR,CAqGtB6oC,KAAMA,QAAQ,CAACkmC,CAAD,CAAU,CACtB,MAAO,KAAA9rD,MAAA,CAAW8rD,CAAX,CAAAlmC,KAAA7oC,KAAA,CAA8B,EAA9B,CADe,CArGF,CAyGtBmuE,QAASA,QAAQ,CAACp5B,CAAD,CAAMw5B,CAAN,CAAcS,CAAd,CAAsBC,CAAtB,CAAmC/2E,CAAnC,CAA2Cg3E,CAA3C,CAA6D,CAAA,IACxE15B,CADwE,CAClEC,CADkE,CAC3D34C,EAAO,IADoD,CAC9Ckf,CAD8C,CACxC4kB,CADwC,CAC5B2T,CAChD06B,EAAA,CAAcA,CAAd,EAA6B92E,CAC7B,IAAK+2E,CAAAA,CAAL,EAAyBl7E,CAAA,CAAU+gD,CAAAy5B,QAAV,CAAzB,CACED,CACA,CADSA,CACT,EADmB,IAAAV,OAAA,EACnB,CAAA,IAAAsB,IAAA,CAAS,GAAT,CACE,IAAAC,WAAA,CAAgBb,CAAhB;AAAwB,IAAAc,eAAA,CAAoB,GAApB,CAAyBt6B,CAAAy5B,QAAzB,CAAxB,CADF,CAEE,IAAAc,YAAA,CAAiBv6B,CAAjB,CAAsBw5B,CAAtB,CAA8BS,CAA9B,CAAsCC,CAAtC,CAAmD/2E,CAAnD,CAA2D,CAAA,CAA3D,CAFF,CAFF,KAQA,QAAQ68C,CAAAl5C,KAAR,EACA,KAAKw4C,CAAAc,QAAL,CACEhgD,CAAA,CAAQ4/C,CAAAlM,KAAR,CAAkB,QAAQ,CAACjI,CAAD,CAAav9B,CAAb,CAAkB,CAC1CvG,CAAAqxE,QAAA,CAAavtC,CAAAA,WAAb,CAAoC3lC,IAAAA,EAApC,CAA+CA,IAAAA,EAA/C,CAA0D,QAAQ,CAACm6C,CAAD,CAAO,CAAEK,CAAA,CAAQL,CAAV,CAAzE,CACI/xC,EAAJ,GAAY0xC,CAAAlM,KAAA7zC,OAAZ,CAA8B,CAA9B,CACE8H,CAAA+iC,QAAA,EAAAgJ,KAAAnuC,KAAA,CAAyB+6C,CAAzB,CAAgC,GAAhC,CADF,CAGE34C,CAAAsxE,QAAA,CAAa34B,CAAb,CALwC,CAA5C,CAQA,MACF,MAAKpB,CAAAgB,QAAL,CACEzU,CAAA,CAAa,IAAA6J,OAAA,CAAYsK,CAAA7+C,MAAZ,CACb,KAAA2nC,OAAA,CAAY0wC,CAAZ,CAAoB3tC,CAApB,CACAquC,EAAA,CAAYV,CAAZ,EAAsB3tC,CAAtB,CACA,MACF,MAAKyT,CAAAG,gBAAL,CACE,IAAA25B,QAAA,CAAap5B,CAAAQ,SAAb,CAA2Bt6C,IAAAA,EAA3B,CAAsCA,IAAAA,EAAtC,CAAiD,QAAQ,CAACm6C,CAAD,CAAO,CAAEK,CAAA,CAAQL,CAAV,CAAhE,CACAxU,EAAA,CAAamU,CAAAJ,SAAb,CAA4B,GAA5B,CAAkC,IAAAX,UAAA,CAAeyB,CAAf,CAAsB,CAAtB,CAAlC,CAA6D,GAC7D,KAAA5X,OAAA,CAAY0wC,CAAZ,CAAoB3tC,CAApB,CACAquC,EAAA,CAAYruC,CAAZ,CACA,MACF,MAAKyT,CAAAK,iBAAL,CACE,IAAAy5B,QAAA,CAAap5B,CAAAS,KAAb;AAAuBv6C,IAAAA,EAAvB,CAAkCA,IAAAA,EAAlC,CAA6C,QAAQ,CAACm6C,CAAD,CAAO,CAAEI,CAAA,CAAOJ,CAAT,CAA5D,CACA,KAAA+4B,QAAA,CAAap5B,CAAAU,MAAb,CAAwBx6C,IAAAA,EAAxB,CAAmCA,IAAAA,EAAnC,CAA8C,QAAQ,CAACm6C,CAAD,CAAO,CAAEK,CAAA,CAAQL,CAAV,CAA7D,CAEExU,EAAA,CADmB,GAArB,GAAImU,CAAAJ,SAAJ,CACe,IAAA46B,KAAA,CAAU/5B,CAAV,CAAgBC,CAAhB,CADf,CAE4B,GAArB,GAAIV,CAAAJ,SAAJ,CACQ,IAAAX,UAAA,CAAewB,CAAf,CAAqB,CAArB,CADR,CACkCT,CAAAJ,SADlC,CACiD,IAAAX,UAAA,CAAeyB,CAAf,CAAsB,CAAtB,CADjD,CAGQ,GAHR,CAGcD,CAHd,CAGqB,GAHrB,CAG2BT,CAAAJ,SAH3B,CAG0C,GAH1C,CAGgDc,CAHhD,CAGwD,GAE/D,KAAA5X,OAAA,CAAY0wC,CAAZ,CAAoB3tC,CAApB,CACAquC,EAAA,CAAYruC,CAAZ,CACA,MACF,MAAKyT,CAAAqB,kBAAL,CACE64B,CAAA,CAASA,CAAT,EAAmB,IAAAV,OAAA,EACnB/wE,EAAAqxE,QAAA,CAAap5B,CAAAS,KAAb,CAAuB+4B,CAAvB,CACAzxE,EAAAqyE,IAAA,CAA0B,IAAjB,GAAAp6B,CAAAJ,SAAA,CAAwB45B,CAAxB,CAAiCzxE,CAAA0yE,IAAA,CAASjB,CAAT,CAA1C,CAA4DzxE,CAAAwyE,YAAA,CAAiBv6B,CAAAU,MAAjB,CAA4B84B,CAA5B,CAA5D,CACAU,EAAA,CAAYV,CAAZ,CACA,MACF,MAAKl6B,CAAAsB,sBAAL,CACE44B,CAAA,CAASA,CAAT,EAAmB,IAAAV,OAAA,EACnB/wE,EAAAqxE,QAAA,CAAap5B,CAAAz7C,KAAb,CAAuBi1E,CAAvB,CACAzxE,EAAAqyE,IAAA,CAASZ,CAAT,CAAiBzxE,CAAAwyE,YAAA,CAAiBv6B,CAAAa,UAAjB,CAAgC24B,CAAhC,CAAjB,CAA0DzxE,CAAAwyE,YAAA,CAAiBv6B,CAAAc,WAAjB;AAAiC04B,CAAjC,CAA1D,CACAU,EAAA,CAAYV,CAAZ,CACA,MACF,MAAKl6B,CAAAyB,WAAL,CACEy4B,CAAA,CAASA,CAAT,EAAmB,IAAAV,OAAA,EACfmB,EAAJ,GACEA,CAAA35E,QAEA,CAFgC,QAAf,GAAAyH,CAAAmxE,MAAA,CAA0B,GAA1B,CAAgC,IAAApwC,OAAA,CAAY,IAAAgwC,OAAA,EAAZ,CAA2B,IAAA4B,kBAAA,CAAuB,GAAvB,CAA4B16B,CAAAl0C,KAA5B,CAA3B,CAAmE,MAAnE,CAEjD,CADAmuE,CAAAz6B,SACA,CADkB,CAAA,CAClB,CAAAy6B,CAAAnuE,KAAA,CAAck0C,CAAAl0C,KAHhB,CAKA/D,EAAAqyE,IAAA,CAAwB,QAAxB,GAASryE,CAAAmxE,MAAT,EAAoCnxE,CAAA0yE,IAAA,CAAS1yE,CAAA2yE,kBAAA,CAAuB,GAAvB,CAA4B16B,CAAAl0C,KAA5B,CAAT,CAApC,CACE,QAAQ,EAAG,CACT/D,CAAAqyE,IAAA,CAAwB,QAAxB,GAASryE,CAAAmxE,MAAT,EAAoC,GAApC,CAAyC,QAAQ,EAAG,CAC9C/1E,CAAJ,EAAyB,CAAzB,GAAcA,CAAd,EACE4E,CAAAqyE,IAAA,CACEryE,CAAA4yE,OAAA,CAAY5yE,CAAA6yE,kBAAA,CAAuB,GAAvB,CAA4B56B,CAAAl0C,KAA5B,CAAZ,CADF,CAEE/D,CAAAsyE,WAAA,CAAgBtyE,CAAA6yE,kBAAA,CAAuB,GAAvB,CAA4B56B,CAAAl0C,KAA5B,CAAhB,CAAuD,IAAvD,CAFF,CAIF/D,EAAA+gC,OAAA,CAAY0wC,CAAZ,CAAoBzxE,CAAA6yE,kBAAA,CAAuB,GAAvB,CAA4B56B,CAAAl0C,KAA5B,CAApB,CANkD,CAApD,CADS,CADb,CAUK0tE,CAVL,EAUezxE,CAAAsyE,WAAA,CAAgBb,CAAhB,CAAwBzxE,CAAA6yE,kBAAA,CAAuB,GAAvB;AAA4B56B,CAAAl0C,KAA5B,CAAxB,CAVf,CAYAouE,EAAA,CAAYV,CAAZ,CACA,MACF,MAAKl6B,CAAAC,iBAAL,CACEkB,CAAA,CAAOw5B,CAAP,GAAkBA,CAAA35E,QAAlB,CAAmC,IAAAw4E,OAAA,EAAnC,GAAqD,IAAAA,OAAA,EACrDU,EAAA,CAASA,CAAT,EAAmB,IAAAV,OAAA,EACnB/wE,EAAAqxE,QAAA,CAAap5B,CAAAgB,OAAb,CAAyBP,CAAzB,CAA+Bv6C,IAAAA,EAA/B,CAA0C,QAAQ,EAAG,CACnD6B,CAAAqyE,IAAA,CAASryE,CAAA8yE,QAAA,CAAap6B,CAAb,CAAT,CAA6B,QAAQ,EAAG,CAClCT,CAAAR,SAAJ,EACEkB,CAQA,CARQ34C,CAAA+wE,OAAA,EAQR,CAPA/wE,CAAAqxE,QAAA,CAAap5B,CAAAnd,SAAb,CAA2B6d,CAA3B,CAOA,CANA34C,CAAAi3C,eAAA,CAAoB0B,CAApB,CAMA,CALIv9C,CAKJ,EALyB,CAKzB,GALcA,CAKd,EAJE4E,CAAAqyE,IAAA,CAASryE,CAAA0yE,IAAA,CAAS1yE,CAAAuyE,eAAA,CAAoB75B,CAApB,CAA0BC,CAA1B,CAAT,CAAT,CAAqD34C,CAAAsyE,WAAA,CAAgBtyE,CAAAuyE,eAAA,CAAoB75B,CAApB,CAA0BC,CAA1B,CAAhB,CAAkD,IAAlD,CAArD,CAIF,CAFA7U,CAEA,CAFa9jC,CAAAuyE,eAAA,CAAoB75B,CAApB,CAA0BC,CAA1B,CAEb,CADA34C,CAAA+gC,OAAA,CAAY0wC,CAAZ,CAAoB3tC,CAApB,CACA,CAAIouC,CAAJ,GACEA,CAAAz6B,SACA,CADkB,CAAA,CAClB,CAAAy6B,CAAAnuE,KAAA,CAAc40C,CAFhB,CATF,GAcMv9C,CAKJ,EALyB,CAKzB,GALcA,CAKd,EAJE4E,CAAAqyE,IAAA,CAASryE,CAAA4yE,OAAA,CAAY5yE,CAAA6yE,kBAAA,CAAuBn6B,CAAvB,CAA6BT,CAAAnd,SAAA/2B,KAA7B,CAAZ,CAAT,CAAuE/D,CAAAsyE,WAAA,CAAgBtyE,CAAA6yE,kBAAA,CAAuBn6B,CAAvB;AAA6BT,CAAAnd,SAAA/2B,KAA7B,CAAhB,CAAiE,IAAjE,CAAvE,CAIF,CAFA+/B,CAEA,CAFa9jC,CAAA6yE,kBAAA,CAAuBn6B,CAAvB,CAA6BT,CAAAnd,SAAA/2B,KAA7B,CAEb,CADA/D,CAAA+gC,OAAA,CAAY0wC,CAAZ,CAAoB3tC,CAApB,CACA,CAAIouC,CAAJ,GACEA,CAAAz6B,SACA,CADkB,CAAA,CAClB,CAAAy6B,CAAAnuE,KAAA,CAAck0C,CAAAnd,SAAA/2B,KAFhB,CAnBF,CADsC,CAAxC,CAyBG,QAAQ,EAAG,CACZ/D,CAAA+gC,OAAA,CAAY0wC,CAAZ,CAAoB,WAApB,CADY,CAzBd,CA4BAU,EAAA,CAAYV,CAAZ,CA7BmD,CAArD,CA8BG,CAAEr2E,CAAAA,CA9BL,CA+BA,MACF,MAAKm8C,CAAAO,eAAL,CACE25B,CAAA,CAASA,CAAT,EAAmB,IAAAV,OAAA,EACf94B,EAAAxtC,OAAJ,EACEkuC,CASA,CATQ34C,CAAAyK,OAAA,CAAYwtC,CAAAkB,OAAAp1C,KAAZ,CASR,CARAmb,CAQA,CARO,EAQP,CAPA7mB,CAAA,CAAQ4/C,CAAAr9C,UAAR,CAAuB,QAAQ,CAAC09C,CAAD,CAAO,CACpC,IAAIG,EAAWz4C,CAAA+wE,OAAA,EACf/wE,EAAAqxE,QAAA,CAAa/4B,CAAb,CAAmBG,CAAnB,CACAv5B,EAAAthB,KAAA,CAAU66C,CAAV,CAHoC,CAAtC,CAOA,CAFA3U,CAEA,CAFa6U,CAEb,CAFqB,GAErB,CAF2Bz5B,CAAAhc,KAAA,CAAU,GAAV,CAE3B,CAF4C,GAE5C,CADAlD,CAAA+gC,OAAA,CAAY0wC,CAAZ,CAAoB3tC,CAApB,CACA,CAAAquC,CAAA,CAAYV,CAAZ,CAVF,GAYE94B,CAGA,CAHQ34C,CAAA+wE,OAAA,EAGR,CAFAr4B,CAEA,CAFO,EAEP,CADAx5B,CACA,CADO,EACP,CAAAlf,CAAAqxE,QAAA,CAAap5B,CAAAkB,OAAb,CAAyBR,CAAzB,CAAgCD,CAAhC,CAAsC,QAAQ,EAAG,CAC/C14C,CAAAqyE,IAAA,CAASryE,CAAA8yE,QAAA,CAAan6B,CAAb,CAAT,CAA8B,QAAQ,EAAG,CACvCtgD,CAAA,CAAQ4/C,CAAAr9C,UAAR,CAAuB,QAAQ,CAAC09C,CAAD,CAAO,CACpCt4C,CAAAqxE,QAAA,CAAa/4B,CAAb,CAAmBL,CAAA3tC,SAAA;AAAenM,IAAAA,EAAf,CAA2B6B,CAAA+wE,OAAA,EAA9C,CAA6D5yE,IAAAA,EAA7D,CAAwE,QAAQ,CAACs6C,CAAD,CAAW,CACzFv5B,CAAAthB,KAAA,CAAU66C,CAAV,CADyF,CAA3F,CADoC,CAAtC,CAME3U,EAAA,CADE4U,CAAA30C,KAAJ,CACe/D,CAAA+yE,OAAA,CAAYr6B,CAAAngD,QAAZ,CAA0BmgD,CAAA30C,KAA1B,CAAqC20C,CAAAjB,SAArC,CADf,CACqE,GADrE,CAC2Ev4B,CAAAhc,KAAA,CAAU,GAAV,CAD3E,CAC4F,GAD5F,CAGey1C,CAHf,CAGuB,GAHvB,CAG6Bz5B,CAAAhc,KAAA,CAAU,GAAV,CAH7B,CAG8C,GAE9ClD,EAAA+gC,OAAA,CAAY0wC,CAAZ,CAAoB3tC,CAApB,CAXuC,CAAzC,CAYG,QAAQ,EAAG,CACZ9jC,CAAA+gC,OAAA,CAAY0wC,CAAZ,CAAoB,WAApB,CADY,CAZd,CAeAU,EAAA,CAAYV,CAAZ,CAhB+C,CAAjD,CAfF,CAkCA,MACF,MAAKl6B,CAAA6B,qBAAL,CACET,CAAA,CAAQ,IAAAo4B,OAAA,EACRr4B,EAAA,CAAO,EACP,KAAA24B,QAAA,CAAap5B,CAAAS,KAAb,CAAuBv6C,IAAAA,EAAvB,CAAkCu6C,CAAlC,CAAwC,QAAQ,EAAG,CACjD14C,CAAAqyE,IAAA,CAASryE,CAAA8yE,QAAA,CAAap6B,CAAAngD,QAAb,CAAT,CAAqC,QAAQ,EAAG,CAC9CyH,CAAAqxE,QAAA,CAAap5B,CAAAU,MAAb,CAAwBA,CAAxB,CACA7U,EAAA,CAAa9jC,CAAA+yE,OAAA,CAAYr6B,CAAAngD,QAAZ,CAA0BmgD,CAAA30C,KAA1B,CAAqC20C,CAAAjB,SAArC,CAAb,CAAmEQ,CAAAJ,SAAnE,CAAkFc,CAClF34C,EAAA+gC,OAAA,CAAY0wC,CAAZ,CAAoB3tC,CAApB,CACAquC,EAAA,CAAYV,CAAZ,EAAsB3tC,CAAtB,CAJ8C,CAAhD,CADiD,CAAnD,CAOG,CAPH,CAQA,MACF,MAAKyT,CAAA8B,gBAAL,CACEn6B,CAAA,CAAO,EACP7mB,EAAA,CAAQ4/C,CAAAp9B,SAAR,CAAsB,QAAQ,CAACy9B,CAAD,CAAO,CACnCt4C,CAAAqxE,QAAA,CAAa/4B,CAAb;AAAmBL,CAAA3tC,SAAA,CAAenM,IAAAA,EAAf,CAA2B6B,CAAA+wE,OAAA,EAA9C,CAA6D5yE,IAAAA,EAA7D,CAAwE,QAAQ,CAACs6C,CAAD,CAAW,CACzFv5B,CAAAthB,KAAA,CAAU66C,CAAV,CADyF,CAA3F,CADmC,CAArC,CAKA3U,EAAA,CAAa,GAAb,CAAmB5kB,CAAAhc,KAAA,CAAU,GAAV,CAAnB,CAAoC,GACpC,KAAA69B,OAAA,CAAY0wC,CAAZ,CAAoB3tC,CAApB,CACAquC,EAAA,CAAYV,CAAZ,EAAsB3tC,CAAtB,CACA,MACF,MAAKyT,CAAA+B,iBAAL,CACEp6B,CAAA,CAAO,EACPu4B,EAAA,CAAW,CAAA,CACXp/C,EAAA,CAAQ4/C,CAAAsB,WAAR,CAAwB,QAAQ,CAACze,CAAD,CAAW,CACrCA,CAAA2c,SAAJ,GACEA,CADF,CACa,CAAA,CADb,CADyC,CAA3C,CAKIA,EAAJ,EACEg6B,CAEA,CAFSA,CAET,EAFmB,IAAAV,OAAA,EAEnB,CADA,IAAAhwC,OAAA,CAAY0wC,CAAZ,CAAoB,IAApB,CACA,CAAAp5E,CAAA,CAAQ4/C,CAAAsB,WAAR,CAAwB,QAAQ,CAACze,CAAD,CAAW,CACrCA,CAAA2c,SAAJ,EACEiB,CACA,CADO14C,CAAA+wE,OAAA,EACP,CAAA/wE,CAAAqxE,QAAA,CAAav2C,CAAAtiC,IAAb,CAA2BkgD,CAA3B,CAFF,EAIEA,CAJF,CAIS5d,CAAAtiC,IAAAuG,KAAA,GAAsBw4C,CAAAyB,WAAtB,CACIle,CAAAtiC,IAAAuL,KADJ,CAEK,EAFL,CAEU+2B,CAAAtiC,IAAAY,MAEnBu/C,EAAA,CAAQ34C,CAAA+wE,OAAA,EACR/wE,EAAAqxE,QAAA,CAAav2C,CAAA1hC,MAAb,CAA6Bu/C,CAA7B,CACA34C,EAAA+gC,OAAA,CAAY/gC,CAAA+yE,OAAA,CAAYtB,CAAZ,CAAoB/4B,CAApB,CAA0B5d,CAAA2c,SAA1B,CAAZ,CAA0DkB,CAA1D,CAXyC,CAA3C,CAHF,GAiBEtgD,CAAA,CAAQ4/C,CAAAsB,WAAR,CAAwB,QAAQ,CAACze,CAAD,CAAW,CACzC96B,CAAAqxE,QAAA,CAAav2C,CAAA1hC,MAAb,CAA6B6+C,CAAA3tC,SAAA,CAAenM,IAAAA,EAAf;AAA2B6B,CAAA+wE,OAAA,EAAxD,CAAuE5yE,IAAAA,EAAvE,CAAkF,QAAQ,CAACm6C,CAAD,CAAO,CAC/Fp5B,CAAAthB,KAAA,CAAUoC,CAAA2tC,OAAA,CACN7S,CAAAtiC,IAAAuG,KAAA,GAAsBw4C,CAAAyB,WAAtB,CAAuCle,CAAAtiC,IAAAuL,KAAvC,CACG,EADH,CACQ+2B,CAAAtiC,IAAAY,MAFF,CAAV,CAGI,GAHJ,CAGUk/C,CAHV,CAD+F,CAAjG,CADyC,CAA3C,CASA,CADAxU,CACA,CADa,GACb,CADmB5kB,CAAAhc,KAAA,CAAU,GAAV,CACnB,CADoC,GACpC,CAAA,IAAA69B,OAAA,CAAY0wC,CAAZ,CAAoB3tC,CAApB,CA1BF,CA4BAquC,EAAA,CAAYV,CAAZ,EAAsB3tC,CAAtB,CACA,MACF,MAAKyT,CAAAiC,eAAL,CACE,IAAAzY,OAAA,CAAY0wC,CAAZ,CAAoB,GAApB,CACAU,EAAA,CAAYV,CAAZ,EAAsB,GAAtB,CACA,MACF,MAAKl6B,CAAAkC,iBAAL,CACE,IAAA1Y,OAAA,CAAY0wC,CAAZ,CAAoB,GAApB,CACAU,EAAA,CAAYV,CAAZ,EAAsB,GAAtB,CACA,MACF,MAAKl6B,CAAAuC,iBAAL,CACE,IAAA/Y,OAAA,CAAY0wC,CAAZ,CAAoB,GAApB,CACA,CAAAU,CAAA,CAAYV,CAAZ,EAAsB,GAAtB,CAnNF,CAX4E,CAzGxD,CA4UtBkB,kBAAmBA,QAAQ,CAAC11E,CAAD,CAAU69B,CAAV,CAAoB,CAC7C,IAAItiC,EAAMyE,CAANzE,CAAgB,GAAhBA,CAAsBsiC,CAA1B,CACIm2C,EAAM,IAAAluC,QAAA,EAAAkuC,IACLA,EAAAv4E,eAAA,CAAmBF,CAAnB,CAAL,GACEy4E,CAAA,CAAIz4E,CAAJ,CADF,CACa,IAAAu4E,OAAA,CAAY,CAAA,CAAZ,CAAmB9zE,CAAnB,CAA6B,KAA7B,CAAqC,IAAA0wC,OAAA,CAAY7S,CAAZ,CAArC,CAA6D,MAA7D,CAAsE79B,CAAtE,CAAgF,GAAhF,CADb,CAGA,OAAOg0E,EAAA,CAAIz4E,CAAJ,CANsC,CA5UzB,CAqVtBuoC,OAAQA,QAAQ,CAACnY,CAAD;AAAKxvB,CAAL,CAAY,CAC1B,GAAKwvB,CAAL,CAEA,MADA,KAAAma,QAAA,EAAAgJ,KAAAnuC,KAAA,CAAyBgrB,CAAzB,CAA6B,GAA7B,CAAkCxvB,CAAlC,CAAyC,GAAzC,CACOwvB,CAAAA,CAHmB,CArVN,CA2VtBne,OAAQA,QAAQ,CAACuoE,CAAD,CAAa,CACtB,IAAA7sD,MAAA8nC,QAAAv1D,eAAA,CAAkCs6E,CAAlC,CAAL,GACE,IAAA7sD,MAAA8nC,QAAA,CAAmB+kB,CAAnB,CADF,CACmC,IAAAjC,OAAA,CAAY,CAAA,CAAZ,CADnC,CAGA,OAAO,KAAA5qD,MAAA8nC,QAAA,CAAmB+kB,CAAnB,CAJoB,CA3VP,CAkWtB97B,UAAWA,QAAQ,CAACtuB,CAAD,CAAKqqD,CAAL,CAAmB,CACpC,MAAO,YAAP,CAAsBrqD,CAAtB,CAA2B,GAA3B,CAAiC,IAAA+kB,OAAA,CAAYslC,CAAZ,CAAjC,CAA6D,GADzB,CAlWhB,CAsWtBR,KAAMA,QAAQ,CAAC/5B,CAAD,CAAOC,CAAP,CAAc,CAC1B,MAAO,OAAP,CAAiBD,CAAjB,CAAwB,GAAxB,CAA8BC,CAA9B,CAAsC,GADZ,CAtWN,CA0WtB24B,QAASA,QAAQ,CAAC1oD,CAAD,CAAK,CACpB,IAAAma,QAAA,EAAAgJ,KAAAnuC,KAAA,CAAyB,SAAzB,CAAoCgrB,CAApC,CAAwC,GAAxC,CADoB,CA1WA,CA8WtBypD,IAAKA,QAAQ,CAAC71E,CAAD,CAAOs8C,CAAP,CAAkBC,CAAlB,CAA8B,CACzC,GAAa,CAAA,CAAb,GAAIv8C,CAAJ,CACEs8C,CAAA,EADF,KAEO,CACL,IAAI/M,EAAO,IAAAhJ,QAAA,EAAAgJ,KACXA,EAAAnuC,KAAA,CAAU,KAAV,CAAiBpB,CAAjB,CAAuB,IAAvB,CACAs8C,EAAA,EACA/M,EAAAnuC,KAAA,CAAU,GAAV,CACIm7C,EAAJ,GACEhN,CAAAnuC,KAAA,CAAU,OAAV,CAEA,CADAm7C,CAAA,EACA,CAAAhN,CAAAnuC,KAAA,CAAU,GAAV,CAHF,CALK,CAHkC,CA9WrB;AA8XtB80E,IAAKA,QAAQ,CAAC5uC,CAAD,CAAa,CACxB,MAAO,IAAP,CAAcA,CAAd,CAA2B,GADH,CA9XJ,CAkYtB8uC,OAAQA,QAAQ,CAAC9uC,CAAD,CAAa,CAC3B,MAAOA,EAAP,CAAoB,QADO,CAlYP,CAsYtBgvC,QAASA,QAAQ,CAAChvC,CAAD,CAAa,CAC5B,MAAOA,EAAP,CAAoB,QADQ,CAtYR,CA0YtB+uC,kBAAmBA,QAAQ,CAACn6B,CAAD,CAAOC,CAAP,CAAc,CAEvC,IAAIu6B,EAAoB,iBACxB,OAFsBC,4BAElB32E,KAAA,CAAqBm8C,CAArB,CAAJ,CACSD,CADT,CACgB,GADhB,CACsBC,CADtB,CAGSD,CAHT,CAGiB,IAHjB,CAGwBC,CAAAz3C,QAAA,CAAcgyE,CAAd,CAAiC,IAAAE,eAAjC,CAHxB,CAGgF,IANzC,CA1YnB,CAoZtBb,eAAgBA,QAAQ,CAAC75B,CAAD,CAAOC,CAAP,CAAc,CACpC,MAAOD,EAAP,CAAc,GAAd,CAAoBC,CAApB,CAA4B,GADQ,CApZhB,CAwZtBo6B,OAAQA,QAAQ,CAACr6B,CAAD,CAAOC,CAAP,CAAclB,CAAd,CAAwB,CACtC,MAAIA,EAAJ,CAAqB,IAAA86B,eAAA,CAAoB75B,CAApB,CAA0BC,CAA1B,CAArB,CACO,IAAAk6B,kBAAA,CAAuBn6B,CAAvB,CAA6BC,CAA7B,CAF+B,CAxZlB,CA6ZtB1B,eAAgBA,QAAQ,CAAC7+C,CAAD,CAAO,CAC7B,IAAA2oC,OAAA,CAAY3oC,CAAZ,CAAkB,iBAAlB,CAAsCA,CAAtC,CAA6C,GAA7C,CAD6B,CA7ZT,CAiatBo6E,YAAaA,QAAQ,CAACv6B,CAAD,CAAMw5B,CAAN,CAAcS,CAAd,CAAsBC,CAAtB,CAAmC/2E,CAAnC,CAA2Cg3E,CAA3C,CAA6D,CAChF,IAAIpyE;AAAO,IACX,OAAO,SAAQ,EAAG,CAChBA,CAAAqxE,QAAA,CAAap5B,CAAb,CAAkBw5B,CAAlB,CAA0BS,CAA1B,CAAkCC,CAAlC,CAA+C/2E,CAA/C,CAAuDg3E,CAAvD,CADgB,CAF8D,CAja5D,CAwatBE,WAAYA,QAAQ,CAAC1pD,CAAD,CAAKxvB,CAAL,CAAY,CAC9B,IAAI4G,EAAO,IACX,OAAO,SAAQ,EAAG,CAChBA,CAAA+gC,OAAA,CAAYnY,CAAZ,CAAgBxvB,CAAhB,CADgB,CAFY,CAxaV,CA+atBi6E,kBAAmB,gBA/aG,CAibtBD,eAAgBA,QAAQ,CAACE,CAAD,CAAI,CAC1B,MAAO,KAAP,CAAe34E,CAAC,MAADA,CAAU24E,CAAAhF,WAAA,CAAa,CAAb,CAAA3yE,SAAA,CAAyB,EAAzB,CAAVhB,OAAA,CAA+C,EAA/C,CADW,CAjbN,CAqbtBgzC,OAAQA,QAAQ,CAACv0C,CAAD,CAAQ,CACtB,GAAIpB,CAAA,CAASoB,CAAT,CAAJ,CAAqB,MAAO,GAAP,CAAcA,CAAA8H,QAAA,CAAc,IAAAmyE,kBAAd,CAAsC,IAAAD,eAAtC,CAAd,CAA2E,GAChG,IAAI17E,CAAA,CAAS0B,CAAT,CAAJ,CAAqB,MAAOA,EAAAuC,SAAA,EAC5B,IAAc,CAAA,CAAd,GAAIvC,CAAJ,CAAoB,MAAO,MAC3B,IAAc,CAAA,CAAd,GAAIA,CAAJ,CAAqB,MAAO,OAC5B,IAAc,IAAd,GAAIA,CAAJ,CAAoB,MAAO,MAC3B,IAAqB,WAArB,GAAI,MAAOA,EAAX,CAAkC,MAAO,WAEzC,MAAM2zE,GAAA,CAAa,KAAb,CAAN,CARsB,CArbF,CAgctBgE,OAAQA,QAAQ,CAACwC,CAAD;AAAOC,CAAP,CAAa,CAC3B,IAAI5qD,EAAK,GAALA,CAAY,IAAAzC,MAAA4qD,OAAA,EACXwC,EAAL,EACE,IAAAxwC,QAAA,EAAAiuC,KAAApzE,KAAA,CAAyBgrB,CAAzB,EAA+B4qD,CAAA,CAAO,GAAP,CAAaA,CAAb,CAAoB,EAAnD,EAEF,OAAO5qD,EALoB,CAhcP,CAwctBma,QAASA,QAAQ,EAAG,CAClB,MAAO,KAAA5c,MAAA,CAAW,IAAAA,MAAAirD,UAAX,CADW,CAxcE,CAkdxBp3B,GAAAn7B,UAAA,CAA2B,CACzB1Z,QAASA,QAAQ,CAAC8yC,CAAD,CAAM,CACrB,IAAIj4C,EAAO,IACXg4C,EAAA,CAAgCC,CAAhC,CAAqCj4C,CAAA2S,QAArC,CACA,KAAIu+D,CAAJ,CACInwC,CACJ,IAAKmwC,CAAL,CAAkBr3B,EAAA,CAAc5B,CAAd,CAAlB,CACElX,CAAA,CAAS,IAAAswC,QAAA,CAAaH,CAAb,CAEP14B,EAAAA,CAAUkB,EAAA,CAAUzB,CAAAlM,KAAV,CACd,KAAIgQ,CACAvD,EAAJ,GACEuD,CACA,CADS,EACT,CAAA1jD,CAAA,CAAQmgD,CAAR,CAAiB,QAAQ,CAAC2M,CAAD,CAAQ3sD,CAAR,CAAa,CACpC,IAAIoT,EAAQ5L,CAAAqxE,QAAA,CAAalsB,CAAb,CACZv5C,EAAAyrC,OAAA,CAAe8N,CAAA9N,OACf8N,EAAAv5C,MAAA,CAAcA,CACdmwC,EAAAn+C,KAAA,CAAYgO,CAAZ,CACAu5C,EAAAusB,QAAA,CAAgBl5E,CALoB,CAAtC,CAFF,CAUA,KAAIglC,EAAc,EAClBnlC,EAAA,CAAQ4/C,CAAAlM,KAAR,CAAkB,QAAQ,CAACjI,CAAD,CAAa,CACrCtG,CAAA5/B,KAAA,CAAiBoC,CAAAqxE,QAAA,CAAavtC,CAAAA,WAAb,CAAjB,CADqC,CAAvC,CAGI7jC,EAAAA,CAAyB,CAApB,GAAAg4C,CAAAlM,KAAA7zC,OAAA,CAAwBmD,CAAxB,CACoB,CAApB,GAAA48C,CAAAlM,KAAA7zC,OAAA,CAAwBslC,CAAA,CAAY,CAAZ,CAAxB,CACA,QAAQ,CAACt4B,CAAD,CAAQ+b,CAAR,CAAgB,CACtB,IAAIsf,CACJloC,EAAA,CAAQmlC,CAAR,CAAqB,QAAQ,CAACkR,CAAD,CAAM,CACjCnO,CAAA;AAAYmO,CAAA,CAAIxpC,CAAJ,CAAW+b,CAAX,CADqB,CAAnC,CAGA,OAAOsf,EALe,CAO7BQ,EAAJ,GACE9gC,CAAA8gC,OADF,CACc0yC,QAAQ,CAACvuE,CAAD,CAAQ9L,CAAR,CAAe6nB,CAAf,CAAuB,CACzC,MAAO8f,EAAA,CAAO77B,CAAP,CAAc+b,CAAd,CAAsB7nB,CAAtB,CADkC,CAD7C,CAKI2iD,EAAJ,GACE97C,CAAA87C,OADF,CACcA,CADd,CAGA,OAAO97C,EAzCc,CADE,CA6CzBoxE,QAASA,QAAQ,CAACp5B,CAAD,CAAM1/C,CAAN,CAAe6C,CAAf,CAAuB,CAAA,IAClCs9C,CADkC,CAC5BC,CAD4B,CACrB34C,EAAO,IADc,CACRkf,CAC9B,IAAI+4B,CAAArsC,MAAJ,CACE,MAAO,KAAAmwC,OAAA,CAAY9D,CAAArsC,MAAZ,CAAuBqsC,CAAAy5B,QAAvB,CAET,QAAQz5B,CAAAl5C,KAAR,EACA,KAAKw4C,CAAAgB,QAAL,CACE,MAAO,KAAAn/C,MAAA,CAAW6+C,CAAA7+C,MAAX,CAAsBb,CAAtB,CACT,MAAKg/C,CAAAG,gBAAL,CAEE,MADAiB,EACO,CADC,IAAA04B,QAAA,CAAap5B,CAAAQ,SAAb,CACD,CAAA,IAAA,CAAK,OAAL,CAAeR,CAAAJ,SAAf,CAAA,CAA6Bc,CAA7B,CAAoCpgD,CAApC,CACT,MAAKg/C,CAAAK,iBAAL,CAGE,MAFAc,EAEO,CAFA,IAAA24B,QAAA,CAAap5B,CAAAS,KAAb,CAEA,CADPC,CACO,CADC,IAAA04B,QAAA,CAAap5B,CAAAU,MAAb,CACD,CAAA,IAAA,CAAK,QAAL,CAAgBV,CAAAJ,SAAhB,CAAA,CAA8Ba,CAA9B,CAAoCC,CAApC,CAA2CpgD,CAA3C,CACT,MAAKg/C,CAAAqB,kBAAL,CAGE,MAFAF,EAEO,CAFA,IAAA24B,QAAA,CAAap5B,CAAAS,KAAb,CAEA,CADPC,CACO,CADC,IAAA04B,QAAA,CAAap5B,CAAAU,MAAb,CACD;AAAA,IAAA,CAAK,QAAL,CAAgBV,CAAAJ,SAAhB,CAAA,CAA8Ba,CAA9B,CAAoCC,CAApC,CAA2CpgD,CAA3C,CACT,MAAKg/C,CAAAsB,sBAAL,CACE,MAAO,KAAA,CAAK,WAAL,CAAA,CACL,IAAAw4B,QAAA,CAAap5B,CAAAz7C,KAAb,CADK,CAEL,IAAA60E,QAAA,CAAap5B,CAAAa,UAAb,CAFK,CAGL,IAAAu4B,QAAA,CAAap5B,CAAAc,WAAb,CAHK,CAILxgD,CAJK,CAMT,MAAKg/C,CAAAyB,WAAL,CACE,MAAOh5C,EAAA6jC,WAAA,CAAgBoU,CAAAl0C,KAAhB,CAA0BxL,CAA1B,CAAmC6C,CAAnC,CACT,MAAKm8C,CAAAC,iBAAL,CAME,MALAkB,EAKO,CALA,IAAA24B,QAAA,CAAap5B,CAAAgB,OAAb,CAAyB,CAAA,CAAzB,CAAgC,CAAE79C,CAAAA,CAAlC,CAKA,CAJF68C,CAAAR,SAIE,GAHLkB,CAGK,CAHGV,CAAAnd,SAAA/2B,KAGH,EADHk0C,CAAAR,SACG,GADWkB,CACX,CADmB,IAAA04B,QAAA,CAAap5B,CAAAnd,SAAb,CACnB,EAAAmd,CAAAR,SAAA,CACL,IAAA86B,eAAA,CAAoB75B,CAApB,CAA0BC,CAA1B,CAAiCpgD,CAAjC,CAA0C6C,CAA1C,CADK,CAEL,IAAAy3E,kBAAA,CAAuBn6B,CAAvB,CAA6BC,CAA7B,CAAoCpgD,CAApC,CAA6C6C,CAA7C,CACJ,MAAKm8C,CAAAO,eAAL,CAOE,MANA54B,EAMO,CANA,EAMA,CALP7mB,CAAA,CAAQ4/C,CAAAr9C,UAAR,CAAuB,QAAQ,CAAC09C,CAAD,CAAO,CACpCp5B,CAAAthB,KAAA,CAAUoC,CAAAqxE,QAAA,CAAa/4B,CAAb,CAAV,CADoC,CAAtC,CAKO;AAFHL,CAAAxtC,OAEG,GAFSkuC,CAET,CAFiB,IAAAhmC,QAAA,CAAaslC,CAAAkB,OAAAp1C,KAAb,CAEjB,EADFk0C,CAAAxtC,OACE,GADUkuC,CACV,CADkB,IAAA04B,QAAA,CAAap5B,CAAAkB,OAAb,CAAyB,CAAA,CAAzB,CAClB,EAAAlB,CAAAxtC,OAAA,CACL,QAAQ,CAACvF,CAAD,CAAQ+b,CAAR,CAAgB8f,CAAhB,CAAwBgb,CAAxB,CAAgC,CAEtC,IADA,IAAIjuB,EAAS,EAAb,CACS70B,EAAI,CAAb,CAAgBA,CAAhB,CAAoBimB,CAAAhnB,OAApB,CAAiC,EAAEe,CAAnC,CACE60B,CAAAlwB,KAAA,CAAYshB,CAAA,CAAKjmB,CAAL,CAAA,CAAQiM,CAAR,CAAe+b,CAAf,CAAuB8f,CAAvB,CAA+Bgb,CAA/B,CAAZ,CAEE3iD,EAAAA,CAAQu/C,CAAAv4C,MAAA,CAAYjC,IAAAA,EAAZ,CAAuB2vB,CAAvB,CAA+BiuB,CAA/B,CACZ,OAAOxjD,EAAA,CAAU,CAACA,QAAS4F,IAAAA,EAAV,CAAqB4F,KAAM5F,IAAAA,EAA3B,CAAsC/E,MAAOA,CAA7C,CAAV,CAAgEA,CANjC,CADnC,CASL,QAAQ,CAAC8L,CAAD,CAAQ+b,CAAR,CAAgB8f,CAAhB,CAAwBgb,CAAxB,CAAgC,CACtC,IAAI23B,EAAM/6B,CAAA,CAAMzzC,CAAN,CAAa+b,CAAb,CAAqB8f,CAArB,CAA6Bgb,CAA7B,CAAV,CACI3iD,CACJ,IAAiB,IAAjB,EAAIs6E,CAAAt6E,MAAJ,CAAuB,CACjB00B,CAAAA,CAAS,EACb,KAAS,IAAA70B,EAAI,CAAb,CAAgBA,CAAhB,CAAoBimB,CAAAhnB,OAApB,CAAiC,EAAEe,CAAnC,CACE60B,CAAAlwB,KAAA,CAAYshB,CAAA,CAAKjmB,CAAL,CAAA,CAAQiM,CAAR,CAAe+b,CAAf,CAAuB8f,CAAvB,CAA+Bgb,CAA/B,CAAZ,CAEF3iD,EAAA,CAAQs6E,CAAAt6E,MAAAgH,MAAA,CAAgBszE,CAAAn7E,QAAhB,CAA6Bu1B,CAA7B,CALa,CAOvB,MAAOv1B,EAAA,CAAU,CAACa,MAAOA,CAAR,CAAV,CAA2BA,CAVI,CAY5C,MAAKm+C,CAAA6B,qBAAL,CAGE,MAFAV,EAEO,CAFA,IAAA24B,QAAA,CAAap5B,CAAAS,KAAb,CAAuB,CAAA,CAAvB,CAA6B,CAA7B,CAEA,CADPC,CACO,CADC,IAAA04B,QAAA,CAAap5B,CAAAU,MAAb,CACD,CAAA,QAAQ,CAACzzC,CAAD,CAAQ+b,CAAR,CAAgB8f,CAAhB,CAAwBgb,CAAxB,CAAgC,CAC7C,IAAI43B;AAAMj7B,CAAA,CAAKxzC,CAAL,CAAY+b,CAAZ,CAAoB8f,CAApB,CAA4Bgb,CAA5B,CACN23B,EAAAA,CAAM/6B,CAAA,CAAMzzC,CAAN,CAAa+b,CAAb,CAAqB8f,CAArB,CAA6Bgb,CAA7B,CACV43B,EAAAp7E,QAAA,CAAYo7E,CAAA5vE,KAAZ,CAAA,CAAwB2vE,CACxB,OAAOn7E,EAAA,CAAU,CAACa,MAAOs6E,CAAR,CAAV,CAAyBA,CAJa,CAMjD,MAAKn8B,CAAA8B,gBAAL,CAKE,MAJAn6B,EAIO,CAJA,EAIA,CAHP7mB,CAAA,CAAQ4/C,CAAAp9B,SAAR,CAAsB,QAAQ,CAACy9B,CAAD,CAAO,CACnCp5B,CAAAthB,KAAA,CAAUoC,CAAAqxE,QAAA,CAAa/4B,CAAb,CAAV,CADmC,CAArC,CAGO,CAAA,QAAQ,CAACpzC,CAAD,CAAQ+b,CAAR,CAAgB8f,CAAhB,CAAwBgb,CAAxB,CAAgC,CAE7C,IADA,IAAI3iD,EAAQ,EAAZ,CACSH,EAAI,CAAb,CAAgBA,CAAhB,CAAoBimB,CAAAhnB,OAApB,CAAiC,EAAEe,CAAnC,CACEG,CAAAwE,KAAA,CAAWshB,CAAA,CAAKjmB,CAAL,CAAA,CAAQiM,CAAR,CAAe+b,CAAf,CAAuB8f,CAAvB,CAA+Bgb,CAA/B,CAAX,CAEF,OAAOxjD,EAAA,CAAU,CAACa,MAAOA,CAAR,CAAV,CAA2BA,CALW,CAOjD,MAAKm+C,CAAA+B,iBAAL,CAiBE,MAhBAp6B,EAgBO,CAhBA,EAgBA,CAfP7mB,CAAA,CAAQ4/C,CAAAsB,WAAR,CAAwB,QAAQ,CAACze,CAAD,CAAW,CACrCA,CAAA2c,SAAJ,CACEv4B,CAAAthB,KAAA,CAAU,CAACpF,IAAKwH,CAAAqxE,QAAA,CAAav2C,CAAAtiC,IAAb,CAAN,CACCi/C,SAAU,CAAA,CADX,CAECr+C,MAAO4G,CAAAqxE,QAAA,CAAav2C,CAAA1hC,MAAb,CAFR,CAAV,CADF,CAME8lB,CAAAthB,KAAA,CAAU,CAACpF,IAAKsiC,CAAAtiC,IAAAuG,KAAA,GAAsBw4C,CAAAyB,WAAtB,CACAle,CAAAtiC,IAAAuL,KADA,CAEC,EAFD,CAEM+2B,CAAAtiC,IAAAY,MAFZ,CAGCq+C,SAAU,CAAA,CAHX,CAICr+C,MAAO4G,CAAAqxE,QAAA,CAAav2C,CAAA1hC,MAAb,CAJR,CAAV,CAPuC,CAA3C,CAeO,CAAA,QAAQ,CAAC8L,CAAD;AAAQ+b,CAAR,CAAgB8f,CAAhB,CAAwBgb,CAAxB,CAAgC,CAE7C,IADA,IAAI3iD,EAAQ,EAAZ,CACSH,EAAI,CAAb,CAAgBA,CAAhB,CAAoBimB,CAAAhnB,OAApB,CAAiC,EAAEe,CAAnC,CACMimB,CAAA,CAAKjmB,CAAL,CAAAw+C,SAAJ,CACEr+C,CAAA,CAAM8lB,CAAA,CAAKjmB,CAAL,CAAAT,IAAA,CAAY0M,CAAZ,CAAmB+b,CAAnB,CAA2B8f,CAA3B,CAAmCgb,CAAnC,CAAN,CADF,CACsD78B,CAAA,CAAKjmB,CAAL,CAAAG,MAAA,CAAc8L,CAAd,CAAqB+b,CAArB,CAA6B8f,CAA7B,CAAqCgb,CAArC,CADtD,CAGE3iD,CAAA,CAAM8lB,CAAA,CAAKjmB,CAAL,CAAAT,IAAN,CAHF,CAGuB0mB,CAAA,CAAKjmB,CAAL,CAAAG,MAAA,CAAc8L,CAAd,CAAqB+b,CAArB,CAA6B8f,CAA7B,CAAqCgb,CAArC,CAGzB,OAAOxjD,EAAA,CAAU,CAACa,MAAOA,CAAR,CAAV,CAA2BA,CATW,CAWjD,MAAKm+C,CAAAiC,eAAL,CACE,MAAO,SAAQ,CAACt0C,CAAD,CAAQ,CACrB,MAAO3M,EAAA,CAAU,CAACa,MAAO8L,CAAR,CAAV,CAA2BA,CADb,CAGzB,MAAKqyC,CAAAkC,iBAAL,CACE,MAAO,SAAQ,CAACv0C,CAAD,CAAQ+b,CAAR,CAAgB,CAC7B,MAAO1oB,EAAA,CAAU,CAACa,MAAO6nB,CAAR,CAAV,CAA4BA,CADN,CAGjC,MAAKs2B,CAAAuC,iBAAL,CACE,MAAO,SAAQ,CAAC50C,CAAD,CAAQ+b,CAAR,CAAgB8f,CAAhB,CAAwB,CACrC,MAAOxoC,EAAA,CAAU,CAACa,MAAO2nC,CAAR,CAAV,CAA4BA,CADE,CAtHzC,CALsC,CA7Cf,CA8KzB,SAAU6yC,QAAQ,CAACn7B,CAAD,CAAWlgD,CAAX,CAAoB,CACpC,MAAO,SAAQ,CAAC2M,CAAD,CAAQ+b,CAAR,CAAgB8f,CAAhB,CAAwBgb,CAAxB,CAAgC,CACzCj0C,CAAAA,CAAM2wC,CAAA,CAASvzC,CAAT,CAAgB+b,CAAhB,CAAwB8f,CAAxB,CAAgCgb,CAAhC,CAERj0C,EAAA,CADE5Q,CAAA,CAAU4Q,CAAV,CAAJ,CACQ,CAACA,CADT,CAGQ,CAER,OAAOvP,EAAA,CAAU,CAACa,MAAO0O,CAAR,CAAV,CAAyBA,CAPa,CADX,CA9Kb,CAyLzB,SAAU+rE,QAAQ,CAACp7B,CAAD,CAAWlgD,CAAX,CAAoB,CACpC,MAAO,SAAQ,CAAC2M,CAAD,CAAQ+b,CAAR,CAAgB8f,CAAhB,CAAwBgb,CAAxB,CAAgC,CACzCj0C,CAAAA,CAAM2wC,CAAA,CAASvzC,CAAT,CAAgB+b,CAAhB;AAAwB8f,CAAxB,CAAgCgb,CAAhC,CAERj0C,EAAA,CADE5Q,CAAA,CAAU4Q,CAAV,CAAJ,CACQ,CAACA,CADT,CAGS,EAET,OAAOvP,EAAA,CAAU,CAACa,MAAO0O,CAAR,CAAV,CAAyBA,CAPa,CADX,CAzLb,CAoMzB,SAAUgsE,QAAQ,CAACr7B,CAAD,CAAWlgD,CAAX,CAAoB,CACpC,MAAO,SAAQ,CAAC2M,CAAD,CAAQ+b,CAAR,CAAgB8f,CAAhB,CAAwBgb,CAAxB,CAAgC,CACzCj0C,CAAAA,CAAM,CAAC2wC,CAAA,CAASvzC,CAAT,CAAgB+b,CAAhB,CAAwB8f,CAAxB,CAAgCgb,CAAhC,CACX,OAAOxjD,EAAA,CAAU,CAACa,MAAO0O,CAAR,CAAV,CAAyBA,CAFa,CADX,CApMb,CA0MzB,UAAWisE,QAAQ,CAACr7B,CAAD,CAAOC,CAAP,CAAcpgD,CAAd,CAAuB,CACxC,MAAO,SAAQ,CAAC2M,CAAD,CAAQ+b,CAAR,CAAgB8f,CAAhB,CAAwBgb,CAAxB,CAAgC,CAC7C,IAAI43B,EAAMj7B,CAAA,CAAKxzC,CAAL,CAAY+b,CAAZ,CAAoB8f,CAApB,CAA4Bgb,CAA5B,CACN23B,EAAAA,CAAM/6B,CAAA,CAAMzzC,CAAN,CAAa+b,CAAb,CAAqB8f,CAArB,CAA6Bgb,CAA7B,CACNj0C,EAAAA,CAAMqvC,EAAA,CAAOw8B,CAAP,CAAYD,CAAZ,CACV,OAAOn7E,EAAA,CAAU,CAACa,MAAO0O,CAAR,CAAV,CAAyBA,CAJa,CADP,CA1MjB,CAkNzB,UAAWksE,QAAQ,CAACt7B,CAAD,CAAOC,CAAP,CAAcpgD,CAAd,CAAuB,CACxC,MAAO,SAAQ,CAAC2M,CAAD,CAAQ+b,CAAR,CAAgB8f,CAAhB,CAAwBgb,CAAxB,CAAgC,CAC7C,IAAI43B,EAAMj7B,CAAA,CAAKxzC,CAAL,CAAY+b,CAAZ,CAAoB8f,CAApB,CAA4Bgb,CAA5B,CACN23B,EAAAA,CAAM/6B,CAAA,CAAMzzC,CAAN,CAAa+b,CAAb,CAAqB8f,CAArB,CAA6Bgb,CAA7B,CACNj0C,EAAAA,EAAO5Q,CAAA,CAAUy8E,CAAV,CAAA,CAAiBA,CAAjB,CAAuB,CAA9B7rE,GAAoC5Q,CAAA,CAAUw8E,CAAV,CAAA,CAAiBA,CAAjB,CAAuB,CAA3D5rE,CACJ,OAAOvP,EAAA,CAAU,CAACa,MAAO0O,CAAR,CAAV,CAAyBA,CAJa,CADP,CAlNjB,CA0NzB,UAAWmsE,QAAQ,CAACv7B,CAAD,CAAOC,CAAP,CAAcpgD,CAAd,CAAuB,CACxC,MAAO,SAAQ,CAAC2M,CAAD,CAAQ+b,CAAR,CAAgB8f,CAAhB,CAAwBgb,CAAxB,CAAgC,CACzCj0C,CAAAA,CAAM4wC,CAAA,CAAKxzC,CAAL,CAAY+b,CAAZ,CAAoB8f,CAApB,CAA4Bgb,CAA5B,CAANj0C,CAA4C6wC,CAAA,CAAMzzC,CAAN,CAAa+b,CAAb,CAAqB8f,CAArB,CAA6Bgb,CAA7B,CAChD,OAAOxjD,EAAA,CAAU,CAACa,MAAO0O,CAAR,CAAV,CAAyBA,CAFa,CADP,CA1NjB,CAgOzB,UAAWosE,QAAQ,CAACx7B,CAAD,CAAOC,CAAP,CAAcpgD,CAAd,CAAuB,CACxC,MAAO,SAAQ,CAAC2M,CAAD;AAAQ+b,CAAR,CAAgB8f,CAAhB,CAAwBgb,CAAxB,CAAgC,CACzCj0C,CAAAA,CAAM4wC,CAAA,CAAKxzC,CAAL,CAAY+b,CAAZ,CAAoB8f,CAApB,CAA4Bgb,CAA5B,CAANj0C,CAA4C6wC,CAAA,CAAMzzC,CAAN,CAAa+b,CAAb,CAAqB8f,CAArB,CAA6Bgb,CAA7B,CAChD,OAAOxjD,EAAA,CAAU,CAACa,MAAO0O,CAAR,CAAV,CAAyBA,CAFa,CADP,CAhOjB,CAsOzB,UAAWqsE,QAAQ,CAACz7B,CAAD,CAAOC,CAAP,CAAcpgD,CAAd,CAAuB,CACxC,MAAO,SAAQ,CAAC2M,CAAD,CAAQ+b,CAAR,CAAgB8f,CAAhB,CAAwBgb,CAAxB,CAAgC,CACzCj0C,CAAAA,CAAM4wC,CAAA,CAAKxzC,CAAL,CAAY+b,CAAZ,CAAoB8f,CAApB,CAA4Bgb,CAA5B,CAANj0C,CAA4C6wC,CAAA,CAAMzzC,CAAN,CAAa+b,CAAb,CAAqB8f,CAArB,CAA6Bgb,CAA7B,CAChD,OAAOxjD,EAAA,CAAU,CAACa,MAAO0O,CAAR,CAAV,CAAyBA,CAFa,CADP,CAtOjB,CA4OzB,YAAassE,QAAQ,CAAC17B,CAAD,CAAOC,CAAP,CAAcpgD,CAAd,CAAuB,CAC1C,MAAO,SAAQ,CAAC2M,CAAD,CAAQ+b,CAAR,CAAgB8f,CAAhB,CAAwBgb,CAAxB,CAAgC,CACzCj0C,CAAAA,CAAM4wC,CAAA,CAAKxzC,CAAL,CAAY+b,CAAZ,CAAoB8f,CAApB,CAA4Bgb,CAA5B,CAANj0C,GAA8C6wC,CAAA,CAAMzzC,CAAN,CAAa+b,CAAb,CAAqB8f,CAArB,CAA6Bgb,CAA7B,CAClD,OAAOxjD,EAAA,CAAU,CAACa,MAAO0O,CAAR,CAAV,CAAyBA,CAFa,CADL,CA5OnB,CAkPzB,YAAausE,QAAQ,CAAC37B,CAAD,CAAOC,CAAP,CAAcpgD,CAAd,CAAuB,CAC1C,MAAO,SAAQ,CAAC2M,CAAD,CAAQ+b,CAAR,CAAgB8f,CAAhB,CAAwBgb,CAAxB,CAAgC,CACzCj0C,CAAAA,CAAM4wC,CAAA,CAAKxzC,CAAL,CAAY+b,CAAZ,CAAoB8f,CAApB,CAA4Bgb,CAA5B,CAANj0C,GAA8C6wC,CAAA,CAAMzzC,CAAN,CAAa+b,CAAb,CAAqB8f,CAArB,CAA6Bgb,CAA7B,CAClD,OAAOxjD,EAAA,CAAU,CAACa,MAAO0O,CAAR,CAAV,CAAyBA,CAFa,CADL,CAlPnB,CAwPzB,WAAYwsE,QAAQ,CAAC57B,CAAD,CAAOC,CAAP,CAAcpgD,CAAd,CAAuB,CACzC,MAAO,SAAQ,CAAC2M,CAAD,CAAQ+b,CAAR,CAAgB8f,CAAhB,CAAwBgb,CAAxB,CAAgC,CAEzCj0C,CAAAA,CAAM4wC,CAAA,CAAKxzC,CAAL,CAAY+b,CAAZ,CAAoB8f,CAApB,CAA4Bgb,CAA5B,CAANj0C,EAA6C6wC,CAAA,CAAMzzC,CAAN,CAAa+b,CAAb,CAAqB8f,CAArB,CAA6Bgb,CAA7B,CACjD,OAAOxjD,EAAA,CAAU,CAACa,MAAO0O,CAAR,CAAV,CAAyBA,CAHa,CADN,CAxPlB,CA+PzB,WAAYysE,QAAQ,CAAC77B,CAAD,CAAOC,CAAP,CAAcpgD,CAAd,CAAuB,CACzC,MAAO,SAAQ,CAAC2M,CAAD;AAAQ+b,CAAR,CAAgB8f,CAAhB,CAAwBgb,CAAxB,CAAgC,CAEzCj0C,CAAAA,CAAM4wC,CAAA,CAAKxzC,CAAL,CAAY+b,CAAZ,CAAoB8f,CAApB,CAA4Bgb,CAA5B,CAANj0C,EAA6C6wC,CAAA,CAAMzzC,CAAN,CAAa+b,CAAb,CAAqB8f,CAArB,CAA6Bgb,CAA7B,CACjD,OAAOxjD,EAAA,CAAU,CAACa,MAAO0O,CAAR,CAAV,CAAyBA,CAHa,CADN,CA/PlB,CAsQzB,UAAW0sE,QAAQ,CAAC97B,CAAD,CAAOC,CAAP,CAAcpgD,CAAd,CAAuB,CACxC,MAAO,SAAQ,CAAC2M,CAAD,CAAQ+b,CAAR,CAAgB8f,CAAhB,CAAwBgb,CAAxB,CAAgC,CACzCj0C,CAAAA,CAAM4wC,CAAA,CAAKxzC,CAAL,CAAY+b,CAAZ,CAAoB8f,CAApB,CAA4Bgb,CAA5B,CAANj0C,CAA4C6wC,CAAA,CAAMzzC,CAAN,CAAa+b,CAAb,CAAqB8f,CAArB,CAA6Bgb,CAA7B,CAChD,OAAOxjD,EAAA,CAAU,CAACa,MAAO0O,CAAR,CAAV,CAAyBA,CAFa,CADP,CAtQjB,CA4QzB,UAAW2sE,QAAQ,CAAC/7B,CAAD,CAAOC,CAAP,CAAcpgD,CAAd,CAAuB,CACxC,MAAO,SAAQ,CAAC2M,CAAD,CAAQ+b,CAAR,CAAgB8f,CAAhB,CAAwBgb,CAAxB,CAAgC,CACzCj0C,CAAAA,CAAM4wC,CAAA,CAAKxzC,CAAL,CAAY+b,CAAZ,CAAoB8f,CAApB,CAA4Bgb,CAA5B,CAANj0C,CAA4C6wC,CAAA,CAAMzzC,CAAN,CAAa+b,CAAb,CAAqB8f,CAArB,CAA6Bgb,CAA7B,CAChD,OAAOxjD,EAAA,CAAU,CAACa,MAAO0O,CAAR,CAAV,CAAyBA,CAFa,CADP,CA5QjB,CAkRzB,WAAY4sE,QAAQ,CAACh8B,CAAD,CAAOC,CAAP,CAAcpgD,CAAd,CAAuB,CACzC,MAAO,SAAQ,CAAC2M,CAAD,CAAQ+b,CAAR,CAAgB8f,CAAhB,CAAwBgb,CAAxB,CAAgC,CACzCj0C,CAAAA,CAAM4wC,CAAA,CAAKxzC,CAAL,CAAY+b,CAAZ,CAAoB8f,CAApB,CAA4Bgb,CAA5B,CAANj0C,EAA6C6wC,CAAA,CAAMzzC,CAAN,CAAa+b,CAAb,CAAqB8f,CAArB,CAA6Bgb,CAA7B,CACjD,OAAOxjD,EAAA,CAAU,CAACa,MAAO0O,CAAR,CAAV,CAAyBA,CAFa,CADN,CAlRlB,CAwRzB,WAAY6sE,QAAQ,CAACj8B,CAAD,CAAOC,CAAP,CAAcpgD,CAAd,CAAuB,CACzC,MAAO,SAAQ,CAAC2M,CAAD,CAAQ+b,CAAR,CAAgB8f,CAAhB,CAAwBgb,CAAxB,CAAgC,CACzCj0C,CAAAA,CAAM4wC,CAAA,CAAKxzC,CAAL,CAAY+b,CAAZ,CAAoB8f,CAApB,CAA4Bgb,CAA5B,CAANj0C,EAA6C6wC,CAAA,CAAMzzC,CAAN,CAAa+b,CAAb,CAAqB8f,CAArB,CAA6Bgb,CAA7B,CACjD,OAAOxjD,EAAA,CAAU,CAACa,MAAO0O,CAAR,CAAV,CAAyBA,CAFa,CADN,CAxRlB,CA8RzB,WAAY8sE,QAAQ,CAACl8B,CAAD,CAAOC,CAAP,CAAcpgD,CAAd,CAAuB,CACzC,MAAO,SAAQ,CAAC2M,CAAD,CAAQ+b,CAAR,CAAgB8f,CAAhB,CAAwBgb,CAAxB,CAAgC,CACzCj0C,CAAAA;AAAM4wC,CAAA,CAAKxzC,CAAL,CAAY+b,CAAZ,CAAoB8f,CAApB,CAA4Bgb,CAA5B,CAANj0C,EAA6C6wC,CAAA,CAAMzzC,CAAN,CAAa+b,CAAb,CAAqB8f,CAArB,CAA6Bgb,CAA7B,CACjD,OAAOxjD,EAAA,CAAU,CAACa,MAAO0O,CAAR,CAAV,CAAyBA,CAFa,CADN,CA9RlB,CAoSzB,WAAY+sE,QAAQ,CAACn8B,CAAD,CAAOC,CAAP,CAAcpgD,CAAd,CAAuB,CACzC,MAAO,SAAQ,CAAC2M,CAAD,CAAQ+b,CAAR,CAAgB8f,CAAhB,CAAwBgb,CAAxB,CAAgC,CACzCj0C,CAAAA,CAAM4wC,CAAA,CAAKxzC,CAAL,CAAY+b,CAAZ,CAAoB8f,CAApB,CAA4Bgb,CAA5B,CAANj0C,EAA6C6wC,CAAA,CAAMzzC,CAAN,CAAa+b,CAAb,CAAqB8f,CAArB,CAA6Bgb,CAA7B,CACjD,OAAOxjD,EAAA,CAAU,CAACa,MAAO0O,CAAR,CAAV,CAAyBA,CAFa,CADN,CApSlB,CA0SzB,YAAagtE,QAAQ,CAACt4E,CAAD,CAAOs8C,CAAP,CAAkBC,CAAlB,CAA8BxgD,CAA9B,CAAuC,CAC1D,MAAO,SAAQ,CAAC2M,CAAD,CAAQ+b,CAAR,CAAgB8f,CAAhB,CAAwBgb,CAAxB,CAAgC,CACzCj0C,CAAAA,CAAMtL,CAAA,CAAK0I,CAAL,CAAY+b,CAAZ,CAAoB8f,CAApB,CAA4Bgb,CAA5B,CAAA,CAAsCjD,CAAA,CAAU5zC,CAAV,CAAiB+b,CAAjB,CAAyB8f,CAAzB,CAAiCgb,CAAjC,CAAtC,CAAiFhD,CAAA,CAAW7zC,CAAX,CAAkB+b,CAAlB,CAA0B8f,CAA1B,CAAkCgb,CAAlC,CAC3F,OAAOxjD,EAAA,CAAU,CAACa,MAAO0O,CAAR,CAAV,CAAyBA,CAFa,CADW,CA1SnC,CAgTzB1O,MAAOA,QAAQ,CAACA,CAAD,CAAQb,CAAR,CAAiB,CAC9B,MAAO,SAAQ,EAAG,CAAE,MAAOA,EAAA,CAAU,CAACA,QAAS4F,IAAAA,EAAV,CAAqB4F,KAAM5F,IAAAA,EAA3B,CAAsC/E,MAAOA,CAA7C,CAAV,CAAgEA,CAAzE,CADY,CAhTP,CAmTzByqC,WAAYA,QAAQ,CAAC9/B,CAAD,CAAOxL,CAAP,CAAgB6C,CAAhB,CAAwB,CAC1C,MAAO,SAAQ,CAAC8J,CAAD,CAAQ+b,CAAR,CAAgB8f,CAAhB,CAAwBgb,CAAxB,CAAgC,CACzCtJ,CAAAA,CAAOxxB,CAAA,EAAWld,CAAX,GAAmBkd,EAAnB,CAA6BA,CAA7B,CAAsC/b,CAC7C9J,EAAJ,EAAyB,CAAzB,GAAcA,CAAd,EAA8Bq3C,CAA9B,EAAoD,IAApD,EAAsCA,CAAA,CAAK1uC,CAAL,CAAtC,GACE0uC,CAAA,CAAK1uC,CAAL,CADF,CACe,EADf,CAGI3K,EAAAA,CAAQq5C,CAAA,CAAOA,CAAA,CAAK1uC,CAAL,CAAP,CAAoB5F,IAAAA,EAChC,OAAI5F,EAAJ,CACS,CAACA,QAASk6C,CAAV,CAAgB1uC,KAAMA,CAAtB,CAA4B3K,MAAOA,CAAnC,CADT;AAGSA,CAToC,CADL,CAnTnB,CAiUzBm5E,eAAgBA,QAAQ,CAAC75B,CAAD,CAAOC,CAAP,CAAcpgD,CAAd,CAAuB6C,CAAvB,CAA+B,CACrD,MAAO,SAAQ,CAAC8J,CAAD,CAAQ+b,CAAR,CAAgB8f,CAAhB,CAAwBgb,CAAxB,CAAgC,CAC7C,IAAI43B,EAAMj7B,CAAA,CAAKxzC,CAAL,CAAY+b,CAAZ,CAAoB8f,CAApB,CAA4Bgb,CAA5B,CAAV,CACI23B,CADJ,CAEIt6E,CACO,KAAX,EAAIu6E,CAAJ,GACED,CAOA,CAPM/6B,CAAA,CAAMzzC,CAAN,CAAa+b,CAAb,CAAqB8f,CAArB,CAA6Bgb,CAA7B,CAON,CANA23B,CAMA,EAjhDQ,EAihDR,CALIt4E,CAKJ,EALyB,CAKzB,GALcA,CAKd,EAJMu4E,CAIN,EAJe,CAAAA,CAAA,CAAID,CAAJ,CAIf,GAHIC,CAAA,CAAID,CAAJ,CAGJ,CAHe,EAGf,EAAAt6E,CAAA,CAAQu6E,CAAA,CAAID,CAAJ,CARV,CAUA,OAAIn7E,EAAJ,CACS,CAACA,QAASo7E,CAAV,CAAe5vE,KAAM2vE,CAArB,CAA0Bt6E,MAAOA,CAAjC,CADT,CAGSA,CAjBoC,CADM,CAjU9B,CAuVzBy5E,kBAAmBA,QAAQ,CAACn6B,CAAD,CAAOC,CAAP,CAAcpgD,CAAd,CAAuB6C,CAAvB,CAA+B,CACxD,MAAO,SAAQ,CAAC8J,CAAD,CAAQ+b,CAAR,CAAgB8f,CAAhB,CAAwBgb,CAAxB,CAAgC,CACzC43B,CAAAA,CAAMj7B,CAAA,CAAKxzC,CAAL,CAAY+b,CAAZ,CAAoB8f,CAApB,CAA4Bgb,CAA5B,CACN3gD,EAAJ,EAAyB,CAAzB,GAAcA,CAAd,EACMu4E,CADN,EAC2B,IAD3B,EACaA,CAAA,CAAIh7B,CAAJ,CADb,GAEIg7B,CAAA,CAAIh7B,CAAJ,CAFJ,CAEiB,EAFjB,CAKIv/C,EAAAA,CAAe,IAAP,EAAAu6E,CAAA,CAAcA,CAAA,CAAIh7B,CAAJ,CAAd,CAA2Bx6C,IAAAA,EACvC,OAAI5F,EAAJ,CACS,CAACA,QAASo7E,CAAV,CAAe5vE,KAAM40C,CAArB,CAA4Bv/C,MAAOA,CAAnC,CADT,CAGSA,CAXoC,CADS,CAvVjC,CAuWzB2iD,OAAQA,QAAQ,CAACnwC,CAAD,CAAQ8lE,CAAR,CAAiB,CAC/B,MAAO,SAAQ,CAACxsE,CAAD,CAAQ9L,CAAR,CAAe6nB,CAAf,CAAuB86B,CAAvB,CAA+B,CAC5C,MAAIA,EAAJ,CAAmBA,CAAA,CAAO21B,CAAP,CAAnB,CACO9lE,CAAA,CAAM1G,CAAN,CAAa9L,CAAb,CAAoB6nB,CAApB,CAFqC,CADf,CAvWR,CAwX3Bg5B,GAAAp7B,UAAA,CAAmB,CACjBzgB,YAAa67C,EADI,CAGjBn5C,MAAOA,QAAQ,CAACi8B,CAAD,CAAO,CAChBkb,CAAAA,CAAM,IAAA4F,OAAA,CAAY9gB,CAAZ,CACV,KAAI98B;AAAK,IAAAk6C,YAAAh1C,QAAA,CAAyB8yC,CAAAA,IAAzB,CAAT,CACuBA,EAAAA,CAAAA,IAAvBh4C,EAAA6gC,QAAA,CA/1ByB,CA+1BzB,GA/1BKmX,CAAAlM,KAAA7zC,OA+1BL,EA91BsB,CA81BtB,GA91BE+/C,CAAAlM,KAAA7zC,OA81BF,GA71BE+/C,CAAAlM,KAAA,CAAS,CAAT,CAAAjI,WAAA/kC,KA61BF,GA71BkCw4C,CAAAgB,QA61BlC,EA51BEN,CAAAlM,KAAA,CAAS,CAAT,CAAAjI,WAAA/kC,KA41BF,GA51BkCw4C,CAAA8B,gBA41BlC,EA31BEpB,CAAAlM,KAAA,CAAS,CAAT,CAAAjI,WAAA/kC,KA21BF,GA31BkCw4C,CAAA+B,iBA21BlC,CACAr5C,EAAAqK,SAAA,CAAyB2tC,CAAAA,IAx1BpB3tC,SAy1BLrK,EAAAi9C,QAAA,CAAajF,CAAAiF,QACb,OAAOj9C,EANa,CAHL,CAYjB49C,OAAQA,QAAQ,CAACnP,CAAD,CAAM,CACpB,IAAIwO,EAAU,CAAA,CACdxO,EAAA,CAAMA,CAAAt2B,KAAA,EAEgB,IAAtB,GAAIs2B,CAAA/uC,OAAA,CAAW,CAAX,CAAJ,EAA+C,GAA/C,GAA6B+uC,CAAA/uC,OAAA,CAAW,CAAX,CAA7B,GACEu9C,CACA,CADU,CAAA,CACV,CAAAxO,CAAA,CAAMA,CAAA7rC,UAAA,CAAc,CAAd,CAFR,CAIA,OAAO,CACLo1C,IAAK,IAAAA,IAAAA,IAAA,CAAavJ,CAAb,CADA,CAELwO,QAASA,CAFJ,CARa,CAZL,CAmpFnB,KAAIoK,GAAa3vD,CAAA,CAAO,MAAP,CAAjB,CAEIq2B,EAAe,CAEjBC,KAAM,MAFW,CAKjBC,IAAK,KALY,CASjBE,UAAW,UATM,CAajBD,IAAK,KAbY,CAkBjBE,aAAc,aAlBG;AAqBjBw6B,GAAI,IArBa,CAFnB,CA4BIc,GAA8B,WA5BlC,CA61CIqC,GAAyBr0D,CAAA,CAAO,kBAAP,CA71C7B,CAmlDIq1D,GAAiBr1D,CAAA,CAAO,UAAP,CAnlDrB,CAusDIs1D,GAAiBn2D,CAAAyJ,SAAA+W,cAAA,CAA8B,GAA9B,CAvsDrB,CAwsDI+1C,GAAY/mC,EAAA,CAAWxvB,CAAAgP,SAAAmgB,KAAX,CAxsDhB,CAysDIgiC,EAEJgF,GAAAhnC,KAAA,CAAsB,cAKtB,KAAIinC,GAA6C,OAA7CA,GAAiBD,EAAAzb,SAuRrBkc,GAAAxsC,QAAA,CAAyB,CAAC,WAAD,CAgHzBtO,GAAAsO,QAAA,CAA0B,CAAC,UAAD,CA4U1B,KAAI+vC,GAAa,EAAjB,CACIR,GAAc,GADlB,CAEIO,GAAY,GAsDhB7C,GAAAjtC,QAAA,CAAyB,CAAC,SAAD,CA6EzButC,GAAAvtC,QAAA,CAAuB,CAAC,SAAD,CAuTvB,KAAIm0C,GAAe,CACjBuF,KAAM1H,EAAA,CAAW,UAAX,CAAuB,CAAvB,CAA0B,CAA1B,CAA6B,CAAA,CAA7B,CAAoC,CAAA,CAApC,CADW,CAEf6hB,GAAI7hB,EAAA,CAAW,UAAX,CAAuB,CAAvB,CAA0B,CAA1B,CAA6B,CAAA,CAA7B,CAAmC,CAAA,CAAnC,CAFW,CAGd8hB,EAAG9hB,EAAA,CAAW,UAAX,CAAuB,CAAvB,CAA0B,CAA1B,CAA6B,CAAA,CAA7B,CAAoC,CAAA,CAApC,CAHW,CAIjB+hB,KAAM9hB,EAAA,CAAc,OAAd,CAJW,CAKhB+hB,IAAK/hB,EAAA,CAAc,OAAd,CAAuB,CAAA,CAAvB,CALW,CAMf0H,GAAI3H,EAAA,CAAW,OAAX,CAAoB,CAApB,CAAuB,CAAvB,CANW,CAOdiiB,EAAGjiB,EAAA,CAAW,OAAX,CAAoB,CAApB,CAAuB,CAAvB,CAPW,CAQjBkiB,KAAMjiB,EAAA,CAAc,OAAd,CAAuB,CAAA,CAAvB,CAA8B,CAAA,CAA9B,CARW,CASf2H,GAAI5H,EAAA,CAAW,MAAX,CAAmB,CAAnB,CATW;AAUd3sB,EAAG2sB,EAAA,CAAW,MAAX,CAAmB,CAAnB,CAVW,CAWf6H,GAAI7H,EAAA,CAAW,OAAX,CAAoB,CAApB,CAXW,CAYdmiB,EAAGniB,EAAA,CAAW,OAAX,CAAoB,CAApB,CAZW,CAafoiB,GAAIpiB,EAAA,CAAW,OAAX,CAAoB,CAApB,CAAwB,GAAxB,CAbW,CAcdv5D,EAAGu5D,EAAA,CAAW,OAAX,CAAoB,CAApB,CAAwB,GAAxB,CAdW,CAef+H,GAAI/H,EAAA,CAAW,SAAX,CAAsB,CAAtB,CAfW,CAgBd4B,EAAG5B,EAAA,CAAW,SAAX,CAAsB,CAAtB,CAhBW,CAiBfgI,GAAIhI,EAAA,CAAW,SAAX,CAAsB,CAAtB,CAjBW,CAkBd1V,EAAG0V,EAAA,CAAW,SAAX,CAAsB,CAAtB,CAlBW,CAqBhBkI,IAAKlI,EAAA,CAAW,cAAX,CAA2B,CAA3B,CArBW,CAsBjBqiB,KAAMpiB,EAAA,CAAc,KAAd,CAtBW,CAuBhBqiB,IAAKriB,EAAA,CAAc,KAAd,CAAqB,CAAA,CAArB,CAvBW,CAwBdl0D,EApCLw2E,QAAmB,CAACl0E,CAAD,CAAOuuD,CAAP,CAAgB,CACjC,MAAyB,GAAlB,CAAAvuD,CAAAy5D,SAAA,EAAA,CAAuBlL,CAAA4lB,MAAA,CAAc,CAAd,CAAvB,CAA0C5lB,CAAA4lB,MAAA,CAAc,CAAd,CADhB,CAYhB,CAyBdC,EAzELC,QAAuB,CAACr0E,CAAD,CAAOuuD,CAAP,CAAgB9sC,CAAhB,CAAwB,CACzC6yD,CAAAA,CAAQ,EAARA,CAAY7yD,CAMhB,OAHA8yD,EAGA,EAL0B,CAATA,EAACD,CAADC,CAAc,GAAdA,CAAoB,EAKrC,GAHchjB,EAAA,CAAUhkC,IAAA,CAAY,CAAP,CAAA+mD,CAAA,CAAW,OAAX,CAAqB,MAA1B,CAAA,CAAkCA,CAAlC,CAAyC,EAAzC,CAAV,CAAwD,CAAxD,CAGd,CAFc/iB,EAAA,CAAUhkC,IAAAojC,IAAA,CAAS2jB,CAAT,CAAgB,EAAhB,CAAV,CAA+B,CAA/B,CAEd,CAP6C,CAgD5B,CA0BfE,GAAIriB,EAAA,CAAW,CAAX,CA1BW,CA2BdsiB,EAAGtiB,EAAA,CAAW,CAAX,CA3BW,CA4BduiB,EAAGhiB,EA5BW,CA6BdiiB,GAAIjiB,EA7BU,CA8BdkiB,IAAKliB,EA9BS,CA+BdmiB,KAnCLC,QAAsB,CAAC90E,CAAD,CAAOuuD,CAAP,CAAgB,CACpC,MAA6B,EAAtB,EAAAvuD,CAAAqyD,YAAA,EAAA,CAA0B9D,CAAAwmB,SAAA,CAAiB,CAAjB,CAA1B,CAAgDxmB,CAAAwmB,SAAA,CAAiB,CAAjB,CADnB,CAInB,CAAnB;AAkCIlhB,GAAqB,+FAlCzB,CAmCID,GAAgB,SAkGpB/G,GAAAltC,QAAA,CAAqB,CAAC,SAAD,CAiIrB,KAAIstC,GAAkBhzD,EAAA,CAAQ0B,CAAR,CAAtB,CA2BIyxD,GAAkBnzD,EAAA,CAAQ6P,EAAR,CAqrBtBqjD,GAAAxtC,QAAA,CAAwB,CAAC,QAAD,CAwKxB,KAAIvV,GAAsBnQ,EAAA,CAAQ,CAChC6vB,SAAU,GADsB,CAEhClmB,QAASA,QAAQ,CAAClI,CAAD,CAAUN,CAAV,CAAgB,CAC/B,GAAKspB,CAAAtpB,CAAAspB,KAAL,EAAmBswD,CAAA55E,CAAA45E,UAAnB,CACE,MAAO,SAAQ,CAACrxE,CAAD,CAAQjI,CAAR,CAAiB,CAE9B,GAA0C,GAA1C,GAAIA,CAAA,CAAQ,CAAR,CAAA3C,SAAAkM,YAAA,EAAJ,CAAA,CAGA,IAAIyf,EAA+C,4BAAxC,GAAAtqB,EAAAhD,KAAA,CAAcsE,CAAAP,KAAA,CAAa,MAAb,CAAd,CAAA,CACA,YADA,CACe,MAC1BO,EAAA8J,GAAA,CAAW,OAAX,CAAoB,QAAQ,CAACuV,CAAD,CAAQ,CAE7Brf,CAAAN,KAAA,CAAaspB,CAAb,CAAL,EACE3J,CAAAo5B,eAAA,EAHgC,CAApC,CALA,CAF8B,CAFH,CAFD,CAAR,CAA1B,CAgXI3kC,GAA6B,EAGjC1Y,EAAA,CAAQ6jB,EAAR,CAAsB,QAAQ,CAAC8hB,CAAD,CAAW3T,CAAX,CAAqB,CAIjDmsD,QAASA,EAAa,CAACtxE,CAAD,CAAQjI,CAAR,CAAiBN,CAAjB,CAAuB,CAC3CuI,CAAA7I,OAAA,CAAaM,CAAA,CAAK85E,CAAL,CAAb;AAA+BC,QAAiC,CAACt9E,CAAD,CAAQ,CACtEuD,CAAA8+B,KAAA,CAAUpR,CAAV,CAAoB,CAAEjxB,CAAAA,CAAtB,CADsE,CAAxE,CAD2C,CAF7C,GAAiB,UAAjB,GAAI4kC,CAAJ,CAAA,CAQA,IAAIy4C,EAAahjD,EAAA,CAAmB,KAAnB,CAA2BpJ,CAA3B,CAAjB,CACI+K,EAASohD,CAEI,UAAjB,GAAIx4C,CAAJ,GACE5I,CADF,CACWA,QAAQ,CAAClwB,CAAD,CAAQjI,CAAR,CAAiBN,CAAjB,CAAuB,CAElCA,CAAA4S,QAAJ,GAAqB5S,CAAA,CAAK85E,CAAL,CAArB,EACED,CAAA,CAActxE,CAAd,CAAqBjI,CAArB,CAA8BN,CAA9B,CAHoC,CAD1C,CASAoU,GAAA,CAA2B0lE,CAA3B,CAAA,CAAyC,QAAQ,EAAG,CAClD,MAAO,CACLprD,SAAU,GADL,CAELD,SAAU,GAFL,CAGL/C,KAAM+M,CAHD,CAD2C,CApBpD,CAFiD,CAAnD,CAgCA/8B,EAAA,CAAQ6pC,EAAR,CAAsB,QAAQ,CAACy0C,CAAD,CAAWpzE,CAAX,CAAmB,CAC/CwN,EAAA,CAA2BxN,CAA3B,CAAA,CAAqC,QAAQ,EAAG,CAC9C,MAAO,CACL6nB,SAAU,GADL,CAEL/C,KAAMA,QAAQ,CAACnjB,CAAD,CAAQjI,CAAR,CAAiBN,CAAjB,CAAuB,CAGnC,GAAe,WAAf,GAAI4G,CAAJ,EAA2D,GAA3D,GAA8B5G,CAAAoT,UAAApQ,OAAA,CAAsB,CAAtB,CAA9B,GACMd,CADN,CACclC,CAAAoT,UAAAlR,MAAA,CAAqBujE,EAArB,CADd,EAEa,CACTzlE,CAAA8+B,KAAA,CAAU,WAAV,CAAuB,IAAIphC,MAAJ,CAAWwE,CAAA,CAAM,CAAN,CAAX,CAAqBA,CAAA,CAAM,CAAN,CAArB,CAAvB,CACA,OAFS,CAMbqG,CAAA7I,OAAA,CAAaM,CAAA,CAAK4G,CAAL,CAAb,CAA2BqzE,QAA+B,CAACx9E,CAAD,CAAQ,CAChEuD,CAAA8+B,KAAA,CAAUl4B,CAAV,CAAkBnK,CAAlB,CADgE,CAAlE,CAXmC,CAFhC,CADuC,CADD,CAAjD,CAwBAf,EAAA,CAAQ,CAAC,KAAD,CAAQ,QAAR,CAAkB,MAAlB,CAAR,CAAmC,QAAQ,CAACgyB,CAAD,CAAW,CACpD,IAAIosD,EAAahjD,EAAA,CAAmB,KAAnB,CAA2BpJ,CAA3B,CACjBtZ,GAAA,CAA2B0lE,CAA3B,CAAA;AAAyC,CAAC,MAAD,CAAS,QAAQ,CAAC5hE,CAAD,CAAO,CAC/D,MAAO,CACLuW,SAAU,EADL,CAEL/C,KAAMA,QAAQ,CAACnjB,CAAD,CAAQjI,CAAR,CAAiBN,CAAjB,CAAuB,CAAA,IAC/BqhC,EAAW3T,CADoB,CAE/BtmB,EAAOsmB,CAEM,OAAjB,GAAIA,CAAJ,EAC4C,4BAD5C,GACI1uB,EAAAhD,KAAA,CAAcsE,CAAAP,KAAA,CAAa,MAAb,CAAd,CADJ,GAEEqH,CAEA,CAFO,WAEP,CADApH,CAAA2yB,MAAA,CAAWvrB,CAAX,CACA,CADmB,YACnB,CAAAi6B,CAAA,CAAW,IAJb,CASArhC,EAAA8+B,KAAA,CAAUg7C,CAAV,CAAsB5hE,CAAAoa,mBAAA,CAAwBtyB,CAAA,CAAK85E,CAAL,CAAxB,CAAtB,CAEA95E,EAAAikC,SAAA,CAAc61C,CAAd,CAA0B,QAAQ,CAACr9E,CAAD,CAAQ,CACnCA,CAAL,EAOAuD,CAAA8+B,KAAA,CAAU13B,CAAV,CAAgB3K,CAAhB,CAOA,CAAIgoB,EAAJ,EAAY4c,CAAZ,EAAsB/gC,CAAAP,KAAA,CAAashC,CAAb,CAAuBrhC,CAAA,CAAKoH,CAAL,CAAvB,CAdtB,EACmB,MADnB,GACMsmB,CADN,EAEI1tB,CAAA8+B,KAAA,CAAU13B,CAAV,CAAgB,IAAhB,CAHoC,CAA1C,CAfmC,CAFhC,CADwD,CAAxB,CAFW,CAAtD,CAr1vBkB,KAi4vBd8zD,GAAe,CACjBgf,YAAax7E,CADI,CAEjBy7E,aAAct7E,EAAA,CAAQ,EAAR,CAFG,CAGjBu7E,gBAWFC,QAA8B,CAACC,CAAD,CAAUlzE,CAAV,CAAgB,CAC5CkzE,CAAA3f,MAAA,CAAgBvzD,CAD4B,CAd3B,CAIjBmzE,eAAgB77E,CAJC,CAKjBu9D,aAAcv9D,CALG,CAMjB87E,UAAW97E,CANM,CAOjB+7E,aAAc/7E,CAPG,CAQjBg8E,cAAeh8E,CARE,CASjBi8E,eAAgBj8E,CATC,CAmEnB47D,GAAA/1C,QAAA;AAAyB,CAAC,UAAD,CAAa,QAAb,CAAuB,QAAvB,CAAiC,UAAjC,CAA6C,cAA7C,CAsBzB+1C,GAAAp4C,UAAA,CAA2B,CAYzB04D,mBAAoBA,QAAQ,EAAG,CAC7Bl/E,CAAA,CAAQ,IAAA6+D,WAAR,CAAyB,QAAQ,CAAC+f,CAAD,CAAU,CACzCA,CAAAM,mBAAA,EADyC,CAA3C,CAD6B,CAZN,CA6BzBC,iBAAkBA,QAAQ,EAAG,CAC3Bn/E,CAAA,CAAQ,IAAA6+D,WAAR,CAAyB,QAAQ,CAAC+f,CAAD,CAAU,CACzCA,CAAAO,iBAAA,EADyC,CAA3C,CAD2B,CA7BJ,CAwDzBX,YAAaA,QAAQ,CAACI,CAAD,CAAU,CAG7B/uE,EAAA,CAAwB+uE,CAAA3f,MAAxB,CAAuC,OAAvC,CACA,KAAAJ,WAAAt5D,KAAA,CAAqBq5E,CAArB,CAEIA,EAAA3f,MAAJ,GACE,IAAA,CAAK2f,CAAA3f,MAAL,CADF,CACwB2f,CADxB,CAIAA,EAAArf,aAAA,CAAuB,IAVM,CAxDN,CAyFzBkf,aAAcA,QAAQ,EAAG,CACvB,MAAOhsE,GAAA,CAAY,IAAAosD,WAAZ,CADgB,CAzFA,CA8FzB6f,gBAAiBA,QAAQ,CAACE,CAAD,CAAUQ,CAAV,CAAmB,CAC1C,IAAIC,EAAUT,CAAA3f,MAEV,KAAA,CAAKogB,CAAL,CAAJ,GAAsBT,CAAtB,EACE,OAAO,IAAA,CAAKS,CAAL,CAET,KAAA,CAAKD,CAAL,CAAA,CAAgBR,CAChBA,EAAA3f,MAAA,CAAgBmgB,CAP0B,CA9FnB,CAwHzBP,eAAgBA,QAAQ,CAACD,CAAD,CAAU,CAC5BA,CAAA3f,MAAJ;AAAqB,IAAA,CAAK2f,CAAA3f,MAAL,CAArB,GAA6C2f,CAA7C,EACE,OAAO,IAAA,CAAKA,CAAA3f,MAAL,CAETj/D,EAAA,CAAQ,IAAAg/D,SAAR,CAAuB,QAAQ,CAACj+D,CAAD,CAAQ2K,CAAR,CAAc,CAE3C,IAAA60D,aAAA,CAAkB70D,CAAlB,CAAwB,IAAxB,CAA8BkzE,CAA9B,CAF2C,CAA7C,CAGG,IAHH,CAIA5+E,EAAA,CAAQ,IAAA8+D,OAAR,CAAqB,QAAQ,CAAC/9D,CAAD,CAAQ2K,CAAR,CAAc,CAEzC,IAAA60D,aAAA,CAAkB70D,CAAlB,CAAwB,IAAxB,CAA8BkzE,CAA9B,CAFyC,CAA3C,CAGG,IAHH,CAIA5+E,EAAA,CAAQ,IAAA++D,UAAR,CAAwB,QAAQ,CAACh+D,CAAD,CAAQ2K,CAAR,CAAc,CAE5C,IAAA60D,aAAA,CAAkB70D,CAAlB,CAAwB,IAAxB,CAA8BkzE,CAA9B,CAF4C,CAA9C,CAGG,IAHH,CAKA95E,GAAA,CAAY,IAAA+5D,WAAZ,CAA6B+f,CAA7B,CACAA,EAAArf,aAAA,CAAuBC,EAlBS,CAxHT,CAuJzBsf,UAAWA,QAAQ,EAAG,CACpB,IAAArf,UAAA75C,YAAA,CAA2B,IAAAsR,UAA3B,CAA2CooD,EAA3C,CACA,KAAA7f,UAAA95C,SAAA,CAAwB,IAAAuR,UAAxB,CAAwCqoD,EAAxC,CACA,KAAArgB,OAAA,CAAc,CAAA,CACd,KAAAE,UAAA,CAAiB,CAAA,CACjB,KAAAG,aAAAuf,UAAA,EALoB,CAvJG,CA+KzBC,aAAcA,QAAQ,EAAG,CACvB,IAAAtf,UAAA8R,SAAA,CAAwB,IAAAr6C,UAAxB;AAAwCooD,EAAxC,CAAwDC,EAAxD,CA7PcC,eA6Pd,CACA,KAAAtgB,OAAA,CAAc,CAAA,CACd,KAAAE,UAAA,CAAiB,CAAA,CACjB,KAAAC,WAAA,CAAkB,CAAA,CAClBr/D,EAAA,CAAQ,IAAA6+D,WAAR,CAAyB,QAAQ,CAAC+f,CAAD,CAAU,CACzCA,CAAAG,aAAA,EADyC,CAA3C,CALuB,CA/KA,CAsMzBU,cAAeA,QAAQ,EAAG,CACxBz/E,CAAA,CAAQ,IAAA6+D,WAAR,CAAyB,QAAQ,CAAC+f,CAAD,CAAU,CACzCA,CAAAa,cAAA,EADyC,CAA3C,CADwB,CAtMD,CAoNzBT,cAAeA,QAAQ,EAAG,CAExB,IADA,IAAIU,EAAW,IACf,CAAOA,CAAAngB,aAAP,EAAiCmgB,CAAAngB,aAAjC,GAA2DC,EAA3D,CAAA,CACEkgB,CAAA,CAAWA,CAAAngB,aAEbmgB,EAAAT,eAAA,EALwB,CApND,CA4NzBA,eAAgBA,QAAQ,EAAG,CACzB,IAAAxf,UAAA95C,SAAA,CAAwB,IAAAuR,UAAxB,CA1ScsoD,cA0Sd,CACA,KAAAngB,WAAA,CAAkB,CAAA,CAClBr/D,EAAA,CAAQ,IAAA6+D,WAAR,CAAyB,QAAQ,CAAC+f,CAAD,CAAU,CACrCA,CAAAK,eAAJ,EACEL,CAAAK,eAAA,EAFuC,CAA3C,CAHyB,CA5NF,CA+P3Bnf,GAAA,CAAqB,CACnBQ,MAAO1B,EADY,CAEnBv4D,IAAKA,QAAQ,CAACu6C,CAAD;AAASne,CAAT,CAAmB5zB,CAAnB,CAA+B,CAC1C,IAAI0b,EAAOq2B,CAAA,CAAOne,CAAP,CACNlY,EAAL,CAIiB,EAJjB,GAGcA,CAAAtlB,QAAAD,CAAa6J,CAAb7J,CAHd,EAKIulB,CAAAhlB,KAAA,CAAUsJ,CAAV,CALJ,CACE+xC,CAAA,CAAOne,CAAP,CADF,CACqB,CAAC5zB,CAAD,CAHqB,CAFzB,CAanBwxD,MAAOA,QAAQ,CAACzf,CAAD,CAASne,CAAT,CAAmB5zB,CAAnB,CAA+B,CAC5C,IAAI0b,EAAOq2B,CAAA,CAAOne,CAAP,CACNlY,EAAL,GAGAzlB,EAAA,CAAYylB,CAAZ,CAAkB1b,CAAlB,CACA,CAAoB,CAApB,GAAI0b,CAAA1qB,OAAJ,EACE,OAAO+gD,CAAA,CAAOne,CAAP,CALT,CAF4C,CAb3B,CAArB,CA8LA,KAAIk9C,GAAuBA,QAAQ,CAACC,CAAD,CAAW,CAC5C,MAAO,CAAC,UAAD,CAAa,QAAb,CAAuB,QAAQ,CAACtiE,CAAD,CAAWtB,CAAX,CAAmB,CAuEvD6jE,QAASA,EAAS,CAACp0C,CAAD,CAAa,CAC7B,MAAmB,EAAnB,GAAIA,CAAJ,CAESzvB,CAAA,CAAO,UAAP,CAAA0sB,OAFT,CAIO1sB,CAAA,CAAOyvB,CAAP,CAAA/C,OAJP,EAIoC1lC,CALP,CAF/B,MApEoB2Q,CAClBjI,KAAM,MADYiI,CAElBqf,SAAU4sD,CAAA,CAAW,KAAX,CAAmB,GAFXjsE,CAGlBwe,QAAS,CAAC,MAAD,CAAS,SAAT,CAHSxe,CAIlB9E,WAAY+vD,EAJMjrD,CAKlB7G,QAASgzE,QAAsB,CAACC,CAAD,CAAcz7E,CAAd,CAAoB,CAEjDy7E,CAAAp6D,SAAA,CAAqB25D,EAArB,CAAA35D,SAAA,CAA8Ck6C,EAA9C,CAEA,KAAImgB,EAAW17E,CAAAoH,KAAA,CAAY,MAAZ,CAAsBk0E,CAAA,EAAYt7E,CAAA4Q,OAAZ,CAA0B,QAA1B,CAAqC,CAAA,CAE1E,OAAO,CACL0oB,IAAKqiD,QAAsB,CAACpzE,CAAD,CAAQkzE,CAAR,CAAqBz7E,CAArB,CAA2B47E,CAA3B,CAAkC,CAC3D,IAAIrxE,EAAaqxE,CAAA,CAAM,CAAN,CAGjB,IAAM,EAAA,QAAA,EAAY57E,EAAZ,CAAN,CAAyB,CAOvB,IAAI67E,EAAuBA,QAAQ,CAACl8D,CAAD,CAAQ,CACzCpX,CAAAE,OAAA,CAAa,QAAQ,EAAG,CACtB8B,CAAAswE,iBAAA,EACAtwE;CAAAmwE,cAAA,EAFsB,CAAxB,CAKA/6D,EAAAo5B,eAAA,EANyC,CAS3C0iC,EAAA,CAAY,CAAZ,CAAAr8D,iBAAA,CAAgC,QAAhC,CAA0Cy8D,CAA1C,CAIAJ,EAAArxE,GAAA,CAAe,UAAf,CAA2B,QAAQ,EAAG,CACpC4O,CAAA,CAAS,QAAQ,EAAG,CAClByiE,CAAA,CAAY,CAAZ,CAAA1+D,oBAAA,CAAmC,QAAnC,CAA6C8+D,CAA7C,CADkB,CAApB,CAEG,CAFH,CAEM,CAAA,CAFN,CADoC,CAAtC,CApBuB,CA4BzB3B,CADqB0B,CAAA,CAAM,CAAN,CACrB1B,EADiC3vE,CAAA0wD,aACjCif,aAAA,CAA2B3vE,CAA3B,CAEA,KAAIuxE,EAASJ,CAAA,CAAWH,CAAA,CAAUhxE,CAAAowD,MAAV,CAAX,CAAyCj8D,CAElDg9E,EAAJ,GACEI,CAAA,CAAOvzE,CAAP,CAAcgC,CAAd,CACA,CAAAvK,CAAAikC,SAAA,CAAcy3C,CAAd,CAAwB,QAAQ,CAACr5C,CAAD,CAAW,CACrC93B,CAAAowD,MAAJ,GAAyBt4B,CAAzB,GACAy5C,CAAA,CAAOvzE,CAAP,CAAc/G,IAAAA,EAAd,CAGA,CAFA+I,CAAA0wD,aAAAmf,gBAAA,CAAwC7vE,CAAxC,CAAoD83B,CAApD,CAEA,CADAy5C,CACA,CADSP,CAAA,CAAUhxE,CAAAowD,MAAV,CACT,CAAAmhB,CAAA,CAAOvzE,CAAP,CAAcgC,CAAd,CAJA,CADyC,CAA3C,CAFF,CAUAkxE,EAAArxE,GAAA,CAAe,UAAf,CAA2B,QAAQ,EAAG,CACpCG,CAAA0wD,aAAAsf,eAAA,CAAuChwE,CAAvC,CACAuxE,EAAA,CAAOvzE,CAAP,CAAc/G,IAAAA,EAAd,CACAzD,EAAA,CAAOwM,CAAP,CAAmB2wD,EAAnB,CAHoC,CAAtC,CA9C2D,CADxD,CAN0C,CALjC7rD,CADmC,CAAlD,CADqC,CAA9C,CAkFIA,GAAgBgsE,EAAA,EAlFpB,CAmFIxqE,GAAkBwqE,EAAA,CAAqB,CAAA,CAArB,CAnFtB,CAuMIrd,GAAkB,+EAvMtB;AAoNI+d,GAAa,qHApNjB,CAsNIC,GAAe,4LAtNnB,CAuNItb,GAAgB,kDAvNpB,CAwNIub,GAAc,4BAxNlB,CAyNIC,GAAuB,gEAzN3B,CA0NIC,GAAc,oBA1NlB,CA2NIC,GAAe,mBA3NnB;AA4NIC,GAAc,yCA5NlB,CA+NIlf,GAA2Bp6D,CAAA,EAC/BrH,EAAA,CAAQ,CAAA,MAAA,CAAA,gBAAA,CAAA,OAAA,CAAA,MAAA,CAAA,MAAA,CAAR,CAA0D,QAAQ,CAAC0G,CAAD,CAAO,CACvE+6D,EAAA,CAAyB/6D,CAAzB,CAAA,CAAiC,CAAA,CADsC,CAAzE,CAIA,KAAIk6E,GAAY,CAgGd,KA6nCFC,QAAsB,CAACh0E,CAAD,CAAQjI,CAAR,CAAiBN,CAAjB,CAAuB07D,CAAvB,CAA6BpjD,CAA7B,CAAuClD,CAAvC,CAAiD,CACrEqnD,EAAA,CAAcl0D,CAAd,CAAqBjI,CAArB,CAA8BN,CAA9B,CAAoC07D,CAApC,CAA0CpjD,CAA1C,CAAoDlD,CAApD,CACAknD,GAAA,CAAqBZ,CAArB,CAFqE,CA7tCvD,CAsMd,KAAQkD,EAAA,CAAoB,MAApB,CAA4Bqd,EAA5B,CACDre,EAAA,CAAiBqe,EAAjB,CAA8B,CAAC,MAAD,CAAS,IAAT,CAAe,IAAf,CAA9B,CADC,CAED,YAFC,CAtMM,CAgTd,iBAAkBrd,EAAA,CAAoB,eAApB,CAAqCsd,EAArC,CACdte,EAAA,CAAiBse,EAAjB,CAAuC,yBAAA,MAAA,CAAA,GAAA,CAAvC,CADc,CAEd,yBAFc,CAhTJ,CA4Zd,KAAQtd,EAAA,CAAoB,MAApB,CAA4Byd,EAA5B,CACJze,EAAA,CAAiBye,EAAjB,CAA8B,CAAC,IAAD,CAAO,IAAP,CAAa,IAAb,CAAmB,KAAnB,CAA9B,CADI,CAEL,cAFK,CA5ZM,CAwgBd,KAAQzd,EAAA,CAAoB,MAApB,CAA4Bud,EAA5B,CAk1BVK,QAAmB,CAACC,CAAD,CAAUC,CAAV,CAAwB,CACzC,GAAIp/E,EAAA,CAAOm/E,CAAP,CAAJ,CACE,MAAOA,EAGT,IAAIphF,CAAA,CAASohF,CAAT,CAAJ,CAAuB,CACrBN,EAAAh6E,UAAA,CAAwB,CACxB,KAAIiE,EAAQ+1E,EAAAthE,KAAA,CAAiB4hE,CAAjB,CACZ;GAAIr2E,CAAJ,CAAW,CAAA,IACLwwD,EAAO,CAACxwD,CAAA,CAAM,CAAN,CADH,CAELu2E,EAAO,CAACv2E,CAAA,CAAM,CAAN,CAFH,CAILvB,EADA+3E,CACA/3E,CADQ,CAHH,CAKLg4E,EAAU,CALL,CAMLC,EAAe,CANV,CAOL9lB,EAAaL,EAAA,CAAuBC,CAAvB,CAPR,CAQLmmB,EAAuB,CAAvBA,EAAWJ,CAAXI,CAAkB,CAAlBA,CAEAL,EAAJ,GACEE,CAGA,CAHQF,CAAAre,SAAA,EAGR,CAFAx5D,CAEA,CAFU63E,CAAA33E,WAAA,EAEV,CADA83E,CACA,CADUH,CAAAle,WAAA,EACV,CAAAse,CAAA,CAAeJ,CAAAhe,gBAAA,EAJjB,CAOA,OAAO,KAAInhE,IAAJ,CAASq5D,CAAT,CAAe,CAAf,CAAkBI,CAAAI,QAAA,EAAlB,CAAyC2lB,CAAzC,CAAkDH,CAAlD,CAAyD/3E,CAAzD,CAAkEg4E,CAAlE,CAA2EC,CAA3E,CAjBE,CAHU,CAwBvB,MAAOniF,IA7BkC,CAl1BjC,CAAqD,UAArD,CAxgBM,CA+mBd,MAASikE,EAAA,CAAoB,OAApB,CAA6Bwd,EAA7B,CACNxe,EAAA,CAAiBwe,EAAjB,CAA+B,CAAC,MAAD,CAAS,IAAT,CAA/B,CADM,CAEN,SAFM,CA/mBK,CAuvBd,OA45BFY,QAAwB,CAACz0E,CAAD,CAAQjI,CAAR,CAAiBN,CAAjB,CAAuB07D,CAAvB,CAA6BpjD,CAA7B,CAAuClD,CAAvC,CAAiDY,CAAjD,CAA0D0B,CAA1D,CAAkE,CACxF4nD,EAAA,CAAgB/2D,CAAhB,CAAuBjI,CAAvB,CAAgCN,CAAhC,CAAsC07D,CAAtC,CAA4C,QAA5C,CACA+E,GAAA,CAAsB/E,CAAtB,CACAe,GAAA,CAAcl0D,CAAd,CAAqBjI,CAArB,CAA8BN,CAA9B,CAAoC07D,CAApC,CAA0CpjD,CAA1C,CAAoDlD,CAApD,CAEA,KAAI2qD,CAEJ,IAAIxlE,CAAA,CAAUyF,CAAA20D,IAAV,CAAJ,EAA2B30D,CAAA6/D,MAA3B,CAAuC,CACrC,IAAIC,EAAS9/D,CAAA20D,IAATmL,EAAqBpoD,CAAA,CAAO1X,CAAA6/D,MAAP,CAAA,CAAmBt3D,CAAnB,CACzBw3D,EAAA,CAAeY,EAAA,CAAmBb,CAAnB,CAEfpE,EAAAsE,YAAArL,IAAA,CAAuBsL,QAAQ,CAAC8E,CAAD,CAAa/D,CAAb,CAAwB,CACrD,MAAOtF,EAAAc,SAAA,CAAcwE,CAAd,CAAP,EAAmC/hE,CAAA,CAAY8gE,CAAZ,CAAnC,EAAgEiB,CAAhE,EAA6EjB,CADxB,CAIvD//D,EAAAikC,SAAA,CAAc,KAAd,CAAqB,QAAQ,CAACtgC,CAAD,CAAM,CAC7BA,CAAJ,GAAYm8D,CAAZ,GACEC,CAGA,CAHeY,EAAA,CAAmBh9D,CAAnB,CAGf;AAFAm8D,CAEA,CAFSn8D,CAET,CAAA+3D,CAAAwE,UAAA,EAJF,CADiC,CAAnC,CARqC,CAkBvC,GAAI3lE,CAAA,CAAUyF,CAAAg+B,IAAV,CAAJ,EAA2Bh+B,CAAAmgE,MAA3B,CAAuC,CACrC,IAAIC,EAASpgE,CAAAg+B,IAAToiC,EAAqB1oD,CAAA,CAAO1X,CAAAmgE,MAAP,CAAA,CAAmB53D,CAAnB,CAAzB,CACI83D,EAAeM,EAAA,CAAmBP,CAAnB,CAEnB1E,EAAAsE,YAAAhiC,IAAA,CAAuBsiC,QAAQ,CAACyE,CAAD,CAAa/D,CAAb,CAAwB,CACrD,MAAOtF,EAAAc,SAAA,CAAcwE,CAAd,CAAP,EAAmC/hE,CAAA,CAAYohE,CAAZ,CAAnC,EAAgEW,CAAhE,EAA6EX,CADxB,CAIvDrgE,EAAAikC,SAAA,CAAc,KAAd,CAAqB,QAAQ,CAACtgC,CAAD,CAAM,CAC7BA,CAAJ,GAAYy8D,CAAZ,GACEC,CAGA,CAHeM,EAAA,CAAmBh9D,CAAnB,CAGf,CAFAy8D,CAEA,CAFSz8D,CAET,CAAA+3D,CAAAwE,UAAA,EAJF,CADiC,CAAnC,CARqC,CAkBvC,GAAI3lE,CAAA,CAAUyF,CAAAkhE,KAAV,CAAJ,EAA4BlhE,CAAAi9E,OAA5B,CAAyC,CACvC,IAAIC,EAAUl9E,CAAAkhE,KAAVgc,EAAuBxlE,CAAA,CAAO1X,CAAAi9E,OAAP,CAAA,CAAoB10E,CAApB,CAA3B,CACI40E,EAAgBxc,EAAA,CAAmBuc,CAAnB,CAEpBxhB,EAAAsE,YAAAkB,KAAA,CAAwBkc,QAAQ,CAACrY,CAAD,CAAa/D,CAAb,CAAwB,CACtD,MAAOtF,EAAAc,SAAA,CAAcwE,CAAd,CAAP,EAAmC/hE,CAAA,CAAYk+E,CAAZ,CAAnC,EACEpc,EAAA,CAAeC,CAAf,CAA0BjB,CAA1B,EAA0C,CAA1C,CAA6Cod,CAA7C,CAFoD,CAKxDn9E,EAAAikC,SAAA,CAAc,MAAd,CAAsB,QAAQ,CAACtgC,CAAD,CAAM,CAE9BA,CAAJ,GAAYu5E,CAAZ,GACEC,CAEA,CAFgBxc,EAAA,CAAmBh9D,CAAnB,CAEhB,CADAu5E,CACA,CADUv5E,CACV,CAAA+3D,CAAAwE,UAAA,EAHF,CAFkC,CAApC,CATuC,CA3C+C,CAnpD1E,CA01Bd,IA4gCFmd,QAAqB,CAAC90E,CAAD,CAAQjI,CAAR,CAAiBN,CAAjB,CAAuB07D,CAAvB,CAA6BpjD,CAA7B,CAAuClD,CAAvC,CAAiD,CAGpEqnD,EAAA,CAAcl0D,CAAd,CAAqBjI,CAArB,CAA8BN,CAA9B,CAAoC07D,CAApC,CAA0CpjD,CAA1C,CAAoDlD,CAApD,CACAknD,GAAA,CAAqBZ,CAArB,CAEAA,EAAAsE,YAAAx3C,IAAA,CAAuB80D,QAAQ,CAACvY,CAAD,CAAa/D,CAAb,CAAwB,CACrD,IAAIvkE;AAAQsoE,CAARtoE,EAAsBukE,CAC1B,OAAOtF,EAAAc,SAAA,CAAc//D,CAAd,CAAP,EAA+Bs/E,EAAAl8E,KAAA,CAAgBpD,CAAhB,CAFsB,CANa,CAt2DtD,CA87Bd,MAo7BF8gF,QAAuB,CAACh1E,CAAD,CAAQjI,CAAR,CAAiBN,CAAjB,CAAuB07D,CAAvB,CAA6BpjD,CAA7B,CAAuClD,CAAvC,CAAiD,CAGtEqnD,EAAA,CAAcl0D,CAAd,CAAqBjI,CAArB,CAA8BN,CAA9B,CAAoC07D,CAApC,CAA0CpjD,CAA1C,CAAoDlD,CAApD,CACAknD,GAAA,CAAqBZ,CAArB,CAEAA,EAAAsE,YAAAwd,MAAA,CAAyBC,QAAQ,CAAC1Y,CAAD,CAAa/D,CAAb,CAAwB,CACvD,IAAIvkE,EAAQsoE,CAARtoE,EAAsBukE,CAC1B,OAAOtF,EAAAc,SAAA,CAAc//D,CAAd,CAAP,EAA+Bu/E,EAAAn8E,KAAA,CAAkBpD,CAAlB,CAFwB,CANa,CAl3DxD,CA8hCd,MAg2BFihF,QAAuB,CAACn1E,CAAD,CAAQjI,CAAR,CAAiBN,CAAjB,CAAuB07D,CAAvB,CAA6B,CAClD,IAAIiiB,EAAS,CAAC39E,CAAA48D,OAAV+gB,EAA+C,OAA/CA,GAAyBliE,CAAA,CAAKzb,CAAA48D,OAAL,CAEzB39D,EAAA,CAAYe,CAAAoH,KAAZ,CAAJ,EACE9G,CAAAN,KAAA,CAAa,MAAb,CAtk0BK,EAAErD,EAsk0BP,CAcF2D,EAAA8J,GAAA,CAAW,QAAX,CAXese,QAAQ,CAACi0C,CAAD,CAAK,CAC1B,IAAIlgE,CACA6D,EAAA,CAAQ,CAAR,CAAAs9E,QAAJ,GACEnhF,CAIA,CAJQuD,CAAAvD,MAIR,CAHIkhF,CAGJ,GAFElhF,CAEF,CAFUgf,CAAA,CAAKhf,CAAL,CAEV,EAAAi/D,CAAAqB,cAAA,CAAmBtgE,CAAnB,CAA0BkgE,CAA1B,EAAgCA,CAAAv6D,KAAhC,CALF,CAF0B,CAW5B,CAEAs5D,EAAAgC,QAAA,CAAeC,QAAQ,EAAG,CACxB,IAAIlhE,EAAQuD,CAAAvD,MACRkhF,EAAJ,GACElhF,CADF,CACUgf,CAAA,CAAKhf,CAAL,CADV,CAGA6D,EAAA,CAAQ,CAAR,CAAAs9E,QAAA,CAAsBnhF,CAAtB,GAAgCi/D,CAAAmB,WALR,CAQ1B78D,EAAAikC,SAAA,CAAc,OAAd,CAAuBy3B,CAAAgC,QAAvB,CA5BkD,CA93DpC,CAqpCd,MA+jBFmgB,QAAuB,CAACt1E,CAAD,CAAQjI,CAAR,CAAiBN,CAAjB,CAAuB07D,CAAvB,CAA6BpjD,CAA7B,CAAuClD,CAAvC,CAAiD,CAwEtE0oE,QAASA,EAA0B,CAACC,CAAD;AAAeC,CAAf,CAAyB,CAI1D19E,CAAAN,KAAA,CAAa+9E,CAAb,CAA2B/9E,CAAA,CAAK+9E,CAAL,CAA3B,CACA,KAAIx2D,EAASvnB,CAAA,CAAK+9E,CAAL,CACb/9E,EAAAikC,SAAA,CAAc85C,CAAd,CAA4BE,QAAwB,CAACt6E,CAAD,CAAM,CACpDA,CAAJ,GAAY4jB,CAAZ,GACEA,CACA,CADS5jB,CACT,CAAAq6E,CAAA,CAASr6E,CAAT,CAFF,CADwD,CAA1D,CAN0D,CAc5Du6E,QAASA,EAAS,CAACv6E,CAAD,CAAM,CACtBm8D,CAAA,CAASa,EAAA,CAAmBh9D,CAAnB,CAELe,EAAA,CAAYg3D,CAAA+H,YAAZ,CAAJ,GAII0a,CAAJ,EACMC,CAMJ,CANY99E,CAAAqD,IAAA,EAMZ,CAJIm8D,CAIJ,CAJase,CAIb,GAHEA,CACA,CADQte,CACR,CAAAx/D,CAAAqD,IAAA,CAAYy6E,CAAZ,CAEF,EAAA1iB,CAAAqB,cAAA,CAAmBqhB,CAAnB,CAPF,EAUE1iB,CAAAwE,UAAA,EAdF,CAHsB,CAqBxBme,QAASA,EAAS,CAAC16E,CAAD,CAAM,CACtBy8D,CAAA,CAASO,EAAA,CAAmBh9D,CAAnB,CAELe,EAAA,CAAYg3D,CAAA+H,YAAZ,CAAJ,GAII0a,CAAJ,EACMC,CAOJ,CAPY99E,CAAAqD,IAAA,EAOZ,CALIy8D,CAKJ,CALage,CAKb,GAJE99E,CAAAqD,IAAA,CAAYy8D,CAAZ,CAEA,CAAAge,CAAA,CAAQhe,CAAA,CAASN,CAAT,CAAkBA,CAAlB,CAA2BM,CAErC,EAAA1E,CAAAqB,cAAA,CAAmBqhB,CAAnB,CARF,EAWE1iB,CAAAwE,UAAA,EAfF,CAHsB,CAsBxBoe,QAASA,EAAU,CAAC36E,CAAD,CAAM,CACvBu5E,CAAA,CAAUvc,EAAA,CAAmBh9D,CAAnB,CAENe,EAAA,CAAYg3D,CAAA+H,YAAZ,CAAJ,GAKK0a,CAAL,CAGWziB,CAAAmB,WAHX,GAG+Bv8D,CAAAqD,IAAA,EAH/B,EAIE+3D,CAAAqB,cAAA,CAAmBz8D,CAAAqD,IAAA,EAAnB,CAJF,CAEE+3D,CAAAwE,UAAA,EAPF,CAHuB,CAhIzBZ,EAAA,CAAgB/2D,CAAhB,CAAuBjI,CAAvB,CAAgCN,CAAhC,CAAsC07D,CAAtC,CAA4C,OAA5C,CACA+E,GAAA,CAAsB/E,CAAtB,CACAe,GAAA,CAAcl0D,CAAd,CAAqBjI,CAArB,CAA8BN,CAA9B,CAAoC07D,CAApC,CAA0CpjD,CAA1C,CAAoDlD,CAApD,CAHsE,KAKlE+oE,EAAgBziB,CAAAoB,sBAAhBqhB,EAAkE,OAAlEA,GAA8C79E,CAAA,CAAQ,CAAR,CAAA8B,KALoB,CAMlE09D,EAASqe,CAAA;AAAgB,CAAhB,CAAoB38E,IAAAA,EANqC,CAOlE4+D,EAAS+d,CAAA,CAAgB,GAAhB,CAAsB38E,IAAAA,EAPmC,CAQlE07E,EAAUiB,CAAA,CAAgB,CAAhB,CAAoB38E,IAAAA,EARoC,CASlE67D,EAAW/8D,CAAA,CAAQ,CAAR,CAAA+8D,SACXkhB,EAAAA,CAAahkF,CAAA,CAAUyF,CAAA20D,IAAV,CACb6pB,EAAAA,CAAajkF,CAAA,CAAUyF,CAAAg+B,IAAV,CACbygD,EAAAA,CAAclkF,CAAA,CAAUyF,CAAAkhE,KAAV,CAElB,KAAIwd,EAAiBhjB,CAAAgC,QAErBhC,EAAAgC,QAAA,CAAeygB,CAAA,EAAiB5jF,CAAA,CAAU8iE,CAAAshB,eAAV,CAAjB,EAAuDpkF,CAAA,CAAU8iE,CAAAuhB,cAAV,CAAvD,CAGbC,QAAoB,EAAG,CACrBH,CAAA,EACAhjB,EAAAqB,cAAA,CAAmBz8D,CAAAqD,IAAA,EAAnB,CAFqB,CAHV,CAOb+6E,CAEEH,EAAJ,GACEze,CAUA,CAVSa,EAAA,CAAmB3gE,CAAA20D,IAAnB,CAUT,CARA+G,CAAAsE,YAAArL,IAQA,CARuBwpB,CAAA,CAErBW,QAAyB,EAAG,CAAE,MAAO,CAAA,CAAT,CAFP,CAIrBC,QAAqB,CAACha,CAAD,CAAa/D,CAAb,CAAwB,CAC3C,MAAOtF,EAAAc,SAAA,CAAcwE,CAAd,CAAP,EAAmC/hE,CAAA,CAAY6gE,CAAZ,CAAnC,EAA0DkB,CAA1D,EAAuElB,CAD5B,CAI/C,CAAAge,CAAA,CAA2B,KAA3B,CAAkCI,CAAlC,CAXF,CAcIM,EAAJ,GACEpe,CAUA,CAVSO,EAAA,CAAmB3gE,CAAAg+B,IAAnB,CAUT,CARA09B,CAAAsE,YAAAhiC,IAQA,CARuBmgD,CAAA,CAErBa,QAAyB,EAAG,CAAE,MAAO,CAAA,CAAT,CAFP,CAIrBC,QAAqB,CAACla,CAAD,CAAa/D,CAAb,CAAwB,CAC3C,MAAOtF,EAAAc,SAAA,CAAcwE,CAAd,CAAP,EAAmC/hE,CAAA,CAAYmhE,CAAZ,CAAnC,EAA0DY,CAA1D,EAAuEZ,CAD5B,CAI/C,CAAA0d,CAAA,CAA2B,KAA3B,CAAkCO,CAAlC,CAXF,CAcII,EAAJ,GACEvB,CAeA,CAfUvc,EAAA,CAAmB3gE,CAAAkhE,KAAnB,CAeV,CAbAxF,CAAAsE,YAAAkB,KAaA,CAbwBid,CAAA,CACtBe,QAA4B,EAAG,CAI7B,MAAO,CAAC7hB,CAAA8hB,aAJqB,CADT;AAQtBC,QAAsB,CAACra,CAAD,CAAa/D,CAAb,CAAwB,CAC5C,MAAOtF,EAAAc,SAAA,CAAcwE,CAAd,CAAP,EAAmC/hE,CAAA,CAAYi+E,CAAZ,CAAnC,EACOnc,EAAA,CAAeC,CAAf,CAA0BlB,CAA1B,EAAoC,CAApC,CAAuCod,CAAvC,CAFqC,CAKhD,CAAAY,CAAA,CAA2B,MAA3B,CAAmCQ,CAAnC,CAhBF,CArDsE,CAptDxD,CA8sCd,SA4tBFe,QAA0B,CAAC92E,CAAD,CAAQjI,CAAR,CAAiBN,CAAjB,CAAuB07D,CAAvB,CAA6BpjD,CAA7B,CAAuClD,CAAvC,CAAiDY,CAAjD,CAA0D0B,CAA1D,CAAkE,CAC1F,IAAI4nE,EAAY1d,EAAA,CAAkBlqD,CAAlB,CAA0BnP,CAA1B,CAAiC,aAAjC,CAAgDvI,CAAAu/E,YAAhD,CAAkE,CAAA,CAAlE,CAAhB,CACIC,EAAa5d,EAAA,CAAkBlqD,CAAlB,CAA0BnP,CAA1B,CAAiC,cAAjC,CAAiDvI,CAAAy/E,aAAjD,CAAoE,CAAA,CAApE,CAMjBn/E,EAAA8J,GAAA,CAAW,QAAX,CAJese,QAAQ,CAACi0C,CAAD,CAAK,CAC1BjB,CAAAqB,cAAA,CAAmBz8D,CAAA,CAAQ,CAAR,CAAAs9E,QAAnB,CAAuCjhB,CAAvC,EAA6CA,CAAAv6D,KAA7C,CAD0B,CAI5B,CAEAs5D,EAAAgC,QAAA,CAAeC,QAAQ,EAAG,CACxBr9D,CAAA,CAAQ,CAAR,CAAAs9E,QAAA,CAAqBliB,CAAAmB,WADG,CAO1BnB,EAAAc,SAAA,CAAgBkjB,QAAQ,CAACjjF,CAAD,CAAQ,CAC9B,MAAiB,CAAA,CAAjB,GAAOA,CADuB,CAIhCi/D,EAAAa,YAAAt7D,KAAA,CAAsB,QAAQ,CAACxE,CAAD,CAAQ,CACpC,MAAO+F,GAAA,CAAO/F,CAAP,CAAc6iF,CAAd,CAD6B,CAAtC,CAIA5jB,EAAA8D,SAAAv+D,KAAA,CAAmB,QAAQ,CAACxE,CAAD,CAAQ,CACjC,MAAOA,EAAA,CAAQ6iF,CAAR,CAAoBE,CADM,CAAnC,CAzB0F,CA16D5E,CAgtCd,OAAU9gF,CAhtCI,CAitCd,OAAUA,CAjtCI,CAktCd,OAAUA,CAltCI,CAmtCd,MAASA,CAntCK,CAotCd,KAAQA,CAptCM,CAAhB,CAooEIwQ,GAAiB,CAAC,UAAD,CAAa,UAAb;AAAyB,SAAzB,CAAoC,QAApC,CACjB,QAAQ,CAACkG,CAAD,CAAWkD,CAAX,CAAqBtC,CAArB,CAA8B0B,CAA9B,CAAsC,CAChD,MAAO,CACLgX,SAAU,GADL,CAELb,QAAS,CAAC,UAAD,CAFJ,CAGLnC,KAAM,CACJ4N,IAAKA,QAAQ,CAAC/wB,CAAD,CAAQjI,CAAR,CAAiBN,CAAjB,CAAuB47E,CAAvB,CAA8B,CACrCA,CAAA,CAAM,CAAN,CAAJ,EACE,CAACU,EAAA,CAAU/7E,CAAA,CAAUP,CAAAoC,KAAV,CAAV,CAAD,EAAoCk6E,EAAAl8C,KAApC,EAAoD73B,CAApD,CAA2DjI,CAA3D,CAAoEN,CAApE,CAA0E47E,CAAA,CAAM,CAAN,CAA1E,CAAoFtjE,CAApF,CACoDlD,CADpD,CAC8DY,CAD9D,CACuE0B,CADvE,CAFuC,CADvC,CAHD,CADyC,CAD7B,CApoErB,CAqpEIvD,GAAmCA,QAAQ,EAAG,CAChD,IAAIwrE,EAAgB,CAClBC,aAAc,CAAA,CADI,CAElBC,WAAY,CAAA,CAFM,CAGlBt2E,IAAKA,QAAQ,EAAG,CACd,MAAO,KAAAzC,aAAA,CAAkB,OAAlB,CAAP,EAAqC,EADvB,CAHE,CAMlB/E,IAAKA,QAAQ,CAAC4B,CAAD,CAAM,CACjB,IAAAia,aAAA,CAAkB,OAAlB,CAA2Bja,CAA3B,CADiB,CAND,CAWpB,OAAO,CACL+qB,SAAU,GADL,CAELD,SAAU,GAFL,CAGLjmB,QAASA,QAAQ,CAACk5B,CAAD,CAAI1hC,CAAJ,CAAU,CACzB,GAA6B,QAA7B,GAAIO,CAAA,CAAUP,CAAAoC,KAAV,CAAJ,CAIA,MAAO,CACLk3B,IAAKA,QAAQ,CAAC/wB,CAAD,CAAQjI,CAAR,CAAiBN,CAAjB,CAAuB47E,CAAvB,CAA8B,CACrC97E,CAAAA,CAAOQ,CAAA,CAAQ,CAAR,CAIPR,EAAAye,WAAJ,EACEze,CAAAye,WAAA+qD,aAAA,CAA6BxpE,CAA7B,CAAmCA,CAAAmM,YAAnC,CAKEzQ,OAAAskF,eAAJ;AACEtkF,MAAAskF,eAAA,CAAsBhgF,CAAtB,CAA4B,OAA5B,CAAqC6/E,CAArC,CAZuC,CADtC,CALkB,CAHtB,CAZyC,CArpElD,CAgsEII,GAAwB,oBAhsE5B,CA0vEIhsE,GAAmBA,QAAQ,EAAG,CAOhCisE,QAASA,EAAkB,CAAC1/E,CAAD,CAAUN,CAAV,CAAgBvD,CAAhB,CAAuB,CAGhD,IAAIulC,EAAYznC,CAAA,CAAUkC,CAAV,CAAA,CAAmBA,CAAnB,CAAqC,CAAV,GAACgoB,EAAD,CAAe,EAAf,CAAoB,IAC/DnkB,EAAAP,KAAA,CAAa,OAAb,CAAsBiiC,CAAtB,CACAhiC,EAAA8+B,KAAA,CAAU,OAAV,CAAmBriC,CAAnB,CALgD,CAQlD,MAAO,CACLiyB,SAAU,GADL,CAELD,SAAU,GAFL,CAGLjmB,QAASA,QAAQ,CAACwmD,CAAD,CAAMixB,CAAN,CAAe,CAC9B,MAAIF,GAAAlgF,KAAA,CAA2BogF,CAAAnsE,QAA3B,CAAJ,CACSosE,QAA4B,CAAC33E,CAAD,CAAQ0e,CAAR,CAAajnB,CAAb,CAAmB,CAChDvD,CAAAA,CAAQ8L,CAAAmhD,MAAA,CAAY1pD,CAAA8T,QAAZ,CACZksE,EAAA,CAAmB/4D,CAAnB,CAAwBjnB,CAAxB,CAA8BvD,CAA9B,CAFoD,CADxD,CAMS0jF,QAAoB,CAAC53E,CAAD,CAAQ0e,CAAR,CAAajnB,CAAb,CAAmB,CAC5CuI,CAAA7I,OAAA,CAAaM,CAAA8T,QAAb,CAA2BssE,QAAyB,CAAC3jF,CAAD,CAAQ,CAC1DujF,CAAA,CAAmB/4D,CAAnB,CAAwBjnB,CAAxB,CAA8BvD,CAA9B,CAD0D,CAA5D,CAD4C,CAPlB,CAH3B,CAfyB,CA1vElC,CAg1EIoT,GAAkB,CAAC,UAAD,CAAa,QAAQ,CAACwwE,CAAD,CAAW,CACpD,MAAO,CACL3xD,SAAU,IADL,CAELlmB,QAAS83E,QAAsB,CAACC,CAAD,CAAkB,CAC/CF,CAAA3/C,kBAAA,CAA2B6/C,CAA3B,CACA,OAAOC,SAAmB,CAACj4E,CAAD,CAAQjI,CAAR,CAAiBN,CAAjB,CAAuB,CAC/CqgF,CAAAz/C,iBAAA,CAA0BtgC,CAA1B,CAAmCN,CAAA4P,OAAnC,CACAtP,EAAA,CAAUA,CAAA,CAAQ,CAAR,CACViI;CAAA7I,OAAA,CAAaM,CAAA4P,OAAb,CAA0B6wE,QAA0B,CAAChkF,CAAD,CAAQ,CAC1D6D,CAAAgb,YAAA,CAAsBtX,EAAA,CAAUvH,CAAV,CADoC,CAA5D,CAH+C,CAFF,CAF5C,CAD6C,CAAhC,CAh1EtB,CAo5EIwT,GAA0B,CAAC,cAAD,CAAiB,UAAjB,CAA6B,QAAQ,CAACmG,CAAD,CAAeiqE,CAAf,CAAyB,CAC1F,MAAO,CACL73E,QAASk4E,QAA8B,CAACH,CAAD,CAAkB,CACvDF,CAAA3/C,kBAAA,CAA2B6/C,CAA3B,CACA,OAAOI,SAA2B,CAACp4E,CAAD,CAAQjI,CAAR,CAAiBN,CAAjB,CAAuB,CACnDqgC,CAAAA,CAAgBjqB,CAAA,CAAa9V,CAAAN,KAAA,CAAaA,CAAA2yB,MAAA3iB,eAAb,CAAb,CACpBqwE,EAAAz/C,iBAAA,CAA0BtgC,CAA1B,CAAmC+/B,CAAAQ,YAAnC,CACAvgC,EAAA,CAAUA,CAAA,CAAQ,CAAR,CACVN,EAAAikC,SAAA,CAAc,gBAAd,CAAgC,QAAQ,CAACxnC,CAAD,CAAQ,CAC9C6D,CAAAgb,YAAA,CAAsBrc,CAAA,CAAYxC,CAAZ,CAAA,CAAqB,EAArB,CAA0BA,CADF,CAAhD,CAJuD,CAFF,CADpD,CADmF,CAA9D,CAp5E9B,CAo9EIsT,GAAsB,CAAC,MAAD,CAAS,QAAT,CAAmB,UAAnB,CAA+B,QAAQ,CAACmI,CAAD,CAAOR,CAAP,CAAe2oE,CAAf,CAAyB,CACxF,MAAO,CACL3xD,SAAU,GADL,CAELlmB,QAASo4E,QAA0B,CAAC9xD,CAAD,CAAWC,CAAX,CAAmB,CACpD,IAAI8xD,EAAmBnpE,CAAA,CAAOqX,CAAAjf,WAAP,CAAvB,CACIgxE,EAAkBppE,CAAA,CAAOqX,CAAAjf,WAAP,CAA0B+xB,QAAmB,CAACl+B,CAAD,CAAM,CAEvE,MAAOuU,EAAA1a,QAAA,CAAamG,CAAb,CAFgE,CAAnD,CAItB08E,EAAA3/C,kBAAA,CAA2B5R,CAA3B,CAEA;MAAOiyD,SAAuB,CAACx4E,CAAD,CAAQjI,CAAR,CAAiBN,CAAjB,CAAuB,CACnDqgF,CAAAz/C,iBAAA,CAA0BtgC,CAA1B,CAAmCN,CAAA8P,WAAnC,CAEAvH,EAAA7I,OAAA,CAAaohF,CAAb,CAA8BE,QAA8B,EAAG,CAE7D,IAAIvkF,EAAQokF,CAAA,CAAiBt4E,CAAjB,CACZjI,EAAAmF,KAAA,CAAayS,CAAA+oE,eAAA,CAAoBxkF,CAApB,CAAb,EAA2C,EAA3C,CAH6D,CAA/D,CAHmD,CARD,CAFjD,CADiF,CAAhE,CAp9E1B,CAgjFIwW,GAAoBpU,EAAA,CAAQ,CAC9B6vB,SAAU,GADoB,CAE9Bb,QAAS,SAFqB,CAG9BnC,KAAMA,QAAQ,CAACnjB,CAAD,CAAQjI,CAAR,CAAiBN,CAAjB,CAAuB07D,CAAvB,CAA6B,CACzCA,CAAAkI,qBAAA3iE,KAAA,CAA+B,QAAQ,EAAG,CACxCsH,CAAAmhD,MAAA,CAAY1pD,CAAAgT,SAAZ,CADwC,CAA1C,CADyC,CAHb,CAAR,CAhjFxB,CAk4FI7C,GAAmB2xD,EAAA,CAAe,EAAf,CAAmB,CAAA,CAAnB,CAl4FvB,CAg/FIvxD,GAAsBuxD,EAAA,CAAe,KAAf,CAAsB,CAAtB,CAh/F1B,CA8lGIzxD,GAAuByxD,EAAA,CAAe,MAAf,CAAuB,CAAvB,CA9lG3B,CAopGIrxD,GAAmB4pD,EAAA,CAAY,CACjC7xD,QAASA,QAAQ,CAAClI,CAAD,CAAUN,CAAV,CAAgB,CAC/BA,CAAA8+B,KAAA,CAAU,SAAV,CAAqBt9B,IAAAA,EAArB,CACAlB,EAAAghB,YAAA,CAAoB,UAApB,CAF+B,CADA,CAAZ,CAppGvB,CA23GI3Q,GAAwB,CAAC,QAAQ,EAAG,CACtC,MAAO,CACL+d,SAAU,GADL,CAELnmB,MAAO,CAAA,CAFF,CAGLgC,WAAY,GAHP,CAILkkB,SAAU,GAJL,CAD+B,CAAZ,CA33G5B,CA0nHIpa,GAAoB,EA1nHxB,CA+nHI6sE,GAAmB,CACrB,KAAQ,CAAA,CADa,CAErB,MAAS,CAAA,CAFY,CAIvBxlF,EAAA,CACE,6IAAA,MAAA,CAAA,GAAA,CADF;AAEE,QAAQ,CAAC8tD,CAAD,CAAY,CAClB,IAAIz8B,EAAgB+J,EAAA,CAAmB,KAAnB,CAA2B0yB,CAA3B,CACpBn1C,GAAA,CAAkB0Y,CAAlB,CAAA,CAAmC,CAAC,QAAD,CAAW,YAAX,CAAyB,mBAAzB,CAA8C,QAAQ,CAACrV,CAAD,CAASE,CAAT,CAAqB9B,CAArB,CAAwC,CAC/H,MAAO+hB,GAAA,CAAqBngB,CAArB,CAA6BE,CAA7B,CAAyC9B,CAAzC,CAA4DiX,CAA5D,CAA2Ey8B,CAA3E,CAAsF03B,EAAA,CAAiB13B,CAAjB,CAAtF,CADwH,CAA9F,CAFjB,CAFtB,CAgiBA,KAAIv4C,GAAgB,CAAC,UAAD,CAAa,UAAb,CAAyB,QAAQ,CAACuD,CAAD,CAAW6rE,CAAX,CAAqB,CACxE,MAAO,CACL1hD,aAAc,CAAA,CADT,CAELpP,WAAY,SAFP,CAGLd,SAAU,GAHL,CAILsH,SAAU,CAAA,CAJL,CAKLrH,SAAU,GALL,CAML+N,MAAO,CAAA,CANF,CAOL/Q,KAAMA,QAAQ,CAAC2S,CAAD,CAASrP,CAAT,CAAmB2D,CAAnB,CAA0B+oC,CAA1B,CAAgCp9B,CAAhC,CAA6C,CAAA,IACnDpwB,CADmD,CAC5C6mB,CAD4C,CAChCosD,CACvB9iD,EAAA3+B,OAAA,CAAcizB,CAAA3hB,KAAd,CAA0BowE,QAAwB,CAAC3kF,CAAD,CAAQ,CAEpDA,CAAJ,CACOs4B,CADP,EAEIuJ,CAAA,CAAY,QAAQ,CAACxgC,CAAD,CAAQygC,CAAR,CAAkB,CACpCxJ,CAAA,CAAawJ,CACbzgC,EAAA,CAAMA,CAAAvC,OAAA,EAAN,CAAA,CAAwB8kF,CAAAzjD,gBAAA,CAAyB,UAAzB,CAAqCjK,CAAA3hB,KAArC,CAIxB9C,EAAA,CAAQ,CACNpQ,MAAOA,CADD,CAGR0W,EAAAq4D,MAAA,CAAe/uE,CAAf,CAAsBkxB,CAAAzwB,OAAA,EAAtB,CAAyCywB,CAAzC,CAToC,CAAtC,CAFJ,EAeMmyD,CAQJ,GAPEA,CAAA30D,OAAA,EACA,CAAA20D,CAAA,CAAmB,IAMrB,EAJIpsD,CAIJ,GAHEA,CAAA/pB,SAAA,EACA,CAAA+pB,CAAA,CAAa,IAEf,EAAI7mB,CAAJ,GACEizE,CAIA,CAJmBt1E,EAAA,CAAcqC,CAAApQ,MAAd,CAInB;AAHA0W,CAAAu4D,MAAA,CAAeoU,CAAf,CAAAn0C,KAAA,CAAsC,QAAQ,CAAC7B,CAAD,CAAW,CACtC,CAAA,CAAjB,GAAIA,CAAJ,GAAwBg2C,CAAxB,CAA2C,IAA3C,CADuD,CAAzD,CAGA,CAAAjzE,CAAA,CAAQ,IALV,CAvBF,CAFwD,CAA1D,CAFuD,CAPtD,CADiE,CAAtD,CAApB,CAwOIiD,GAAqB,CAAC,kBAAD,CAAqB,eAArB,CAAsC,UAAtC,CACP,QAAQ,CAACyH,CAAD,CAAqBtE,CAArB,CAAsCE,CAAtC,CAAgD,CACxE,MAAO,CACLka,SAAU,KADL,CAELD,SAAU,GAFL,CAGLsH,SAAU,CAAA,CAHL,CAILxG,WAAY,SAJP,CAKLhlB,WAAY1B,EAAAnK,KALP,CAML8J,QAASA,QAAQ,CAAClI,CAAD,CAAUN,CAAV,CAAgB,CAAA,IAC3BqhF,EAASrhF,CAAAkR,UAATmwE,EAA2BrhF,CAAA3C,IADA,CAE3BikF,EAAYthF,CAAAiwC,OAAZqxC,EAA2B,EAFA,CAG3BC,EAAgBvhF,CAAAwhF,WAEpB,OAAO,SAAQ,CAACj5E,CAAD,CAAQymB,CAAR,CAAkB2D,CAAlB,CAAyB+oC,CAAzB,CAA+Bp9B,CAA/B,CAA4C,CAAA,IACrDmjD,EAAgB,CADqC,CAErD/7B,CAFqD,CAGrDg8B,CAHqD,CAIrDC,CAJqD,CAMrDC,EAA4BA,QAAQ,EAAG,CACrCF,CAAJ,GACEA,CAAAl1D,OAAA,EACA,CAAAk1D,CAAA,CAAkB,IAFpB,CAIIh8B,EAAJ,GACEA,CAAA16C,SAAA,EACA,CAAA06C,CAAA,CAAe,IAFjB,CAIIi8B,EAAJ,GACEntE,CAAAu4D,MAAA,CAAe4U,CAAf,CAAA30C,KAAA,CAAoC,QAAQ,CAAC7B,CAAD,CAAW,CACpC,CAAA,CAAjB,GAAIA,CAAJ,GAAwBu2C,CAAxB,CAA0C,IAA1C,CADqD,CAAvD,CAIA,CADAA,CACA,CADkBC,CAClB,CAAAA,CAAA,CAAiB,IALnB,CATyC,CAkB3Cp5E,EAAA7I,OAAA,CAAa2hF,CAAb,CAAqBQ,QAA6B,CAACxkF,CAAD,CAAM,CACtD,IAAIykF,EAAiBA,QAAQ,CAAC32C,CAAD,CAAW,CACrB,CAAA,CAAjB;AAAIA,CAAJ,EAA0B,CAAA5wC,CAAA,CAAUgnF,CAAV,CAA1B,EACIA,CADJ,EACqB,CAAAh5E,CAAAmhD,MAAA,CAAY63B,CAAZ,CADrB,EAEIjtE,CAAA,EAHkC,CAAxC,CAMIytE,EAAe,EAAEN,CAEjBpkF,EAAJ,EAGEub,CAAA,CAAiBvb,CAAjB,CAAsB,CAAA,CAAtB,CAAAgiC,KAAA,CAAiC,QAAQ,CAAC8L,CAAD,CAAW,CAClD,GAAIzL,CAAAn3B,CAAAm3B,YAAJ,EAEIqiD,CAFJ,GAEqBN,CAFrB,CAEA,CACA,IAAIljD,EAAWh2B,CAAA2rB,KAAA,EACfwnC,EAAAxsC,SAAA,CAAgBic,CAQZrtC,EAAAA,CAAQwgC,CAAA,CAAYC,CAAZ,CAAsB,QAAQ,CAACzgC,CAAD,CAAQ,CAChD8jF,CAAA,EACAptE,EAAAq4D,MAAA,CAAe/uE,CAAf,CAAsB,IAAtB,CAA4BkxB,CAA5B,CAAAge,KAAA,CAA2C80C,CAA3C,CAFgD,CAAtC,CAKZp8B,EAAA,CAAennB,CACfojD,EAAA,CAAiB7jF,CAEjB4nD,EAAAoE,MAAA,CAAmB,uBAAnB,CAA4CzsD,CAA5C,CACAkL,EAAAmhD,MAAA,CAAY43B,CAAZ,CAnBA,CAHkD,CAApD,CAuBG,QAAQ,EAAG,CACR/4E,CAAAm3B,YAAJ,EAEIqiD,CAFJ,GAEqBN,CAFrB,GAGEG,CAAA,EACA,CAAAr5E,CAAAuhD,MAAA,CAAY,sBAAZ,CAAoCzsD,CAApC,CAJF,CADY,CAvBd,CA+BA,CAAAkL,CAAAuhD,MAAA,CAAY,0BAAZ,CAAwCzsD,CAAxC,CAlCF,GAoCEukF,CAAA,EACA,CAAAlmB,CAAAxsC,SAAA,CAAgB,IArClB,CATsD,CAAxD,CAxByD,CAL5B,CAN5B,CADiE,CADjD,CAxOzB,CAwUIhb,GAAgC,CAAC,UAAD,CAClC,QAAQ,CAACmsE,CAAD,CAAW,CACjB,MAAO,CACL3xD,SAAU,KADL,CAELD,SAAW,IAFN,CAGLZ,QAAS,WAHJ,CAILnC,KAAMA,QAAQ,CAACnjB,CAAD,CAAQymB,CAAR,CAAkB2D,CAAlB,CAAyB+oC,CAAzB,CAA+B,CACvC18D,EAAAhD,KAAA,CAAcgzB,CAAA,CAAS,CAAT,CAAd,CAAA9sB,MAAA,CAAiC,KAAjC,CAAJ;CAIE8sB,CAAA1pB,MAAA,EACA,CAAA+6E,CAAA,CAAShmE,EAAA,CAAoBqhD,CAAAxsC,SAApB,CAAmC/0B,CAAAyJ,SAAnC,CAAAwX,WAAT,CAAA,CAAyE7S,CAAzE,CACIy5E,QAA8B,CAAClkF,CAAD,CAAQ,CACxCkxB,CAAAxpB,OAAA,CAAgB1H,CAAhB,CADwC,CAD1C,CAGG,CAACu2B,oBAAqBrF,CAAtB,CAHH,CALF,GAYAA,CAAAvpB,KAAA,CAAci2D,CAAAxsC,SAAd,CACA,CAAAmxD,CAAA,CAASrxD,CAAAmO,SAAA,EAAT,CAAA,CAA8B50B,CAA9B,CAbA,CAD2C,CAJxC,CADU,CADe,CAxUpC,CAgaI8I,GAAkBgpD,EAAA,CAAY,CAChC5rC,SAAU,GADsB,CAEhCjmB,QAASA,QAAQ,EAAG,CAClB,MAAO,CACL8wB,IAAKA,QAAQ,CAAC/wB,CAAD,CAAQjI,CAAR,CAAiBo1B,CAAjB,CAAwB,CACnCntB,CAAAmhD,MAAA,CAAYh0B,CAAAtkB,OAAZ,CADmC,CADhC,CADW,CAFY,CAAZ,CAhatB,CAogBI2B,GAAkBA,QAAQ,EAAG,CAC/B,MAAO,CACL2b,SAAU,GADL,CAELD,SAAU,GAFL,CAGLZ,QAAS,SAHJ,CAILnC,KAAMA,QAAQ,CAACnjB,CAAD,CAAQjI,CAAR,CAAiBN,CAAjB,CAAuB07D,CAAvB,CAA6B,CACzC,IAAI5oD,EAAS9S,CAAA8S,OAATA,EAAwB,IAA5B,CACImvE,EAA6B,OAA7BA,GAAajiF,CAAA48D,OADjB,CAEInzD,EAAYw4E,CAAA,CAAaxmE,CAAA,CAAK3I,CAAL,CAAb,CAA4BA,CAiB5C4oD,EAAA8D,SAAAv+D,KAAA,CAfYkD,QAAQ,CAAC68D,CAAD,CAAY,CAE9B,GAAI,CAAA/hE,CAAA,CAAY+hE,CAAZ,CAAJ,CAAA,CAEA,IAAI/6C,EAAO,EAEP+6C,EAAJ,EACEtlE,CAAA,CAAQslE,CAAA5gE,MAAA,CAAgBqJ,CAAhB,CAAR,CAAoC,QAAQ,CAAChN,CAAD,CAAQ,CAC9CA,CAAJ,EAAWwpB,CAAAhlB,KAAA,CAAUghF,CAAA,CAAaxmE,CAAA,CAAKhf,CAAL,CAAb,CAA2BA,CAArC,CADuC,CAApD,CAKF,OAAOwpB,EAVP,CAF8B,CAehC,CACAy1C,EAAAa,YAAAt7D,KAAA,CAAsB,QAAQ,CAACxE,CAAD,CAAQ,CACpC,GAAIrB,CAAA,CAAQqB,CAAR,CAAJ,CACE,MAAOA,EAAA8J,KAAA,CAAWuM,CAAX,CAF2B,CAAtC,CASA4oD;CAAAc,SAAA,CAAgBkjB,QAAQ,CAACjjF,CAAD,CAAQ,CAC9B,MAAO,CAACA,CAAR,EAAiB,CAACA,CAAAlB,OADY,CA9BS,CAJtC,CADwB,CApgBjC,CA2jBIggE,GAAc,UA3jBlB,CA4jBID,GAAgB,YA5jBpB,CA6jBI0f,GAAiB,aA7jBrB,CA8jBIC,GAAc,UA9jBlB,CAokBIvb,GAAgB1kE,CAAA,CAAO,SAAP,CAoOpBwoE,GAAAj/C,QAAA,CAA4B,mFAAA,MAAA,CAAA,GAAA,CAkD5Bi/C,GAAAthD,UAAA,CAA8B,CAC5BggE,oBAAqBA,QAAQ,EAAG,CAC9B,GAAI,IAAAhjB,SAAAC,UAAA,CAAwB,cAAxB,CAAJ,CAA6C,CAAA,IACvCgjB,EAAoB,IAAA/rC,QAAA,CAAa,IAAAsuB,OAAA9xD,QAAb,CAAmC,IAAnC,CADmB,CAEvCwvE,EAAoB,IAAAhsC,QAAA,CAAa,IAAAsuB,OAAA9xD,QAAb,CAAmC,QAAnC,CAExB,KAAAwxD,aAAA,CAAoBie,QAAQ,CAAChkD,CAAD,CAAS,CACnC,IAAI0mC,EAAa,IAAAb,gBAAA,CAAqB7lC,CAArB,CACbviC,EAAA,CAAWipE,CAAX,CAAJ,GACEA,CADF,CACeod,CAAA,CAAkB9jD,CAAlB,CADf,CAGA,OAAO0mC,EAL4B,CAOrC,KAAAV,aAAA;AAAoBie,QAAQ,CAACjkD,CAAD,CAASgE,CAAT,CAAmB,CACzCvmC,CAAA,CAAW,IAAAooE,gBAAA,CAAqB7lC,CAArB,CAAX,CAAJ,CACE+jD,CAAA,CAAkB/jD,CAAlB,CAA0B,CAACkkD,KAAMlgD,CAAP,CAA1B,CADF,CAGE,IAAA8hC,sBAAA,CAA2B9lC,CAA3B,CAAmCgE,CAAnC,CAJ2C,CAXJ,CAA7C,IAkBO,IAAK+B,CAAA,IAAA8/B,gBAAA9/B,OAAL,CACL,KAAMs7B,GAAA,CAAc,WAAd,CACF,IAAAgF,OAAA9xD,QADE,CACmBvN,EAAA,CAAY,IAAAutB,UAAZ,CADnB,CAAN,CApB4B,CADJ,CA+C5B8qC,QAASh/D,CA/CmB,CAmE5B89D,SAAUA,QAAQ,CAAC//D,CAAD,CAAQ,CAExB,MAAOwC,EAAA,CAAYxC,CAAZ,CAAP,EAAuC,EAAvC,GAA6BA,CAA7B,EAAuD,IAAvD,GAA6CA,CAA7C,EAA+DA,CAA/D,GAAyEA,CAFjD,CAnEE,CAwE5B+lF,qBAAsBA,QAAQ,CAAC/lF,CAAD,CAAQ,CAChC,IAAA+/D,SAAA,CAAc//D,CAAd,CAAJ,EACE,IAAA0+D,UAAA75C,YAAA,CAA2B,IAAAsR,UAA3B,CAlWgB6vD,cAkWhB,CACA,CAAA,IAAAtnB,UAAA95C,SAAA,CAAwB,IAAAuR,UAAxB,CApWY8vD,UAoWZ,CAFF,GAIE,IAAAvnB,UAAA75C,YAAA,CAA2B,IAAAsR,UAA3B,CAtWY8vD,UAsWZ,CACA,CAAA,IAAAvnB,UAAA95C,SAAA,CAAwB,IAAAuR,UAAxB;AAtWgB6vD,cAsWhB,CALF,CADoC,CAxEV,CA6F5BhI,aAAcA,QAAQ,EAAG,CACvB,IAAA7f,OAAA,CAAc,CAAA,CACd,KAAAE,UAAA,CAAiB,CAAA,CACjB,KAAAK,UAAA75C,YAAA,CAA2B,IAAAsR,UAA3B,CAA2CqoD,EAA3C,CACA,KAAA9f,UAAA95C,SAAA,CAAwB,IAAAuR,UAAxB,CAAwCooD,EAAxC,CAJuB,CA7FG,CA+G5BR,UAAWA,QAAQ,EAAG,CACpB,IAAA5f,OAAA,CAAc,CAAA,CACd,KAAAE,UAAA,CAAiB,CAAA,CACjB,KAAAK,UAAA75C,YAAA,CAA2B,IAAAsR,UAA3B,CAA2CooD,EAA3C,CACA,KAAA7f,UAAA95C,SAAA,CAAwB,IAAAuR,UAAxB,CAAwCqoD,EAAxC,CACA,KAAAhgB,aAAAuf,UAAA,EALoB,CA/GM,CAmI5BW,cAAeA,QAAQ,EAAG,CACxB,IAAArX,SAAA,CAAgB,CAAA,CAChB,KAAAD,WAAA,CAAkB,CAAA,CAClB,KAAA1I,UAAA8R,SAAA,CAAwB,IAAAr6C,UAAxB,CAjakB+vD,cAialB,CAhagBC,YAgahB,CAHwB,CAnIE,CAoJ5BC,YAAaA,QAAQ,EAAG,CACtB,IAAA/e,SAAA;AAAgB,CAAA,CAChB,KAAAD,WAAA,CAAkB,CAAA,CAClB,KAAA1I,UAAA8R,SAAA,CAAwB,IAAAr6C,UAAxB,CAjbgBgwD,YAibhB,CAlbkBD,cAkblB,CAHsB,CApJI,CAmP5B/H,mBAAoBA,QAAQ,EAAG,CAC7B,IAAAjW,UAAA35C,OAAA,CAAsB,IAAAs5C,kBAAtB,CACA,KAAAzH,WAAA,CAAkB,IAAAimB,yBAClB,KAAAplB,QAAA,EAH6B,CAnPH,CAqQ5BwC,UAAWA,QAAQ,EAAG,CAGpB,GAAI,CAAAx7D,CAAA,CAAY,IAAA++D,YAAZ,CAAJ,CAAA,CAIA,IAAIzC,EAAY,IAAA8hB,yBAAhB,CAKI/d,EAAa,IAAArB,gBALjB,CAOIqf,EAAY,IAAAloB,OAPhB,CAQImoB,EAAiB,IAAAvf,YARrB,CAUIwf,EAAe,IAAA/jB,SAAAC,UAAA,CAAwB,cAAxB,CAVnB,CAYI+jB,EAAO,IACX,KAAAC,gBAAA,CAAqBpe,CAArB,CAAiC/D,CAAjC,CAA4C,QAAQ,CAACoiB,CAAD,CAAW,CAGxDH,CAAL,EAAqBF,CAArB,GAAmCK,CAAnC,GAKEF,CAAAzf,YAEA,CAFmB2f,CAAA,CAAWre,CAAX,CAAwBvjE,IAAAA,EAE3C,CAAI0hF,CAAAzf,YAAJ;AAAyBuf,CAAzB,EACEE,CAAAG,oBAAA,EARJ,CAH6D,CAA/D,CAjBA,CAHoB,CArQM,CA0S5BF,gBAAiBA,QAAQ,CAACpe,CAAD,CAAa/D,CAAb,CAAwBsiB,CAAxB,CAAsC,CAsC7DC,QAASA,EAAqB,EAAG,CAC/B,IAAIC,EAAsB,CAAA,CAC1B9nF,EAAA,CAAQwnF,CAAAljB,YAAR,CAA0B,QAAQ,CAACyjB,CAAD,CAAYr8E,CAAZ,CAAkB,CAClD,IAAI8b,EAASwgE,OAAA,CAAQD,CAAA,CAAU1e,CAAV,CAAsB/D,CAAtB,CAAR,CACbwiB,EAAA,CAAsBA,CAAtB,EAA6CtgE,CAC7CygE,EAAA,CAAYv8E,CAAZ,CAAkB8b,CAAlB,CAHkD,CAApD,CAKA,OAAKsgE,EAAL,CAMO,CAAA,CANP,EACE9nF,CAAA,CAAQwnF,CAAAvf,iBAAR,CAA+B,QAAQ,CAACvyC,CAAD,CAAIhqB,CAAJ,CAAU,CAC/Cu8E,CAAA,CAAYv8E,CAAZ,CAAkB,IAAlB,CAD+C,CAAjD,CAGO,CAAA,CAAA,CAJT,CAP+B,CAgBjCw8E,QAASA,EAAsB,EAAG,CAChC,IAAIC,EAAoB,EAAxB,CACIT,EAAW,CAAA,CACf1nF,EAAA,CAAQwnF,CAAAvf,iBAAR,CAA+B,QAAQ,CAAC8f,CAAD,CAAYr8E,CAAZ,CAAkB,CACvD,IAAIujC,EAAU84C,CAAA,CAAU1e,CAAV,CAAsB/D,CAAtB,CACd,IAAmBr2B,CAAAA,CAAnB,EArp6BQ,CAAA7uC,CAAA,CAqp6BW6uC,CArp6BAtL,KAAX,CAqp6BR,CACE,KAAMqgC,GAAA,CAAc,WAAd,CAC4E/0B,CAD5E,CAAN,CAGFg5C,CAAA,CAAYv8E,CAAZ,CAAkB5F,IAAAA,EAAlB,CACAqiF,EAAA5iF,KAAA,CAAuB0pC,CAAAtL,KAAA,CAAa,QAAQ,EAAG,CAC7CskD,CAAA,CAAYv8E,CAAZ,CAAkB,CAAA,CAAlB,CAD6C,CAAxB,CAEpB,QAAQ,EAAG,CACZg8E,CAAA,CAAW,CAAA,CACXO,EAAA,CAAYv8E,CAAZ,CAAkB,CAAA,CAAlB,CAFY,CAFS,CAAvB,CAPuD,CAAzD,CAcKy8E,EAAAtoF,OAAL,CAGE2nF,CAAAlrE,IAAA8B,IAAA,CAAa+pE,CAAb,CAAAxkD,KAAA,CAAqC,QAAQ,EAAG,CAC9CykD,CAAA,CAAeV,CAAf,CAD8C,CAAhD,CAEG1kF,CAFH,CAHF,CACEolF,CAAA,CAAe,CAAA,CAAf,CAlB8B,CA0BlCH,QAASA,EAAW,CAACv8E,CAAD,CAAO00D,CAAP,CAAgB,CAC9BioB,CAAJ,GAA6Bb,CAAA1e,yBAA7B;AACE0e,CAAAjnB,aAAA,CAAkB70D,CAAlB,CAAwB00D,CAAxB,CAFgC,CAMpCgoB,QAASA,EAAc,CAACV,CAAD,CAAW,CAC5BW,CAAJ,GAA6Bb,CAAA1e,yBAA7B,EAEE8e,CAAA,CAAaF,CAAb,CAH8B,CArFlC,IAAA5e,yBAAA,EACA,KAAIuf,EAAuB,IAAAvf,yBAA3B,CACI0e,EAAO,IAaXc,UAA2B,EAAG,CAC5B,IAAIC,EAAWf,CAAAzjB,aAEf,IAAIxgE,CAAA,CAAYikF,CAAA3e,cAAZ,CAAJ,CACEof,CAAA,CAAYM,CAAZ,CAAsB,IAAtB,CADF,KAcE,OAXKf,EAAA3e,cAWEA,GAVL7oE,CAAA,CAAQwnF,CAAAljB,YAAR,CAA0B,QAAQ,CAAC5uC,CAAD,CAAIhqB,CAAJ,CAAU,CAC1Cu8E,CAAA,CAAYv8E,CAAZ,CAAkB,IAAlB,CAD0C,CAA5C,CAGA,CAAA1L,CAAA,CAAQwnF,CAAAvf,iBAAR,CAA+B,QAAQ,CAACvyC,CAAD,CAAIhqB,CAAJ,CAAU,CAC/Cu8E,CAAA,CAAYv8E,CAAZ,CAAkB,IAAlB,CAD+C,CAAjD,CAOKm9D,EADPof,CAAA,CAAYM,CAAZ,CAAsBf,CAAA3e,cAAtB,CACOA,CAAA2e,CAAA3e,cAET,OAAO,CAAA,CAnBqB,CAA9Byf,CAVK,EAAL,CAIKT,CAAA,EAAL,CAIAK,CAAA,EAJA,CACEE,CAAA,CAAe,CAAA,CAAf,CALF,CACEA,CAAA,CAAe,CAAA,CAAf,CAP2D,CA1SnC,CAmZ5BjJ,iBAAkBA,QAAQ,EAAG,CAC3B,IAAI7Z,EAAY,IAAAnE,WAEhB,KAAA8H,UAAA35C,OAAA,CAAsB,IAAAs5C,kBAAtB,CAKA,IAAI,IAAAwe,yBAAJ;AAAsC9hB,CAAtC,EAAkE,EAAlE,GAAoDA,CAApD,EAAyE,IAAAlE,sBAAzE,CAGA,IAAA0lB,qBAAA,CAA0BxhB,CAA1B,CAOA,CANA,IAAA8hB,yBAMA,CANgC9hB,CAMhC,CAHI,IAAAlG,UAGJ,EAFE,IAAA0f,UAAA,EAEF,CAAA,IAAA0J,mBAAA,EAlB2B,CAnZD,CAwa5BA,mBAAoBA,QAAQ,EAAG,CAE7B,IAAInf,EADY,IAAA+d,yBAChB,CACII,EAAO,IAEX,KAAA3e,cAAA,CAAqBtlE,CAAA,CAAY8lE,CAAZ,CAAA,CAA0BvjE,IAAAA,EAA1B,CAAsC,CAAA,CAG3D,KAAAy6D,aAAA,CAAkB,IAAAwD,aAAlB,CAAqC,IAArC,CACA,KAAAA,aAAA,CAAoB,OAEpB,IAAI,IAAA8E,cAAJ,CACE,IAAS,IAAAjoE,EAAI,CAAb,CAAgBA,CAAhB,CAAoB,IAAAkjE,SAAAjkE,OAApB,CAA0Ce,CAAA,EAA1C,CAEE,GADAyoE,CACI,CADS,IAAAvF,SAAA,CAAcljE,CAAd,CAAA,CAAiByoE,CAAjB,CACT,CAAA9lE,CAAA,CAAY8lE,CAAZ,CAAJ,CAA6B,CAC3B,IAAAR,cAAA,CAAqB,CAAA,CACrB,MAF2B,CAM7B7/D,CAAA,CAAY,IAAA++D,YAAZ,CAAJ,GAEE,IAAAA,YAFF,CAEqB,IAAAW,aAAA,CAAkB,IAAA7hC,QAAlB,CAFrB,CAIA;IAAIygD,EAAiB,IAAAvf,YAArB,CACIwf,EAAe,IAAA/jB,SAAAC,UAAA,CAAwB,cAAxB,CACnB,KAAAuE,gBAAA,CAAuBqB,CAEnBke,EAAJ,GACE,IAAAxf,YAkBA,CAlBmBsB,CAkBnB,CAAIme,CAAAzf,YAAJ,GAAyBuf,CAAzB,EACEE,CAAAG,oBAAA,EApBJ,CAOA,KAAAF,gBAAA,CAAqBpe,CAArB,CAAiC,IAAA+d,yBAAjC,CAAgE,QAAQ,CAACM,CAAD,CAAW,CAC5EH,CAAL,GAKEC,CAAAzf,YAMF,CANqB2f,CAAA,CAAWre,CAAX,CAAwBvjE,IAAAA,EAM7C,CAAI0hF,CAAAzf,YAAJ,GAAyBuf,CAAzB,EACEE,CAAAG,oBAAA,EAZF,CADiF,CAAnF,CAnC6B,CAxaH,CA6d5BA,oBAAqBA,QAAQ,EAAG,CAC9B,IAAAhf,aAAA,CAAkB,IAAA9hC,QAAlB,CAAgC,IAAAkhC,YAAhC,CACA/nE,EAAA,CAAQ,IAAAkoE,qBAAR,CAAmC,QAAQ,CAACl7C,CAAD,CAAW,CACpD,GAAI,CACFA,CAAA,EADE,CAEF,MAAO9iB,CAAP,CAAU,CAEV,IAAAg/D,mBAAA,CAAwBh/D,CAAxB,CAFU,CAHwC,CAAtD,CAOG,IAPH,CAF8B,CA7dJ,CA4hB5Bm3D,cAAeA,QAAQ,CAACtgE,CAAD,CAAQ0iB,CAAR,CAAiB,CACtC,IAAA09C,WAAA;AAAkBpgE,CACd,KAAAyiE,SAAAC,UAAA,CAAwB,iBAAxB,CAAJ,EACE,IAAAglB,0BAAA,CAA+BhlE,CAA/B,CAHoC,CA5hBZ,CAmiB5BglE,0BAA2BA,QAAQ,CAAChlE,CAAD,CAAU,CAC3C,IAAIilE,EAAgB,IAAAllB,SAAAC,UAAA,CAAwB,UAAxB,CAEhBpkE,EAAA,CAASqpF,CAAA,CAAcjlE,CAAd,CAAT,CAAJ,CACEilE,CADF,CACkBA,CAAA,CAAcjlE,CAAd,CADlB,CAEWpkB,CAAA,CAASqpF,CAAA,CAAc,SAAd,CAAT,CAAJ,EACqD,EADrD,GACL,IAAAllB,SAAAC,UAAA,CAAwB,UAAxB,CAAAx+D,QAAA,CAA4Cwe,CAA5C,CADK,CAGLilE,CAHK,CAGWA,CAAA,CAAc,SAAd,CAHX,CAIIrpF,CAAA,CAASqpF,CAAA,CAAc,GAAd,CAAT,CAJJ,GAKLA,CALK,CAKWA,CAAA,CAAc,GAAd,CALX,CAQP,KAAAzf,UAAA35C,OAAA,CAAsB,IAAAs5C,kBAAtB,CACA,KAAI4e,EAAO,IACS,EAApB,CAAIkB,CAAJ,CACE,IAAA9f,kBADF,CAC2B,IAAAK,UAAA,CAAe,QAAQ,EAAG,CACjDue,CAAArI,iBAAA,EADiD,CAA1B,CAEtBuJ,CAFsB,CAD3B,CAIW,IAAA3f,YAAA13B,QAAJ,CACL,IAAA8tC,iBAAA,EADK,CAGL,IAAAt4C,QAAA95B,OAAA,CAAoB,QAAQ,EAAG,CAC7By6E,CAAArI,iBAAA,EAD6B,CAA/B,CAtByC,CAniBjB;AA4lB5BwJ,sBAAuBA,QAAQ,CAACz8D,CAAD,CAAU,CACvC,IAAAs3C,SAAA,CAAgB,IAAAA,SAAAolB,YAAA,CAA0B18D,CAA1B,CAChB,KAAA28D,oBAAA,EAFuC,CA5lBb,CAgtB5BC,mBAAoBA,QAAQ,EAAG,CAC7B,IAAIxjB,EAAY,IAAAyjB,SAAA,EAEZ,KAAA5nB,WAAJ,GAAwBmE,CAAxB,GACE,IAAAwhB,qBAAA,CAA0BxhB,CAA1B,CAIA,CAHA,IAAAnE,WAGA,CAHkB,IAAAimB,yBAGlB,CAHkD9hB,CAGlD,CAFA,IAAAtD,QAAA,EAEA,CAAA,IAAAylB,gBAAA,CAAqB,IAAA1f,YAArB,CAAuC,IAAA5G,WAAvC,CAAwDn+D,CAAxD,CALF,CAH6B,CAhtBH,CA+tB5B+lF,SAAUA,QAAQ,EAAG,CAKnB,IALmB,IACfC,EAAa,IAAAnoB,YADE,CAEfnnC,EAAMsvD,CAAAnpF,OAFS,CAIfylE,EAAY,IAAAyC,YAChB,CAAOruC,CAAA,EAAP,CAAA,CACE4rC,CAAA,CAAY0jB,CAAA,CAAWtvD,CAAX,CAAA,CAAgB4rC,CAAhB,CAGd,OAAOA,EATY,CA/tBO,CA8uB5BgE,gBAAiBA,QAAQ,CAACD,CAAD,CAAa,CACpC,IAAAtB,YAAA,CAAmB,IAAAC,gBAAnB,CAA0CqB,CAC1C,KAAAR,cAAA;AAAqB/iE,IAAAA,EACrB,KAAAgjF,mBAAA,EAHoC,CA9uBV,CAovB5BD,oBAAqBA,QAAQ,EAAG,CAC1B,IAAAvgB,eAAJ,EACE,IAAApxC,UAAAtI,IAAA,CAAmB,IAAA05C,eAAnB,CAAwC,IAAAC,qBAAxC,CAIF,IADA,IAAAD,eACA,CADsB,IAAA9E,SAAAC,UAAA,CAAwB,UAAxB,CACtB,CACE,IAAAvsC,UAAAxoB,GAAA,CAAkB,IAAA45D,eAAlB,CAAuC,IAAAC,qBAAvC,CAP4B,CApvBJ,CA+vB5BA,qBAAsBA,QAAQ,CAACtH,CAAD,CAAK,CACjC,IAAAwnB,0BAAA,CAA+BxnB,CAA/B,EAAqCA,CAAAv6D,KAArC,CADiC,CA/vBP,CAqzB9Bo5D,GAAA,CAAqB,CACnBQ,MAAOwH,EADY,CAEnBzhE,IAAKA,QAAQ,CAACu6C,CAAD,CAASne,CAAT,CAAmB,CAC9Bme,CAAA,CAAOne,CAAP,CAAA,CAAmB,CAAA,CADW,CAFb,CAKnB49B,MAAOA,QAAQ,CAACzf,CAAD,CAASne,CAAT,CAAmB,CAChC,OAAOme,CAAA,CAAOne,CAAP,CADyB,CALf,CAArB,CAuMA,KAAItrB,GAAmB,CAAC,YAAD,CAAe,QAAQ,CAAC+E,CAAD,CAAa,CACzD,MAAO,CACL8W,SAAU,GADL,CAELb,QAAS,CAAC,SAAD;AAAY,QAAZ,CAAsB,kBAAtB,CAFJ,CAGLtjB,WAAYi5D,EAHP,CAOL/0C,SAAU,CAPL,CAQLjmB,QAASm8E,QAAuB,CAACrkF,CAAD,CAAU,CAExCA,CAAA+gB,SAAA,CAAiB25D,EAAjB,CAAA35D,SAAA,CAlyCgBshE,cAkyChB,CAAAthE,SAAA,CAAoEk6C,EAApE,CAEA,OAAO,CACLjiC,IAAKsrD,QAAuB,CAACr8E,CAAD,CAAQjI,CAAR,CAAiBN,CAAjB,CAAuB47E,CAAvB,CAA8B,CAAA,IACpDiJ,EAAYjJ,CAAA,CAAM,CAAN,CACZkJ,EAAAA,CAAWlJ,CAAA,CAAM,CAAN,CAAXkJ,EAAuBD,CAAA5pB,aAG3B,IAFI8pB,CAEJ,CAFkBnJ,CAAA,CAAM,CAAN,CAElB,CACEiJ,CAAA3lB,SAAA,CAAqB6lB,CAAA7lB,SAGvB2lB,EAAA3C,oBAAA,EAGA4C,EAAA5K,YAAA,CAAqB2K,CAArB,CAEA7kF,EAAAikC,SAAA,CAAc,MAAd,CAAsB,QAAQ,CAAC5B,CAAD,CAAW,CACnCwiD,CAAAlqB,MAAJ,GAAwBt4B,CAAxB,EACEwiD,CAAA5pB,aAAAmf,gBAAA,CAAuCyK,CAAvC,CAAkDxiD,CAAlD,CAFqC,CAAzC,CAMA95B,EAAAuyB,IAAA,CAAU,UAAV,CAAsB,QAAQ,EAAG,CAC/B+pD,CAAA5pB,aAAAsf,eAAA,CAAsCsK,CAAtC,CAD+B,CAAjC,CApBwD,CADrD,CAyBLtrD,KAAMyrD,QAAwB,CAACz8E,CAAD,CAAQjI,CAAR,CAAiBN,CAAjB,CAAuB47E,CAAvB,CAA8B,CAI1DqJ,QAASA,EAAU,EAAG,CACpBJ,CAAAhC,YAAA,EADoB,CAHtB,IAAIgC,EAAYjJ,CAAA,CAAM,CAAN,CAChBiJ,EAAAN,oBAAA,EAMAjkF,EAAA8J,GAAA,CAAW,MAAX;AAAmB,QAAQ,EAAG,CACxBy6E,CAAA/gB,SAAJ,GAEIlsD,CAAAm1B,QAAJ,CACExkC,CAAA9I,WAAA,CAAiBwlF,CAAjB,CADF,CAGE18E,CAAAE,OAAA,CAAaw8E,CAAb,CALF,CAD4B,CAA9B,CAR0D,CAzBvD,CAJiC,CARrC,CADkD,CAApC,CAAvB,CA8DIlhB,EA9DJ,CA+DImhB,GAAiB,uBAYrBjgB,GAAA/iD,UAAA,CAAyB,CAUvBi9C,UAAWA,QAAQ,CAAC/3D,CAAD,CAAO,CACxB,MAAO,KAAA89D,UAAA,CAAe99D,CAAf,CADiB,CAVH,CAoBvBk9E,YAAaA,QAAQ,CAAC18D,CAAD,CAAU,CAC7B,IAAIu9D,EAAa,CAAA,CAGjBv9D,EAAA,CAAU7pB,CAAA,CAAO,EAAP,CAAW6pB,CAAX,CAGVlsB,EAAA,CAAQksB,CAAR,CAA8B,QAAQ,CAAClY,CAAD,CAAS7T,CAAT,CAAc,CACnC,UAAf,GAAI6T,CAAJ,CACc,GAAZ,GAAI7T,CAAJ,CACEspF,CADF,CACe,CAAA,CADf,EAGEv9D,CAAA,CAAQ/rB,CAAR,CAEA,CAFe,IAAAqpE,UAAA,CAAerpE,CAAf,CAEf,CAAY,UAAZ,GAAIA,CAAJ,GACE+rB,CAAAw9D,gBADF,CAC4B,IAAAlgB,UAAAkgB,gBAD5B,CALF,CADF,CAWc,UAXd,GAWMvpF,CAXN,GAcI+rB,CAAAw9D,gBACA,CAD0B,CAAA,CAC1B,CAAAx9D,CAAA,CAAQ/rB,CAAR,CAAA,CAAe4f,CAAA,CAAK/L,CAAAnL,QAAA,CAAe2gF,EAAf,CAA+B,QAAQ,EAAG,CAC5Dt9D,CAAAw9D,gBAAA,CAA0B,CAAA,CAC1B,OAAO,GAFqD,CAA1C,CAAL,CAfnB,CADkD,CAApD,CAsBG,IAtBH,CAwBID,EAAJ,GAEE,OAAOv9D,CAAA,CAAQ,GAAR,CACP,CAAA6hB,EAAA,CAAS7hB,CAAT,CAAkB,IAAAs9C,UAAlB,CAHF,CAOAz7B,GAAA,CAAS7hB,CAAT,CAAkBm8C,EAAAmB,UAAlB,CAEA;MAAO,KAAID,EAAJ,CAAiBr9C,CAAjB,CAxCsB,CApBR,CAiEzBm8C,GAAA,CAAsB,IAAIkB,EAAJ,CAAiB,CACrCogB,SAAU,EAD2B,CAErCD,gBAAiB,CAAA,CAFoB,CAGrCE,SAAU,CAH2B,CAIrCC,aAAc,CAAA,CAJuB,CAKrCtC,aAAc,CAAA,CALuB,CAMrC5+E,SAAU,IAN2B,CAAjB,CAidtB,KAAI4P,GAA0BA,QAAQ,EAAG,CAEvCuxE,QAASA,EAAwB,CAACv2D,CAAD,CAASoP,CAAT,CAAiB,CAChD,IAAAonD,QAAA,CAAex2D,CACf,KAAAsT,QAAA,CAAelE,CAFiC,CADlDmnD,CAAAjhE,QAAA,CAAmC,CAAC,QAAD,CAAW,QAAX,CAKnCihE,EAAAtjE,UAAA,CAAqC,CACnCoZ,QAASA,QAAQ,EAAG,CAClB,IAAIoqD,EAAgB,IAAAC,WAAA,CAAkB,IAAAA,WAAAzmB,SAAlB,CAA6C6E,EAAjE,CACI6hB,EAAyB,IAAArjD,QAAAmnB,MAAA,CAAmB,IAAA+7B,QAAAzxE,eAAnB,CAE7B,KAAAkrD,SAAA,CAAgBwmB,CAAApB,YAAA,CAA0BsB,CAA1B,CAJE,CADe,CASrC,OAAO,CACLl3D,SAAU,GADL,CAGLD,SAAU,EAHL,CAILZ,QAAS,CAAC83D,WAAY,mBAAb,CAJJ,CAKLn2D,iBAAkB,CAAA,CALb,CAMLjlB,WAAYi7E,CANP,CAfgC,CAAzC,CAkEIj0E,GAAyB8oD,EAAA,CAAY,CAAEtkC,SAAU,CAAA,CAAZ;AAAkBtH,SAAU,GAA5B,CAAZ,CAlE7B,CAwEIo3D,GAAkB7qF,CAAA,CAAO,WAAP,CAxEtB,CA+SI8qF,GAAoB,qOA/SxB,CA4TIrzE,GAAqB,CAAC,UAAD,CAAa,WAAb,CAA0B,QAA1B,CAAoC,QAAQ,CAAC4tE,CAAD,CAAW3qE,CAAX,CAAsBgC,CAAtB,CAA8B,CAEjGquE,QAASA,EAAsB,CAACC,CAAD,CAAaC,CAAb,CAA4B19E,CAA5B,CAAmC,CAsDhE29E,QAASA,EAAM,CAACC,CAAD,CAAcnlB,CAAd,CAAyBolB,CAAzB,CAAgCC,CAAhC,CAAuCC,CAAvC,CAAiD,CAC9D,IAAAH,YAAA,CAAmBA,CACnB,KAAAnlB,UAAA,CAAiBA,CACjB,KAAAolB,MAAA,CAAaA,CACb,KAAAC,MAAA,CAAaA,CACb,KAAAC,SAAA,CAAgBA,CAL8C,CAQhEC,QAASA,EAAmB,CAACC,CAAD,CAAe,CACzC,IAAIC,CAEJ,IAAKC,CAAAA,CAAL,EAAgBzrF,EAAA,CAAYurF,CAAZ,CAAhB,CACEC,CAAA,CAAmBD,CADrB,KAEO,CAELC,CAAA,CAAmB,EACnB,KAASE,IAAAA,CAAT,GAAoBH,EAApB,CACMA,CAAAzqF,eAAA,CAA4B4qF,CAA5B,CAAJ;AAAkE,GAAlE,GAA4CA,CAAA3jF,OAAA,CAAe,CAAf,CAA5C,EACEyjF,CAAAxlF,KAAA,CAAsB0lF,CAAtB,CALC,CASP,MAAOF,EAdkC,CA5D3C,IAAIvkF,EAAQ8jF,CAAA9jF,MAAA,CAAiB4jF,EAAjB,CACZ,IAAM5jF,CAAAA,CAAN,CACE,KAAM2jF,GAAA,CAAgB,MAAhB,CAIJG,CAJI,CAIQ3gF,EAAA,CAAY4gF,CAAZ,CAJR,CAAN,CAUF,IAAIW,EAAY1kF,CAAA,CAAM,CAAN,CAAZ0kF,EAAwB1kF,CAAA,CAAM,CAAN,CAA5B,CAEIwkF,EAAUxkF,CAAA,CAAM,CAAN,CAGV2kF,EAAAA,CAAW,MAAAhnF,KAAA,CAAYqC,CAAA,CAAM,CAAN,CAAZ,CAAX2kF,EAAoC3kF,CAAA,CAAM,CAAN,CAExC,KAAI4kF,EAAU5kF,CAAA,CAAM,CAAN,CAEVrD,EAAAA,CAAU6Y,CAAA,CAAOxV,CAAA,CAAM,CAAN,CAAA,CAAWA,CAAA,CAAM,CAAN,CAAX,CAAsB0kF,CAA7B,CAEd,KAAIG,EADaF,CACbE,EADyBrvE,CAAA,CAAOmvE,CAAP,CACzBE,EAA4BloF,CAAhC,CACImoF,EAAYF,CAAZE,EAAuBtvE,CAAA,CAAOovE,CAAP,CAD3B,CAMIG,EAAoBH,CAAA,CACE,QAAQ,CAACrqF,CAAD,CAAQ6nB,CAAR,CAAgB,CAAE,MAAO0iE,EAAA,CAAUz+E,CAAV,CAAiB+b,CAAjB,CAAT,CAD1B,CAEE4iE,QAAuB,CAACzqF,CAAD,CAAQ,CAAE,MAAO8kB,GAAA,CAAQ9kB,CAAR,CAAT,CARzD,CASI0qF,EAAkBA,QAAQ,CAAC1qF,CAAD,CAAQZ,CAAR,CAAa,CACzC,MAAOorF,EAAA,CAAkBxqF,CAAlB,CAAyB2qF,CAAA,CAAU3qF,CAAV,CAAiBZ,CAAjB,CAAzB,CADkC,CAT3C,CAaIwrF,EAAY3vE,CAAA,CAAOxV,CAAA,CAAM,CAAN,CAAP,EAAmBA,CAAA,CAAM,CAAN,CAAnB,CAbhB,CAcIolF,EAAY5vE,CAAA,CAAOxV,CAAA,CAAM,CAAN,CAAP,EAAmB,EAAnB,CAdhB,CAeIqlF,EAAgB7vE,CAAA,CAAOxV,CAAA,CAAM,CAAN,CAAP,EAAmB,EAAnB,CAfpB,CAgBIslF,EAAW9vE,CAAA,CAAOxV,CAAA,CAAM,CAAN,CAAP,CAhBf,CAkBIoiB,EAAS,EAlBb,CAmBI8iE,EAAYV,CAAA,CAAU,QAAQ,CAACjqF,CAAD,CAAQZ,CAAR,CAAa,CAC7CyoB,CAAA,CAAOoiE,CAAP,CAAA,CAAkB7qF,CAClByoB,EAAA,CAAOsiE,CAAP,CAAA,CAAoBnqF,CACpB,OAAO6nB,EAHsC,CAA/B,CAIZ,QAAQ,CAAC7nB,CAAD,CAAQ,CAClB6nB,CAAA,CAAOsiE,CAAP,CAAA,CAAoBnqF,CACpB,OAAO6nB,EAFW,CA+BpB,OAAO,CACLwiE,QAASA,CADJ,CAELK,gBAAiBA,CAFZ,CAGLM,cAAe/vE,CAAA,CAAO8vE,CAAP,CAAiB,QAAQ,CAAChB,CAAD,CAAe,CAIrD,IAAIkB,EAAe,EACnBlB,EAAA,CAAeA,CAAf,EAA+B,EAI/B,KAFA,IAAIC;AAAmBF,CAAA,CAAoBC,CAApB,CAAvB,CACImB,EAAqBlB,CAAAlrF,OADzB,CAESmF,EAAQ,CAAjB,CAAoBA,CAApB,CAA4BinF,CAA5B,CAAgDjnF,CAAA,EAAhD,CAAyD,CACvD,IAAI7E,EAAO2qF,CAAD,GAAkBC,CAAlB,CAAsC/lF,CAAtC,CAA8C+lF,CAAA,CAAiB/lF,CAAjB,CAAxD,CACIjE,EAAQ+pF,CAAA,CAAa3qF,CAAb,CADZ,CAGIyoB,EAAS8iE,CAAA,CAAU3qF,CAAV,CAAiBZ,CAAjB,CAHb,CAIIsqF,EAAcc,CAAA,CAAkBxqF,CAAlB,CAAyB6nB,CAAzB,CAClBojE,EAAAzmF,KAAA,CAAkBklF,CAAlB,CAGA,IAAIjkF,CAAA,CAAM,CAAN,CAAJ,EAAgBA,CAAA,CAAM,CAAN,CAAhB,CACMkkF,CACJ,CADYiB,CAAA,CAAU9+E,CAAV,CAAiB+b,CAAjB,CACZ,CAAAojE,CAAAzmF,KAAA,CAAkBmlF,CAAlB,CAIElkF,EAAA,CAAM,CAAN,CAAJ,GACM0lF,CACJ,CADkBL,CAAA,CAAch/E,CAAd,CAAqB+b,CAArB,CAClB,CAAAojE,CAAAzmF,KAAA,CAAkB2mF,CAAlB,CAFF,CAfuD,CAoBzD,MAAOF,EA7B8C,CAAxC,CAHV,CAmCLG,WAAYA,QAAQ,EAAG,CAWrB,IATA,IAAIC,EAAc,EAAlB,CACIC,EAAiB,EADrB,CAKIvB,EAAegB,CAAA,CAASj/E,CAAT,CAAfi+E,EAAkC,EALtC,CAMIC,EAAmBF,CAAA,CAAoBC,CAApB,CANvB,CAOImB,EAAqBlB,CAAAlrF,OAPzB,CASSmF,EAAQ,CAAjB,CAAoBA,CAApB,CAA4BinF,CAA5B,CAAgDjnF,CAAA,EAAhD,CAAyD,CACvD,IAAI7E,EAAO2qF,CAAD,GAAkBC,CAAlB,CAAsC/lF,CAAtC,CAA8C+lF,CAAA,CAAiB/lF,CAAjB,CAAxD,CAEI4jB,EAAS8iE,CAAA,CADDZ,CAAA/pF,CAAaZ,CAAbY,CACC,CAAiBZ,CAAjB,CAFb,CAGImlE,EAAY+lB,CAAA,CAAYx+E,CAAZ,CAAmB+b,CAAnB,CAHhB,CAII6hE,EAAcc,CAAA,CAAkBjmB,CAAlB,CAA6B18C,CAA7B,CAJlB,CAKI8hE,EAAQiB,CAAA,CAAU9+E,CAAV,CAAiB+b,CAAjB,CALZ,CAMI+hE,EAAQiB,CAAA,CAAU/+E,CAAV,CAAiB+b,CAAjB,CANZ,CAOIgiE,EAAWiB,CAAA,CAAch/E,CAAd,CAAqB+b,CAArB,CAPf,CAQI0jE,EAAa,IAAI9B,CAAJ,CAAWC,CAAX,CAAwBnlB,CAAxB,CAAmColB,CAAnC,CAA0CC,CAA1C,CAAiDC,CAAjD,CAEjBwB,EAAA7mF,KAAA,CAAiB+mF,CAAjB,CACAD,EAAA,CAAe5B,CAAf,CAAA,CAA8B6B,CAZyB,CAezD,MAAO,CACL7nF,MAAO2nF,CADF,CAELC,eAAgBA,CAFX,CAGLE,uBAAwBA,QAAQ,CAACxrF,CAAD,CAAQ,CACtC,MAAOsrF,EAAA,CAAeZ,CAAA,CAAgB1qF,CAAhB,CAAf,CAD+B,CAHnC,CAMLyrF,uBAAwBA,QAAQ,CAACx4E,CAAD,CAAS,CAGvC,MAAOo3E,EAAA,CAAUjmF,EAAA,CAAK6O,CAAAsxD,UAAL,CAAV,CAAmCtxD,CAAAsxD,UAHH,CANpC,CA1Bc,CAnClB,CA/EyD,CAF+B;AAAA,IAkK7FmnB,EAAiBhuF,CAAAyJ,SAAA+W,cAAA,CAA8B,QAA9B,CAlK4E,CAmK7FytE,EAAmBjuF,CAAAyJ,SAAA+W,cAAA,CAA8B,UAA9B,CAiSvB,OAAO,CACL+T,SAAU,GADL,CAELqH,SAAU,CAAA,CAFL,CAGLlI,QAAS,CAAC,QAAD,CAAW,SAAX,CAHJ,CAILnC,KAAM,CACJ4N,IAAK+uD,QAAyB,CAAC9/E,CAAD,CAAQ09E,CAAR,CAAuBjmF,CAAvB,CAA6B47E,CAA7B,CAAoC,CAIhEA,CAAA,CAAM,CAAN,CAAA0M,eAAA,CAA0B5pF,CAJsC,CAD9D,CAOJ66B,KA1SFgvD,QAA0B,CAAChgF,CAAD,CAAQ09E,CAAR,CAAuBjmF,CAAvB,CAA6B47E,CAA7B,CAAoC,CA+L5D4M,QAASA,EAA0B,CAACxnB,CAAD,CAAY,CAE7C,IAAI1gE,GADAoP,CACApP,CADSsnB,CAAAqgE,uBAAA,CAA+BjnB,CAA/B,CACT1gE,GAAoBoP,CAAApP,QAEpBA,EAAJ,EAAgBqoE,CAAAroE,CAAAqoE,SAAhB,GAAkCroE,CAAAqoE,SAAlC,CAAqD,CAAA,CAArD,CAEA,OAAOj5D,EANsC,CAS/C+4E,QAASA,EAAmB,CAAC/4E,CAAD,CAASpP,CAAT,CAAkB,CAC5CoP,CAAApP,QAAA,CAAiBA,CACjBA,EAAAgmF,SAAA,CAAmB52E,CAAA42E,SAOf52E,EAAA02E,MAAJ,GAAqB9lF,CAAA8lF,MAArB,GACE9lF,CAAA8lF,MACA,CADgB12E,CAAA02E,MAChB,CAAA9lF,CAAAgb,YAAA,CAAsB5L,CAAA02E,MAFxB,CAIA9lF,EAAA7D,MAAA,CAAgBiT,CAAAy2E,YAb4B,CAtM9C,IAAIuC,EAAa9M,CAAA,CAAM,CAAN,CAAjB,CACI+M,EAAc/M,CAAA,CAAM,CAAN,CADlB,CAEIlT,EAAW1oE,CAAA0oE,SAINpsE,EAAAA,CAAI,CAAb,KAR4D,IAQ5CitE,EAAW0c,CAAA1c,SAAA,EARiC;AAQPrsE,EAAKqsE,CAAAhuE,OAA1D,CAA2Ee,CAA3E,CAA+EY,CAA/E,CAAmFZ,CAAA,EAAnF,CACE,GAA0B,EAA1B,GAAIitE,CAAA,CAASjtE,CAAT,CAAAG,MAAJ,CAA8B,CAC5BisF,CAAAE,eAAA,CAA4B,CAAA,CAC5BF,EAAAG,YAAA,CAAyBtf,CAAA3iB,GAAA,CAAYtqD,CAAZ,CACzB,MAH4B,CAQhC2pF,CAAA3gF,MAAA,EAEIwjF,EAAAA,CAAsB,CAAED,CAAAH,CAAAG,YAERvtF,EAAAytF,CAAOZ,CAAAvqF,UAAA,CAAyB,CAAA,CAAzB,CAAPmrF,CACpBplF,IAAA,CAAkB,GAAlB,CAEA,KAAIikB,CAAJ,CACIpV,EAAYuzE,CAAA,CAAuB/lF,CAAAwS,UAAvB,CAAuCyzE,CAAvC,CAAsD19E,CAAtD,CADhB,CAKIygF,EAAetzE,CAAA,CAAU,CAAV,CAAA8E,uBAAA,EAGnBkuE,EAAAO,2BAAA,CAAwCC,QAAQ,CAACvlF,CAAD,CAAM,CACpD,MAAO,GAD6C,CAKjD+kE,EAAL,EAwDEggB,CAAAS,WA8BA,CA9BwBC,QAA+B,CAACj4D,CAAD,CAAS,CAE9D,GAAKvJ,CAAL,CAAA,CAIA,IAAIyhE,EAAkBl4D,CAAlBk4D,EAA4Bl4D,CAAAqhB,IAAA,CAAWg2C,CAAX,CAA5Ba,EAAsE,EAE1EzhE,EAAAznB,MAAAzE,QAAA,CAAsB,QAAQ,CAACgU,CAAD,CAAS,CACjCA,CAAApP,QAAAqoE,SAAJ,EA/49B2C,EA+49B3C,GA/49BHvpE,KAAA8iB,UAAAvhB,QAAA3E,KAAA,CA+49B4CqtF,CA/49B5C,CA+49B6D35E,CA/49B7D,CA+49BG,GACEA,CAAApP,QAAAqoE,SADF,CAC4B,CAAA,CAD5B,CADqC,CAAvC,CANA,CAF8D,CA8BhE,CAdA+f,CAAAY,UAcA,CAduBC,QAA8B,EAAG,CAAA,IAClDC,EAAiBvD,CAAAtiF,IAAA,EAAjB6lF,EAAwC,EADU,CAElDC,EAAa,EAEjB/tF,EAAA,CAAQ8tF,CAAR,CAAwB,QAAQ,CAAC/sF,CAAD,CAAQ,CAEtC,CADIiT,CACJ,CADakY,CAAAmgE,eAAA,CAAuBtrF,CAAvB,CACb;AAAe6pF,CAAA52E,CAAA42E,SAAf,EAAgCmD,CAAAxoF,KAAA,CAAgB2mB,CAAAsgE,uBAAA,CAA+Bx4E,CAA/B,CAAhB,CAFM,CAAxC,CAKA,OAAO+5E,EAT+C,CAcxD,CAAIj3E,CAAAs0E,QAAJ,EAEEv+E,CAAAi8B,iBAAA,CAAuB,QAAQ,EAAG,CAChC,GAAIppC,CAAA,CAAQutF,CAAA9rB,WAAR,CAAJ,CACE,MAAO8rB,EAAA9rB,WAAArqB,IAAA,CAA2B,QAAQ,CAAC/1C,CAAD,CAAQ,CAChD,MAAO+V,EAAA20E,gBAAA,CAA0B1qF,CAA1B,CADyC,CAA3C,CAFuB,CAAlC,CAMG,QAAQ,EAAG,CACZksF,CAAAjrB,QAAA,EADY,CANd,CAxFJ,GAEEgrB,CAAAS,WA6CA,CA7CwBC,QAA4B,CAAC3sF,CAAD,CAAQ,CAE1D,GAAKmrB,CAAL,CAAA,CAEA,IAAI8hE,EAAiBzD,CAAA,CAAc,CAAd,CAAAr+D,QAAA,CAAyBq+D,CAAA,CAAc,CAAd,CAAA0D,cAAzB,CAArB,CACIj6E,EAASkY,CAAAqgE,uBAAA,CAA+BxrF,CAA/B,CAITitF,EAAJ,EAAoBA,CAAAxhB,gBAAA,CAA+B,UAA/B,CAEhBx4D,EAAJ,EAMMu2E,CAAA,CAAc,CAAd,CAAAxpF,MAOJ,GAP+BiT,CAAAy2E,YAO/B,GANEuC,CAAAkB,oBAAA,EAGA,CADA3D,CAAA,CAAc,CAAd,CAAAxpF,MACA,CADyBiT,CAAAy2E,YACzB,CAAAz2E,CAAApP,QAAAqoE,SAAA,CAA0B,CAAA,CAG5B,EAAAj5D,CAAApP,QAAAsd,aAAA,CAA4B,UAA5B,CAAwC,UAAxC,CAbF,EAeE8qE,CAAAmB,2BAAA,CAAsCptF,CAAtC,CAxBF,CAF0D,CA6C5D;AAfAisF,CAAAY,UAeA,CAfuBC,QAA2B,EAAG,CAEnD,IAAIG,EAAiB9hE,CAAAmgE,eAAA,CAAuB9B,CAAAtiF,IAAA,EAAvB,CAErB,OAAI+lF,EAAJ,EAAuBpD,CAAAoD,CAAApD,SAAvB,EACEoC,CAAAoB,oBAAA,EAEO,CADPpB,CAAAkB,oBAAA,EACO,CAAAhiE,CAAAsgE,uBAAA,CAA+BwB,CAA/B,CAHT,EAKO,IAT4C,CAerD,CAAIl3E,CAAAs0E,QAAJ,EACEv+E,CAAA7I,OAAA,CACE,QAAQ,EAAG,CAAE,MAAO8S,EAAA20E,gBAAA,CAA0BwB,CAAA9rB,WAA1B,CAAT,CADb,CAEE,QAAQ,EAAG,CAAE8rB,CAAAjrB,QAAA,EAAF,CAFb,CAhDJ,CAqGIorB,EAAJ,GAGEzI,CAAA,CAASqI,CAAAG,YAAT,CAAA,CAAiCtgF,CAAjC,CAIA,CAFA09E,CAAAxc,QAAA,CAAsBif,CAAAG,YAAtB,CAEA,CArq7BgB5wD,CAqq7BhB,GAAIywD,CAAAG,YAAA,CAAuB,CAAvB,CAAAnjF,SAAJ,EAGEgjF,CAAAE,eAKA,CAL4B,CAAA,CAK5B,CAAAF,CAAAJ,eAAA,CAA4ByB,QAAQ,CAACC,CAAD,CAAc5kB,CAAd,CAAwB,CACnC,EAAvB,GAAIA,CAAAzhE,IAAA,EAAJ,GACE+kF,CAAAE,eAMA,CAN4B,CAAA,CAM5B,CALAF,CAAAG,YAKA,CALyBzjB,CAKzB,CAJAsjB,CAAAG,YAAAvnE,YAAA,CAAmC,UAAnC,CAIA,CAFAqnE,CAAAjrB,QAAA,EAEA,CAAA0H,CAAAh7D,GAAA,CAAY,UAAZ;AAAwB,QAAQ,EAAG,CACjC,IAAI6/E,EAAgBvB,CAAAwB,uBAAA,EAEpBxB,EAAAE,eAAA,CAA4B,CAAA,CAC5BF,EAAAG,YAAA,CAAyBrnF,IAAAA,EAErByoF,EAAJ,EAAmBtB,CAAAjrB,QAAA,EANc,CAAnC,CAPF,CAD0D,CAR9D,EA8BEgrB,CAAAG,YAAAvnE,YAAA,CAAmC,UAAnC,CArCJ,CA2CA/Y,EAAAi8B,iBAAA,CAAuBhyB,CAAAi1E,cAAvB,CAmCA0C,QAAsB,EAAG,CACvB,IAAI9mD,EAAgBzb,CAAhByb,EAA2BqlD,CAAAY,UAAA,EAO/B,IAAI1hE,CAAJ,CAEE,IAAS,IAAAtrB,EAAIsrB,CAAAznB,MAAA5E,OAAJe,CAA2B,CAApC,CAA4C,CAA5C,EAAuCA,CAAvC,CAA+CA,CAAA,EAA/C,CAAoD,CAClD,IAAIoT,EAASkY,CAAAznB,MAAA,CAAc7D,CAAd,CACT/B,EAAA,CAAUmV,CAAA22E,MAAV,CAAJ,CACEznE,EAAA,CAAalP,CAAApP,QAAAie,WAAb,CADF,CAGEK,EAAA,CAAalP,CAAApP,QAAb,CALgD,CAUtDsnB,CAAA,CAAUpV,CAAAq1E,WAAA,EAEV,KAAIuC,EAAkB,EAEtBxiE,EAAAznB,MAAAzE,QAAA,CAAsB2uF,QAAkB,CAAC36E,CAAD,CAAS,CAC/C,IAAI46E,CAEJ,IAAI/vF,CAAA,CAAUmV,CAAA22E,MAAV,CAAJ,CAA6B,CAI3BiE,CAAA,CAAeF,CAAA,CAAgB16E,CAAA22E,MAAhB,CAEViE,EAAL,GAEEA,CAQA,CARelC,CAAAxqF,UAAA,CAA2B,CAAA,CAA3B,CAQf,CAPAorF,CAAAtuE,YAAA,CAAyB4vE,CAAzB,CAOA,CAHAA,CAAAlE,MAGA,CAHsC,IAAjB,GAAA12E,CAAA22E,MAAA,CAAwB,MAAxB,CAAiC32E,CAAA22E,MAGtD,CAAA+D,CAAA,CAAgB16E,CAAA22E,MAAhB,CAAA,CAAgCiE,CAVlC,CA/DJ;IAAIC,EAAgBpC,CAAAvqF,UAAA,CAAyB,CAAA,CAAzB,CACpBW,EAAAmc,YAAA,CAAmB6vE,CAAnB,CACA9B,EAAA,CA0EqB/4E,CA1ErB,CAA4B66E,CAA5B,CAuD+B,CAA7B,IAzDEA,EAEJ,CAFoBpC,CAAAvqF,UAAA,CAAyB,CAAA,CAAzB,CAEpB,CA+E6BorF,CAhF7BtuE,YAAA,CAAmB6vE,CAAnB,CACA,CAAA9B,CAAA,CA+EqB/4E,CA/ErB,CAA4B66E,CAA5B,CAoDiD,CAAjD,CA+BAtE,EAAA,CAAc,CAAd,CAAAvrE,YAAA,CAA6BsuE,CAA7B,CAEAL,EAAAjrB,QAAA,EAGKirB,EAAAnsB,SAAA,CAAqBn5B,CAArB,CAAL,GACMmnD,CAEJ,CAFgB9B,CAAAY,UAAA,EAEhB,EADqB92E,CAAAs0E,QACjB,EADsCpe,CACtC,CAAkBlmE,EAAA,CAAO6gC,CAAP,CAAsBmnD,CAAtB,CAAlB,CAAqDnnD,CAArD,GAAuEmnD,CAA3E,IACE7B,CAAA5rB,cAAA,CAA0BytB,CAA1B,CACA,CAAA7B,CAAAjrB,QAAA,EAFF,CAHF,CA5DuB,CAnCzB,CArL4D,CAmSxD,CAJD,CApc0F,CAA1E,CA5TzB,CA+7BIjsD,GAAuB,CAAC,SAAD,CAAY,cAAZ,CAA4B,MAA5B,CAAoC,QAAQ,CAACyhD,CAAD,CAAU98C,CAAV,CAAwBoB,CAAxB,CAA8B,CAAA,IAC/FizE,EAAQ,KADuF,CAE/FC,EAAU,oBAEd,OAAO,CACLh/D,KAAMA,QAAQ,CAACnjB,CAAD,CAAQjI,CAAR,CAAiBN,CAAjB,CAAuB,CAoDnC2qF,QAASA,EAAiB,CAACC,CAAD,CAAU,CAClCtqF,CAAA8/B,KAAA,CAAawqD,CAAb,EAAwB,EAAxB,CADkC,CApDD,IAC/BC,EAAY7qF,CAAAi0C,MADmB,CAE/B62C,EAAU9qF,CAAA2yB,MAAAuwB,KAAV4nC,EAA6BxqF,CAAAN,KAAA,CAAaA,CAAA2yB,MAAAuwB,KAAb,CAFE,CAG/B78B,EAASrmB,CAAAqmB,OAATA,EAAwB,CAHO,CAI/B0kE,EAAQxiF,CAAAmhD,MAAA,CAAYohC,CAAZ,CAARC,EAAgC,EAJD,CAK/BC,EAAc,EALiB,CAM/BrlD,EAAcvvB,CAAAuvB,YAAA,EANiB,CAO/BC,EAAYxvB,CAAAwvB,UAAA,EAPmB,CAQ/BqlD,EAAmBtlD,CAAnBslD,CAAiCJ,CAAjCI,CAA6C,GAA7CA;AAAmD5kE,CAAnD4kE,CAA4DrlD,CAR7B,CAS/BslD,EAAeriF,EAAAnK,KATgB,CAU/BysF,CAEJzvF,EAAA,CAAQsE,CAAR,CAAc,QAAQ,CAACmnC,CAAD,CAAaikD,CAAb,CAA4B,CAChD,IAAIC,EAAWX,CAAA7vE,KAAA,CAAauwE,CAAb,CACXC,EAAJ,GACMC,CACJ,EADeD,CAAA,CAAS,CAAT,CAAA,CAAc,GAAd,CAAoB,EACnC,EADyC9qF,CAAA,CAAU8qF,CAAA,CAAS,CAAT,CAAV,CACzC,CAAAN,CAAA,CAAMO,CAAN,CAAA,CAAiBhrF,CAAAN,KAAA,CAAaA,CAAA2yB,MAAA,CAAWy4D,CAAX,CAAb,CAFnB,CAFgD,CAAlD,CAOA1vF,EAAA,CAAQqvF,CAAR,CAAe,QAAQ,CAAC5jD,CAAD,CAAatrC,CAAb,CAAkB,CACvCmvF,CAAA,CAAYnvF,CAAZ,CAAA,CAAmBua,CAAA,CAAa+wB,CAAA5iC,QAAA,CAAmBkmF,CAAnB,CAA0BQ,CAA1B,CAAb,CADoB,CAAzC,CAKA1iF,EAAA7I,OAAA,CAAamrF,CAAb,CAAwBU,QAA+B,CAACjkE,CAAD,CAAS,CAC9D,IAAI2sB,EAAQokB,UAAA,CAAW/wC,CAAX,CAAZ,CACIkkE,EAAa9mF,CAAA,CAAYuvC,CAAZ,CAEZu3C,EAAL,EAAqBv3C,CAArB,GAA8B82C,EAA9B,GAGE92C,CAHF,CAGUif,CAAAu4B,UAAA,CAAkBx3C,CAAlB,CAA0B5tB,CAA1B,CAHV,CAQK4tB,EAAL,GAAek3C,CAAf,EAA+BK,CAA/B,EAA6C9mF,CAAA,CAAYymF,CAAZ,CAA7C,GACED,CAAA,EAWA,CAVIQ,CAUJ,CAVgBV,CAAA,CAAY/2C,CAAZ,CAUhB,CATIh1C,CAAA,CAAYysF,CAAZ,CAAJ,EACgB,IAId,EAJIpkE,CAIJ,EAHE9P,CAAAiiC,MAAA,CAAW,oCAAX,CAAmDxF,CAAnD,CAA2D,OAA3D,CAAsE62C,CAAtE,CAGF,CADAI,CACA,CADexsF,CACf,CAAAisF,CAAA,EALF,EAOEO,CAPF,CAOiB3iF,CAAA7I,OAAA,CAAagsF,CAAb,CAAwBf,CAAxB,CAEjB,CAAAQ,CAAA,CAAYl3C,CAZd,CAZ8D,CAAhE,CAxBmC,CADhC,CAJ4F,CAA1E,CA/7B3B,CA+uCI03C,GAAc3wF,CAAA,CAAO,OAAP,CA/uClB,CAivCI2W,GAAiB,CAAC,QAAD,CAAW,QAAQ,CAAC+F,CAAD,CAAS,CAC/C,MAAO,CACL+W,SAAW,EADN,CAELC,SAAU,GAFL,CAGLlmB,QAASA,QAAQ,CAACsmB,CAAD,CAAWC,CAAX,CAAmB,CAElC,IAAI0F,EAAiBqC,EAAA,CAAmBz2B,EAAA,CAAUyuB,CAAV,CAAnB,CAArB,CAGItjB,EAASkM,CAAA,CAAOqX,CAAArd,MAAP,CAHb,CAIIoqE,EAAStwE,CAAA44B,OAAT03C;AAA0B,QAAQ,EAAG,CACvC,KAAM6P,GAAA,CAAY,WAAZ,CAAyE58D,CAAArd,MAAzE,CAAN,CADuC,CAIzC,OAAO,SAAQ,CAACnJ,CAAD,CAAQjI,CAAR,CAAiBo1B,CAAjB,CAAwB,CACrC,IAAIk2D,CAEJ,IAAIl2D,CAAA35B,eAAA,CAAqB,WAArB,CAAJ,CACE,GAAwB,UAAxB,GAAI25B,CAAAm2D,UAAJ,CACED,CAAA,CAAWtrF,CADb,KAKE,IAFAsrF,CAEKA,CAFMtrF,CAAAoI,KAAA,CAAa,GAAb,CAAmBgtB,CAAAm2D,UAAnB,CAAqC,YAArC,CAEND,CAAAA,CAAAA,CAAL,CACE,KAAMD,GAAA,CACJ,QADI,CAGJj2D,CAAAm2D,UAHI,CAIJ98D,CAAArd,MAJI,CAAN,CADF,CANJ,IAgBEk6E,EAAA,CAAWtrF,CAAAoI,KAAA,CAAa,GAAb,CAAmB+rB,CAAnB,CAAoC,YAApC,CAGbm3D,EAAA,CAAWA,CAAX,EAAuBtrF,CAEvBw7E,EAAA,CAAOvzE,CAAP,CAAcqjF,CAAd,CAGAtrF,EAAA8J,GAAA,CAAW,UAAX,CAAuB,QAAQ,EAAG,CAG5BoB,CAAA,CAAOjD,CAAP,CAAJ,GAAsBqjF,CAAtB,EACE9P,CAAA,CAAOvzE,CAAP,CAAc,IAAd,CAJ8B,CAAlC,CA3BqC,CAVL,CAH/B,CADwC,CAA5B,CAjvCrB,CAotDIsJ,GAAoB,CAAC,QAAD,CAAW,UAAX,CAAuB,UAAvB,CAAmC,QAAQ,CAAC6F,CAAD,CAASlD,CAAT,CAAmB6rE,CAAnB,CAA6B,CAE9F,IAAIyL,EAAiB9wF,CAAA,CAAO,UAAP,CAArB,CAEI+wF,EAAcA,QAAQ,CAACxjF,CAAD,CAAQ7H,CAAR,CAAesrF,CAAf,CAAgCvvF,CAAhC,CAAuCwvF,CAAvC,CAAsDpwF,CAAtD,CAA2DqwF,CAA3D,CAAwE,CAEhG3jF,CAAA,CAAMyjF,CAAN,CAAA,CAAyBvvF,CACrBwvF,EAAJ,GAAmB1jF,CAAA,CAAM0jF,CAAN,CAAnB,CAA0CpwF,CAA1C,CACA0M,EAAAs6D,OAAA,CAAeniE,CACf6H,EAAA4jF,OAAA,CAA0B,CAA1B,GAAgBzrF,CAChB6H,EAAA6jF,MAAA,CAAe1rF,CAAf,GAA0BwrF,CAA1B,CAAwC,CACxC3jF,EAAA8jF,QAAA,CAAgB,EAAE9jF,CAAA4jF,OAAF;AAAkB5jF,CAAA6jF,MAAlB,CAEhB7jF,EAAA+jF,KAAA,CAAa,EAAE/jF,CAAAgkF,MAAF,CAAgC,CAAhC,IAAiB7rF,CAAjB,CAAyB,CAAzB,EATmF,CAFlG,CAsBI8rF,EAAmBA,QAAQ,CAACnuD,CAAD,CAASxiC,CAAT,CAAcY,CAAd,CAAqB,CAClD,MAAO8kB,GAAA,CAAQ9kB,CAAR,CAD2C,CAtBpD,CA0BIgwF,EAAiBA,QAAQ,CAACpuD,CAAD,CAASxiC,CAAT,CAAc,CACzC,MAAOA,EADkC,CAI3C,OAAO,CACL6yB,SAAU,GADL,CAELiQ,aAAc,CAAA,CAFT,CAGLpP,WAAY,SAHP,CAILd,SAAU,GAJL,CAKLsH,SAAU,CAAA,CALL,CAML0G,MAAO,CAAA,CANF,CAOLj0B,QAASkkF,QAAwB,CAAC19D,CAAD,CAAW2D,CAAX,CAAkB,CACjD,IAAIwU,EAAaxU,CAAA/gB,SAAjB,CACI+6E,EAAqBtM,CAAAzjD,gBAAA,CAAyB,cAAzB,CAAyCuK,CAAzC,CADzB,CAGIjlC,EAAQilC,CAAAjlC,MAAA,CAAiB,4FAAjB,CAEZ,IAAKA,CAAAA,CAAL,CACE,KAAM4pF,EAAA,CAAe,MAAf,CACF3kD,CADE,CAAN,CAIF,IAAI6vC,EAAM90E,CAAA,CAAM,CAAN,CAAV,CACI60E,EAAM70E,CAAA,CAAM,CAAN,CADV,CAEI0qF,EAAU1qF,CAAA,CAAM,CAAN,CAFd,CAGI2qF,EAAa3qF,CAAA,CAAM,CAAN,CAHjB,CAKAA,EAAQ80E,CAAA90E,MAAA,CAAU,qDAAV,CAER,IAAKA,CAAAA,CAAL,CACE,KAAM4pF,EAAA,CAAe,QAAf;AACF9U,CADE,CAAN,CAGF,IAAIgV,EAAkB9pF,CAAA,CAAM,CAAN,CAAlB8pF,EAA8B9pF,CAAA,CAAM,CAAN,CAAlC,CACI+pF,EAAgB/pF,CAAA,CAAM,CAAN,CAEpB,IAAI0qF,CAAJ,GAAiB,CAAA,4BAAA/sF,KAAA,CAAkC+sF,CAAlC,CAAjB,EACI,2FAAA/sF,KAAA,CAAiG+sF,CAAjG,CADJ,EAEE,KAAMd,EAAA,CAAe,UAAf,CACJc,CADI,CAAN,CAIF,IAAIE,CAEJ,IAAID,CAAJ,CAAgB,CACd,IAAIE,EAAe,CAAC/nC,IAAKzjC,EAAN,CAAnB,CACIyrE,EAAmBt1E,CAAA,CAAOm1E,CAAP,CAEvBC,EAAA,CAAiBA,QAAQ,CAACzuD,CAAD,CAASxiC,CAAT,CAAcY,CAAd,CAAqBiE,CAArB,CAA4B,CAE/CurF,CAAJ,GAAmBc,CAAA,CAAad,CAAb,CAAnB,CAAiDpwF,CAAjD,CACAkxF,EAAA,CAAaf,CAAb,CAAA,CAAgCvvF,CAChCswF,EAAAlqB,OAAA,CAAsBniE,CACtB,OAAOssF,EAAA,CAAiB3uD,CAAjB,CAAyB0uD,CAAzB,CAL4C,CAJvC,CAahB,MAAOE,SAAqB,CAAC5uD,CAAD,CAASrP,CAAT,CAAmB2D,CAAnB,CAA0B+oC,CAA1B,CAAgCp9B,CAAhC,CAA6C,CAUvE,IAAI4uD,EAAenqF,CAAA,EAGnBs7B,EAAAmG,iBAAA,CAAwBuyC,CAAxB,CAA6BoW,QAAuB,CAAC3/D,CAAD,CAAa,CAAA,IAC3D9sB,CAD2D,CACpDnF,CADoD,CAE3D6xF,EAAep+D,CAAA,CAAS,CAAT,CAF4C,CAI3Dq+D,CAJ2D,CAO3DC,EAAevqF,CAAA,EAP4C,CAQ3DwqF,CAR2D,CAS3D1xF,CAT2D,CAStDY,CATsD,CAU3D+wF,CAV2D,CAY3DC,CAZ2D,CAa3Dv/E,CAb2D,CAc3Dw/E,CAGAd,EAAJ,GACEvuD,CAAA,CAAOuuD,CAAP,CADF,CACoBp/D,CADpB,CAIA,IAAIvyB,EAAA,CAAYuyB,CAAZ,CAAJ,CACEigE,CACA,CADiBjgE,CACjB,CAAAmgE,CAAA,CAAcb,CAAd,EAAgCN,CAFlC,KAOE,KAAS7F,CAAT,GAHAgH,EAGoBngE,CAHNs/D,CAGMt/D,EAHYi/D,CAGZj/D,CADpBigE,CACoBjgE,CADH,EACGA,CAAAA,CAApB,CACMzxB,EAAAC,KAAA,CAAoBwxB,CAApB,CAAgCm5D,CAAhC,CAAJ,EAAsE,GAAtE,GAAgDA,CAAA3jF,OAAA,CAAe,CAAf,CAAhD,EACEyqF,CAAAxsF,KAAA,CAAoB0lF,CAApB,CAKN4G;CAAA,CAAmBE,CAAAlyF,OACnBmyF,EAAA,CAAqBtuF,KAAJ,CAAUmuF,CAAV,CAGjB,KAAK7sF,CAAL,CAAa,CAAb,CAAgBA,CAAhB,CAAwB6sF,CAAxB,CAA0C7sF,CAAA,EAA1C,CAIE,GAHA7E,CAGI,CAHG2xB,CAAD,GAAgBigE,CAAhB,CAAkC/sF,CAAlC,CAA0C+sF,CAAA,CAAe/sF,CAAf,CAG5C,CAFJjE,CAEI,CAFI+wB,CAAA,CAAW3xB,CAAX,CAEJ,CADJ2xF,CACI,CADQG,CAAA,CAAYtvD,CAAZ,CAAoBxiC,CAApB,CAAyBY,CAAzB,CAAgCiE,CAAhC,CACR,CAAAwsF,CAAA,CAAaM,CAAb,CAAJ,CAEEt/E,CAGA,CAHQg/E,CAAA,CAAaM,CAAb,CAGR,CAFA,OAAON,CAAA,CAAaM,CAAb,CAEP,CADAF,CAAA,CAAaE,CAAb,CACA,CAD0Bt/E,CAC1B,CAAAw/E,CAAA,CAAehtF,CAAf,CAAA,CAAwBwN,CAL1B,KAMO,CAAA,GAAIo/E,CAAA,CAAaE,CAAb,CAAJ,CAKL,KAHA9xF,EAAA,CAAQgyF,CAAR,CAAwB,QAAQ,CAACx/E,CAAD,CAAQ,CAClCA,CAAJ,EAAaA,CAAA3F,MAAb,GAA0B2kF,CAAA,CAAah/E,CAAA+d,GAAb,CAA1B,CAAmD/d,CAAnD,CADsC,CAAxC,CAGM,CAAA49E,CAAA,CAAe,OAAf,CAEF3kD,CAFE,CAEUqmD,CAFV,CAEqB/wF,CAFrB,CAAN,CAKAixF,CAAA,CAAehtF,CAAf,CAAA,CAAwB,CAACurB,GAAIuhE,CAAL,CAAgBjlF,MAAO/G,IAAAA,EAAvB,CAAkC1D,MAAO0D,IAAAA,EAAzC,CACxB8rF,EAAA,CAAaE,CAAb,CAAA,CAA0B,CAAA,CAXrB,CAiBLT,CAAJ,GACEA,CAAA,CAAaf,CAAb,CADF,CACkCxqF,IAAAA,EADlC,CAKA,KAASosF,CAAT,GAAqBV,EAArB,CAAmC,CACjCh/E,CAAA,CAAQg/E,CAAA,CAAaU,CAAb,CACRlrD,EAAA,CAAmB72B,EAAA,CAAcqC,CAAApQ,MAAd,CACnB0W,EAAAu4D,MAAA,CAAerqC,CAAf,CACA,IAAIA,CAAA,CAAiB,CAAjB,CAAAnkB,WAAJ,CAGE,IAAK7d,CAAW,CAAH,CAAG,CAAAnF,CAAA,CAASmnC,CAAAnnC,OAAzB,CAAkDmF,CAAlD,CAA0DnF,CAA1D,CAAkEmF,CAAA,EAAlE,CACEgiC,CAAA,CAAiBhiC,CAAjB,CAAA,aAAA,CAAsC,CAAA,CAG1CwN,EAAA3F,MAAAyC,SAAA,EAXiC,CAenC,IAAKtK,CAAL,CAAa,CAAb,CAAgBA,CAAhB,CAAwB6sF,CAAxB,CAA0C7sF,CAAA,EAA1C,CAKE,GAJA7E,CAII0M,CAJGilB,CAAD,GAAgBigE,CAAhB,CAAkC/sF,CAAlC,CAA0C+sF,CAAA,CAAe/sF,CAAf,CAI5C6H,CAHJ9L,CAGI8L,CAHIilB,CAAA,CAAW3xB,CAAX,CAGJ0M,CAFJ2F,CAEI3F,CAFImlF,CAAA,CAAehtF,CAAf,CAEJ6H,CAAA2F,CAAA3F,MAAJ,CAAiB,CAIf8kF,CAAA,CAAWD,CAGX,GACEC,EAAA,CAAWA,CAAAphF,YADb,OAESohF,CAFT,EAEqBA,CAAA,aAFrB,CAIkBn/E,EAvLrBpQ,MAAA,CAAY,CAAZ,CAuLG;AAA6BuvF,CAA7B,EAEE74E,CAAAs4D,KAAA,CAAcjhE,EAAA,CAAcqC,CAAApQ,MAAd,CAAd,CAA0C,IAA1C,CAAgDsvF,CAAhD,CAEFA,EAAA,CAA2Bl/E,CAvL9BpQ,MAAA,CAuL8BoQ,CAvLlBpQ,MAAAvC,OAAZ,CAAiC,CAAjC,CAwLGwwF,EAAA,CAAY79E,CAAA3F,MAAZ,CAAyB7H,CAAzB,CAAgCsrF,CAAhC,CAAiDvvF,CAAjD,CAAwDwvF,CAAxD,CAAuEpwF,CAAvE,CAA4E0xF,CAA5E,CAhBe,CAAjB,IAmBEjvD,EAAA,CAAYuvD,QAA2B,CAAC/vF,CAAD,CAAQyK,CAAR,CAAe,CACpD2F,CAAA3F,MAAA,CAAcA,CAEd,KAAIwD,EAAU4gF,CAAA/uF,UAAA,CAA6B,CAAA,CAA7B,CACdE,EAAA,CAAMA,CAAAvC,OAAA,EAAN,CAAA,CAAwBwQ,CAExByI,EAAAq4D,MAAA,CAAe/uE,CAAf,CAAsB,IAAtB,CAA4BsvF,CAA5B,CACAA,EAAA,CAAerhF,CAIfmC,EAAApQ,MAAA,CAAcA,CACdwvF,EAAA,CAAap/E,CAAA+d,GAAb,CAAA,CAAyB/d,CACzB69E,EAAA,CAAY79E,CAAA3F,MAAZ,CAAyB7H,CAAzB,CAAgCsrF,CAAhC,CAAiDvvF,CAAjD,CAAwDwvF,CAAxD,CAAuEpwF,CAAvE,CAA4E0xF,CAA5E,CAboD,CAAtD,CAiBJL,EAAA,CAAeI,CA/HgD,CAAjE,CAbuE,CA9CxB,CAP9C,CAhCuF,CAAxE,CAptDxB,CAsoEIv7E,GAAkB,CAAC,UAAD,CAAa,QAAQ,CAACyC,CAAD,CAAW,CACpD,MAAO,CACLka,SAAU,GADL,CAELiQ,aAAc,CAAA,CAFT,CAGLjT,KAAMA,QAAQ,CAACnjB,CAAD,CAAQjI,CAAR,CAAiBN,CAAjB,CAAuB,CACnCuI,CAAA7I,OAAA,CAAaM,CAAA8R,OAAb,CAA0Bg8E,QAA0B,CAACrxF,CAAD,CAAQ,CAK1D+X,CAAA,CAAS/X,CAAA,CAAQ,aAAR,CAAwB,UAAjC,CAAA,CAA6C6D,CAA7C,CApNYytF,SAoNZ,CAAqE,CACnE5gB,YApNsB6gB,iBAmN6C,CAArE,CAL0D,CAA5D,CADmC,CAHhC,CAD6C,CAAhC,CAtoEtB,CAi2EIj9E,GAAkB,CAAC,UAAD,CAAa,QAAQ,CAACyD,CAAD,CAAW,CACpD,MAAO,CACLka,SAAU,GADL,CAELiQ,aAAc,CAAA,CAFT,CAGLjT,KAAMA,QAAQ,CAACnjB,CAAD;AAAQjI,CAAR,CAAiBN,CAAjB,CAAuB,CACnCuI,CAAA7I,OAAA,CAAaM,CAAA8Q,OAAb,CAA0Bm9E,QAA0B,CAACxxF,CAAD,CAAQ,CAG1D+X,CAAA,CAAS/X,CAAA,CAAQ,UAAR,CAAqB,aAA9B,CAAA,CAA6C6D,CAA7C,CA7aYytF,SA6aZ,CAAoE,CAClE5gB,YA7asB6gB,iBA4a4C,CAApE,CAH0D,CAA5D,CADmC,CAHhC,CAD6C,CAAhC,CAj2EtB,CAo6EI/7E,GAAmBooD,EAAA,CAAY,QAAQ,CAAC9xD,CAAD,CAAQjI,CAAR,CAAiBN,CAAjB,CAAuB,CAChEuI,CAAAi8B,iBAAA,CAAuBxkC,CAAAgS,QAAvB,CAAqCk8E,QAA2B,CAACC,CAAD,CAAYC,CAAZ,CAAuB,CACjFA,CAAJ,EAAkBD,CAAlB,GAAgCC,CAAhC,EACE1yF,CAAA,CAAQ0yF,CAAR,CAAmB,QAAQ,CAACzqF,CAAD,CAAM8iB,CAAN,CAAa,CAAEnmB,CAAA6nE,IAAA,CAAY1hD,CAAZ,CAAmB,EAAnB,CAAF,CAAxC,CAEE0nE,EAAJ,EAAe7tF,CAAA6nE,IAAA,CAAYgmB,CAAZ,CAJsE,CAAvF,CADgE,CAA3C,CAp6EvB,CAsjFIh8E,GAAoB,CAAC,UAAD,CAAa,UAAb,CAAyB,QAAQ,CAACqC,CAAD,CAAW6rE,CAAX,CAAqB,CAC5E,MAAO,CACLxyD,QAAS,UADJ,CAILtjB,WAAY,CAAC,QAAD,CAAW8jF,QAA2B,EAAG,CACpD,IAAAC,MAAA,CAAa,EADuC,CAAzC,CAJP,CAOL5iE,KAAMA,QAAQ,CAACnjB,CAAD,CAAQjI,CAAR,CAAiBN,CAAjB,CAAuBuuF,CAAvB,CAA2C,CAAA,IAEnDC,EAAsB,EAF6B,CAGnDC,EAAmB,EAHgC,CAInDC,EAA0B,EAJyB,CAKnDC,EAAiB,EALkC,CAOnDC,EAAgBA,QAAQ,CAACnuF,CAAD,CAAQC,CAAR,CAAe,CACvC,MAAO,SAAQ,CAACyqC,CAAD,CAAW,CACP,CAAA,CAAjB,GAAIA,CAAJ,EAAwB1qC,CAAAG,OAAA,CAAaF,CAAb,CAAoB,CAApB,CADA,CADa,CAM3C6H,EAAA7I,OAAA,CAZgBM,CAAAkS,SAYhB,EAZiClS,CAAAoK,GAYjC,CAAwBykF,QAA4B,CAACpyF,CAAD,CAAQ,CAI1D,IAJ0D,IACtDH,CADsD;AACnDY,CAGP,CAAOwxF,CAAAnzF,OAAP,CAAA,CACEiZ,CAAAwW,OAAA,CAAgB0jE,CAAAtgC,IAAA,EAAhB,CAGG9xD,EAAA,CAAI,CAAT,KAAYY,CAAZ,CAAiByxF,CAAApzF,OAAjB,CAAwCe,CAAxC,CAA4CY,CAA5C,CAAgD,EAAEZ,CAAlD,CAAqD,CACnD,IAAIqsE,EAAW98D,EAAA,CAAc4iF,CAAA,CAAiBnyF,CAAjB,CAAAwB,MAAd,CACf6wF,EAAA,CAAeryF,CAAf,CAAA0O,SAAA,EAEAgiC,EADa0hD,CAAA,CAAwBpyF,CAAxB,CACb0wC,CAD0Cx4B,CAAAu4D,MAAA,CAAepE,CAAf,CAC1C37B,MAAA,CAAY4hD,CAAA,CAAcF,CAAd,CAAuCpyF,CAAvC,CAAZ,CAJmD,CAOrDmyF,CAAAlzF,OAAA,CAA0B,CAC1BozF,EAAApzF,OAAA,CAAwB,CAExB,EAAKizF,CAAL,CAA2BD,CAAAD,MAAA,CAAyB,GAAzB,CAA+B7xF,CAA/B,CAA3B,EAAoE8xF,CAAAD,MAAA,CAAyB,GAAzB,CAApE,GACE5yF,CAAA,CAAQ8yF,CAAR,CAA6B,QAAQ,CAACM,CAAD,CAAqB,CACxDA,CAAAv/D,WAAA,CAA8B,QAAQ,CAACw/D,CAAD,CAAcC,CAAd,CAA6B,CACjEL,CAAA1tF,KAAA,CAAoB+tF,CAApB,CACA,KAAIC,EAASH,CAAAxuF,QACbyuF,EAAA,CAAYA,CAAAxzF,OAAA,EAAZ,CAAA,CAAoC8kF,CAAAzjD,gBAAA,CAAyB,kBAAzB,CAGpC6xD,EAAAxtF,KAAA,CAFYiN,CAAEpQ,MAAOixF,CAAT7gF,CAEZ,CACAsG,EAAAq4D,MAAA,CAAekiB,CAAf,CAA4BE,CAAA1wF,OAAA,EAA5B,CAA6C0wF,CAA7C,CAPiE,CAAnE,CADwD,CAA1D,CAnBwD,CAA5D,CAbuD,CAPpD,CADqE,CAAtD,CAtjFxB,CA+mFI58E,GAAwBgoD,EAAA,CAAY,CACtC9qC,WAAY,SAD0B,CAEtCd,SAAU,IAF4B,CAGtCZ,QAAS,WAH6B,CAItC8Q,aAAc,CAAA,CAJwB,CAKtCjT,KAAMA,QAAQ,CAACnjB,CAAD,CAAQjI,CAAR,CAAiBo1B,CAAjB,CAAwBgmC,CAAxB,CAA8Bp9B,CAA9B,CAA2C,CAEnDgwD,CAAAA,CAAQ54D,CAAAtjB,aAAAhS,MAAA,CAAyBs1B,CAAAw5D,sBAAzB,CAAA7yF,KAAA,EAAAyR,OAAA,CAEV,QAAQ,CAACxN,CAAD;AAAUI,CAAV,CAAiBD,CAAjB,CAAwB,CAAE,MAAOA,EAAA,CAAMC,CAAN,CAAc,CAAd,CAAP,GAA4BJ,CAA9B,CAFtB,CAKZ5E,EAAA,CAAQ4yF,CAAR,CAAe,QAAQ,CAACa,CAAD,CAAW,CAChCzzB,CAAA4yB,MAAA,CAAW,GAAX,CAAiBa,CAAjB,CAAA,CAA8BzzB,CAAA4yB,MAAA,CAAW,GAAX,CAAiBa,CAAjB,CAA9B,EAA4D,EAC5DzzB,EAAA4yB,MAAA,CAAW,GAAX,CAAiBa,CAAjB,CAAAluF,KAAA,CAAgC,CAAEsuB,WAAY+O,CAAd,CAA2Bh+B,QAASA,CAApC,CAAhC,CAFgC,CAAlC,CAPuD,CALnB,CAAZ,CA/mF5B,CAkoFIiS,GAA2B8nD,EAAA,CAAY,CACzC9qC,WAAY,SAD6B,CAEzCd,SAAU,IAF+B,CAGzCZ,QAAS,WAHgC,CAIzC8Q,aAAc,CAAA,CAJ2B,CAKzCjT,KAAMA,QAAQ,CAACnjB,CAAD,CAAQjI,CAAR,CAAiBN,CAAjB,CAAuB07D,CAAvB,CAA6Bp9B,CAA7B,CAA0C,CACtDo9B,CAAA4yB,MAAA,CAAW,GAAX,CAAA,CAAmB5yB,CAAA4yB,MAAA,CAAW,GAAX,CAAnB,EAAsC,EACtC5yB,EAAA4yB,MAAA,CAAW,GAAX,CAAArtF,KAAA,CAAqB,CAAEsuB,WAAY+O,CAAd,CAA2Bh+B,QAASA,CAApC,CAArB,CAFsD,CALf,CAAZ,CAloF/B,CA2yFI8uF,GAAqBp0F,CAAA,CAAO,cAAP,CA3yFzB,CA4yFI2X,GAAwB,CAAC,UAAD,CAAa,QAAQ,CAAC0tE,CAAD,CAAW,CAC1D,MAAO,CACL3xD,SAAU,KADL,CAELlmB,QAAS6mF,QAA4B,CAACvgE,CAAD,CAAW,CAG9C,IAAIwgE,EAAiBjP,CAAA,CAASvxD,CAAAqO,SAAA,EAAT,CACrBrO,EAAAxpB,MAAA,EAEA,OAAOiqF,SAA6B,CAAClxD,CAAD,CAASrP,CAAT,CAAmBC,CAAnB,CAA2B1kB,CAA3B,CAAuC+zB,CAAvC,CAAoD,CAoCtFkxD,QAASA,EAAkB,EAAG,CAG5BF,CAAA,CAAejxD,CAAf,CAAuB,QAAQ,CAACvgC,CAAD,CAAQ,CACrCkxB,CAAAxpB,OAAA,CAAgB1H,CAAhB,CADqC,CAAvC,CAH4B,CAlC9B,GAAKwgC,CAAAA,CAAL,CACE,KAAM8wD,GAAA,CAAmB,QAAnB;AAIN/pF,EAAA,CAAY2pB,CAAZ,CAJM,CAAN,CASEC,CAAAvc,aAAJ,GAA4Buc,CAAA0D,MAAAjgB,aAA5B,GACEuc,CAAAvc,aADF,CACwB,EADxB,CAGIikB,EAAAA,CAAW1H,CAAAvc,aAAXikB,EAAkC1H,CAAAwgE,iBAGtCnxD,EAAA,CAOAoxD,QAAkC,CAAC5xF,CAAD,CAAQs4B,CAAR,CAA0B,CACtD,IAAA,CAAA,IAAA76B,CAAA,CAAAA,CAAAA,OAAA,CAkBwB,CAAA,CAAA,CACnBe,CAAAA,CAAI,CAAb,KAAS,IAAOY,EAnBI4O,CAmBCvQ,OAArB,CAAmCe,CAAnC,CAAuCY,CAAvC,CAA2CZ,CAAA,EAA3C,CAAgD,CAC9C,IAAIwD,EApBcgM,CAoBP,CAAMxP,CAAN,CACX,IAAIwD,CAAA4F,SAAJ,GAAsBC,EAAtB,EAAwC7F,CAAAm2B,UAAAxa,KAAA,EAAxC,CAA+D,CAC7D,CAAA,CAAO,CAAA,CAAP,OAAA,CAD6D,CAFjB,CADpB,CAAA,CAAA,IAAA,EAAA,CAlBxB,CAAJ,CACEuT,CAAAxpB,OAAA,CAAgB1H,CAAhB,CADF,EAGE0xF,CAAA,EAGA,CAAAp5D,CAAAprB,SAAA,EANF,CAD0D,CAP5D,CAAuC,IAAvC,CAA6C2rB,CAA7C,CAGIA,EAAJ,EAAiB,CAAA2H,CAAAlE,aAAA,CAAyBzD,CAAzB,CAAjB,EACE64D,CAAA,EAtBoF,CAN1C,CAF3C,CADmD,CAAhC,CA5yF5B,CA+4FIjgF,GAAkB,CAAC,gBAAD,CAAmB,QAAQ,CAACmJ,CAAD,CAAiB,CAChE,MAAO,CACLgW,SAAU,GADL,CAELqH,SAAU,CAAA,CAFL,CAGLvtB,QAASA,QAAQ,CAAClI,CAAD,CAAUN,CAAV,CAAgB,CACb,kBAAlB,GAAIA,CAAAoC,KAAJ,EAIEsW,CAAA4T,IAAA,CAHkBtsB,CAAAisB,GAGlB,CAFW3rB,CAAA,CAAQ,CAAR,CAAA8/B,KAEX,CAL6B,CAH5B,CADyD,CAA5C,CA/4FtB,CAg6FIuvD,GAAwB,CAAE5yB,cAAer+D,CAAjB,CAAuBg/D,QAASh/D,CAAhC,CAh6F5B,CAqjGIkxF,GACI,CAAC,UAAD;AAAa,QAAb,CAAoC,QAAQ,CAAC5gE,CAAD,CAAWqP,CAAX,CAAmB,CA0MrEwxD,QAASA,EAAc,EAAG,CACpBC,CAAJ,GACAA,CACA,CADkB,CAAA,CAClB,CAAAzxD,CAAAiF,aAAA,CAAoB,QAAQ,EAAG,CAC7BwsD,CAAA,CAAkB,CAAA,CAClBzsF,EAAAslF,YAAAjrB,QAAA,EAF6B,CAA/B,CAFA,CADwB,CAU1BqyB,QAASA,EAAuB,CAACC,CAAD,CAAc,CACxCC,CAAJ,GAEAA,CAEA,CAFkB,CAAA,CAElB,CAAA5xD,CAAAiF,aAAA,CAAoB,QAAQ,EAAG,CACzBjF,CAAAqB,YAAJ,GAEAuwD,CAEA,CAFkB,CAAA,CAElB,CADA5sF,CAAAslF,YAAA5rB,cAAA,CAA+B15D,CAAAimF,UAAA,EAA/B,CACA,CAAI0G,CAAJ,EAAiB3sF,CAAAslF,YAAAjrB,QAAA,EAJjB,CAD6B,CAA/B,CAJA,CAD4C,CApNuB,IAEjEr6D,EAAO,IAF0D,CAGjE6sF,EAAa,IAAIlrE,EAErB3hB,EAAA0kF,eAAA,CAAsB,EAGtB1kF,EAAAslF,YAAA,CAAmBgH,EACnBtsF,EAAAqlE,SAAA,CAAgB,CAAA,CAShBrlE,EAAA0lF,cAAA,CAAqBztF,CAAA,CAAOnB,CAAAyJ,SAAA+W,cAAA,CAA8B,QAA9B,CAAP,CASrBtX,EAAAulF,eAAA,CAAsB,CAAA,CACtBvlF,EAAAwlF,YAAA,CAAmBrnF,IAAAA,EAEnB6B,EAAA8sF,oBAAA,CAA2BC,QAAQ,CAACzsF,CAAD,CAAM,CACnC0sF,CAAAA,CAAahtF,CAAA4lF,2BAAA,CAAgCtlF,CAAhC,CACjBN,EAAA0lF,cAAAplF,IAAA,CAAuB0sF,CAAvB,CACArhE;CAAAy6C,QAAA,CAAiBpmE,CAAA0lF,cAAjB,CACA5jB,GAAA,CAAwB9hE,CAAA0lF,cAAxB,CAA4C,CAAA,CAA5C,CACA/5D,EAAArrB,IAAA,CAAa0sF,CAAb,CALuC,CAQzChtF,EAAAitF,oBAAA,CAA2BC,QAAQ,CAAC5sF,CAAD,CAAM,CACnC0sF,CAAAA,CAAahtF,CAAA4lF,2BAAA,CAAgCtlF,CAAhC,CACjBN,EAAA0lF,cAAAplF,IAAA,CAAuB0sF,CAAvB,CACAlrB,GAAA,CAAwB9hE,CAAA0lF,cAAxB,CAA4C,CAAA,CAA5C,CACA/5D,EAAArrB,IAAA,CAAa0sF,CAAb,CAJuC,CAOzChtF,EAAA4lF,2BAAA,CAAkCuH,QAAQ,CAAC7sF,CAAD,CAAM,CAC9C,MAAO,IAAP,CAAc4d,EAAA,CAAQ5d,CAAR,CAAd,CAA6B,IADiB,CAIhDN,EAAAumF,oBAAA,CAA2B6G,QAAQ,EAAG,CAChCptF,CAAA0lF,cAAAxqF,OAAA,EAAJ,EAAiC8E,CAAA0lF,cAAAv8D,OAAA,EADG,CAItCnpB,EAAAqtF,kBAAA,CAAyBC,QAAQ,EAAG,CAC9BttF,CAAAwlF,YAAJ,GACE75D,CAAArrB,IAAA,CAAa,EAAb,CACA,CAAAwhE,EAAA,CAAwB9hE,CAAAwlF,YAAxB,CAA0C,CAAA,CAA1C,CAFF,CADkC,CAOpCxlF,EAAAymF,oBAAA,CAA2B8G,QAAQ,EAAG,CAChCvtF,CAAAulF,eAAJ,EACEzjB,EAAA,CAAwB9hE,CAAAwlF,YAAxB,CAA0C,CAAA,CAA1C,CAFkC,CAMtCxqD,EAAAvD,IAAA,CAAW,UAAX;AAAuB,QAAQ,EAAG,CAEhCz3B,CAAA8sF,oBAAA,CAA2BzxF,CAFK,CAAlC,CAOA2E,EAAAimF,UAAA,CAAiBuH,QAAwB,EAAG,CAC1C,IAAIltF,EAAMqrB,CAAArrB,IAAA,EAAV,CAEImtF,EAAUntF,CAAA,GAAON,EAAA0kF,eAAP,CAA6B1kF,CAAA0kF,eAAA,CAAoBpkF,CAApB,CAA7B,CAAwDA,CAEtE,OAAIN,EAAA0tF,UAAA,CAAeD,CAAf,CAAJ,CACSA,CADT,CAIO,IATmC,CAe5CztF,EAAA8lF,WAAA,CAAkB6H,QAAyB,CAACv0F,CAAD,CAAQ,CAGjD,IAAIw0F,EAA0BjiE,CAAA,CAAS,CAAT,CAAApH,QAAA,CAAoBoH,CAAA,CAAS,CAAT,CAAA26D,cAApB,CAC1BsH,EAAJ,EAA6B9rB,EAAA,CAAwB7pE,CAAA,CAAO21F,CAAP,CAAxB,CAAyD,CAAA,CAAzD,CAEzB5tF,EAAA0tF,UAAA,CAAet0F,CAAf,CAAJ,EACE4G,CAAAumF,oBAAA,EAOA,CALIsH,CAKJ,CALgB3vE,EAAA,CAAQ9kB,CAAR,CAKhB,CAJAuyB,CAAArrB,IAAA,CAAautF,CAAA,GAAa7tF,EAAA0kF,eAAb,CAAmCmJ,CAAnC,CAA+Cz0F,CAA5D,CAIA,CAAA0oE,EAAA,CAAwB7pE,CAAA,CADH0zB,CAAA,CAAS,CAAT,CAAApH,QAAA8hE,CAAoB16D,CAAA,CAAS,CAAT,CAAA26D,cAApBD,CACG,CAAxB,CAAgD,CAAA,CAAhD,CARF,EAUErmF,CAAAwmF,2BAAA,CAAgCptF,CAAhC,CAhB+C,CAsBnD4G,EAAAgnF,UAAA,CAAiB8G,QAAQ,CAAC10F,CAAD,CAAQ6D,CAAR,CAAiB,CAExC,GAztgCoB23B,CAytgCpB,GAAI33B,CAAA,CAAQ,CAAR,CAAAoF,SAAJ,CAAA,CAEA6F,EAAA,CAAwB9O,CAAxB,CAA+B,gBAA/B,CACc,GAAd,GAAIA,CAAJ,GACE4G,CAAAulF,eACA,CADsB,CAAA,CACtB,CAAAvlF,CAAAwlF,YAAA;AAAmBvoF,CAFrB,CAIA,KAAI2zC,EAAQi8C,CAAA3mF,IAAA,CAAe9M,CAAf,CAARw3C,EAAiC,CACrCi8C,EAAAnuF,IAAA,CAAetF,CAAf,CAAsBw3C,CAAtB,CAA8B,CAA9B,CAGA47C,EAAA,EAXA,CAFwC,CAiB1CxsF,EAAA+tF,aAAA,CAAoBC,QAAQ,CAAC50F,CAAD,CAAQ,CAClC,IAAIw3C,EAAQi8C,CAAA3mF,IAAA,CAAe9M,CAAf,CACRw3C,EAAJ,GACgB,CAAd,GAAIA,CAAJ,EACEi8C,CAAAtlB,OAAA,CAAkBnuE,CAAlB,CACA,CAAc,EAAd,GAAIA,CAAJ,GACE4G,CAAAulF,eACA,CADsB,CAAA,CACtB,CAAAvlF,CAAAwlF,YAAA,CAAmBrnF,IAAAA,EAFrB,CAFF,EAOE0uF,CAAAnuF,IAAA,CAAetF,CAAf,CAAsBw3C,CAAtB,CAA8B,CAA9B,CARJ,CAFkC,CAgBpC5wC,EAAA0tF,UAAA,CAAiBO,QAAQ,CAAC70F,CAAD,CAAQ,CAC/B,MAAO,CAAE,CAAAyzF,CAAA3mF,IAAA,CAAe9M,CAAf,CADsB,CAcjC4G,EAAAkuF,gBAAA,CAAuBC,QAAQ,EAAG,CAChC,MAAOnuF,EAAAulF,eADyB,CAclCvlF,EAAAouF,yBAAA,CAAgCC,QAAQ,EAAG,CAEzC,MAAO1iE,EAAA,CAAS,CAAT,CAAApH,QAAA,CAAoB,CAApB,CAAP,GAAkCvkB,CAAA0lF,cAAA,CAAmB,CAAnB,CAFO,CAe3C1lF,EAAA6mF,uBAAA,CAA8ByH,QAAQ,EAAG,CACvC,MAAOtuF,EAAAulF,eAAP,EAA8B55D,CAAA,CAAS,CAAT,CAAApH,QAAA,CAAoBoH,CAAA,CAAS,CAAT,CAAA26D,cAApB,CAA9B,GAAiFtmF,CAAAwlF,YAAA,CAAiB,CAAjB,CAD1C,CAIzCxlF,EAAAwmF,2BAAA,CAAkC+H,QAAQ,CAACn1F,CAAD,CAAQ,CACnC,IAAb;AAAIA,CAAJ,EAAqB4G,CAAAwlF,YAArB,EACExlF,CAAAumF,oBAAA,EACA,CAAAvmF,CAAAqtF,kBAAA,EAFF,EAGWrtF,CAAA0lF,cAAAxqF,OAAA,EAAAhD,OAAJ,CACL8H,CAAAitF,oBAAA,CAAyB7zF,CAAzB,CADK,CAGL4G,CAAA8sF,oBAAA,CAAyB1zF,CAAzB,CAP8C,CAWlD,KAAIqzF,EAAkB,CAAA,CAAtB,CAUIG,EAAkB,CAAA,CAgBtB5sF,EAAAilF,eAAA,CAAsBuJ,QAAQ,CAAC7H,CAAD,CAAcO,CAAd,CAA6BuH,CAA7B,CAA0CC,CAA1C,CAA8DC,CAA9D,CAAiF,CAE7G,GAAIF,CAAAn/D,MAAA7e,QAAJ,CAA+B,CAAA,IAEzByT,CAFyB,CAEjB2pE,CACZY,EAAA7tD,SAAA,CAAqB,OAArB,CAA8BguD,QAAoC,CAAC3qE,CAAD,CAAS,CAEzE,IAAI4qE,CAAJ,CACIC,EAAqB5H,CAAAxqF,KAAA,CAAmB,UAAnB,CAErBxF,EAAA,CAAU22F,CAAV,CAAJ,GACE7tF,CAAA+tF,aAAA,CAAkB7pE,CAAlB,CAEA,CADA,OAAOlkB,CAAA0kF,eAAA,CAAoBmJ,CAApB,CACP,CAAAgB,CAAA,CAAU,CAAA,CAHZ,CAMAhB,EAAA,CAAY3vE,EAAA,CAAQ+F,CAAR,CACZC,EAAA,CAASD,CACTjkB,EAAA0kF,eAAA,CAAoBmJ,CAApB,CAAA,CAAiC5pE,CACjCjkB,EAAAgnF,UAAA,CAAe/iE,CAAf,CAAuBijE,CAAvB,CAIAA,EAAAvqF,KAAA,CAAmB,OAAnB,CAA4BkxF,CAA5B,CAEIgB,EAAJ,EAAeC,CAAf,EACEpC,CAAA,EArBuE,CAA3E,CAH6B,CAA/B,IA4BWgC,EAAJ,CAELD,CAAA7tD,SAAA,CAAqB,OAArB,CAA8BguD,QAAoC,CAAC3qE,CAAD,CAAS,CAEzEjkB,CAAAimF,UAAA,EAEA,KAAI4I,CAAJ,CACIC,EAAqB5H,CAAAxqF,KAAA,CAAmB,UAAnB,CAErBxF;CAAA,CAAUgtB,CAAV,CAAJ,GACElkB,CAAA+tF,aAAA,CAAkB7pE,CAAlB,CACA,CAAA2qE,CAAA,CAAU,CAAA,CAFZ,CAIA3qE,EAAA,CAASD,CACTjkB,EAAAgnF,UAAA,CAAe/iE,CAAf,CAAuBijE,CAAvB,CAEI2H,EAAJ,EAAeC,CAAf,EACEpC,CAAA,EAfuE,CAA3E,CAFK,CAoBIiC,CAAJ,CAELhI,CAAAtqF,OAAA,CAAmBsyF,CAAnB,CAAsCI,QAA+B,CAAC9qE,CAAD,CAASC,CAAT,CAAiB,CACpFuqE,CAAAhzD,KAAA,CAAiB,OAAjB,CAA0BxX,CAA1B,CACA,KAAI6qE,EAAqB5H,CAAAxqF,KAAA,CAAmB,UAAnB,CACrBwnB,EAAJ,GAAeD,CAAf,EACEjkB,CAAA+tF,aAAA,CAAkB7pE,CAAlB,CAEFlkB,EAAAgnF,UAAA,CAAe/iE,CAAf,CAAuBijE,CAAvB,CAEIhjE,EAAJ,EAAc4qE,CAAd,EACEpC,CAAA,EATkF,CAAtF,CAFK,CAgBL1sF,CAAAgnF,UAAA,CAAeyH,CAAAr1F,MAAf,CAAkC8tF,CAAlC,CAIFuH,EAAA7tD,SAAA,CAAqB,UAArB,CAAiC,QAAQ,CAAC3c,CAAD,CAAS,CAKhD,GAAe,MAAf,GAAIA,CAAJ,EAAyBA,CAAzB,EAAmCijE,CAAAxqF,KAAA,CAAmB,UAAnB,CAAnC,CACMsD,CAAAqlE,SAAJ,CACEqnB,CAAA,CAAwB,CAAA,CAAxB,CADF,EAGE1sF,CAAAslF,YAAA5rB,cAAA,CAA+B,IAA/B,CACA,CAAA15D,CAAAslF,YAAAjrB,QAAA,EAJF,CAN8C,CAAlD,CAeA6sB,EAAAngF,GAAA,CAAiB,UAAjB,CAA6B,QAAQ,EAAG,CACtC,IAAIg5B,EAAe//B,CAAAimF,UAAA,EAAnB,CACI+I,EAAcP,CAAAr1F,MAElB4G,EAAA+tF,aAAA,CAAkBiB,CAAlB,CACAxC,EAAA,EAEA,EAAIxsF,CAAAqlE,SAAJ,EAAqBtlC,CAArB,EAA4E,EAA5E,GAAqCA,CAAAziC,QAAA,CAAqB0xF,CAArB,CAArC,EACIjvD,CADJ,GACqBivD,CADrB,GAKEtC,CAAA,CAAwB,CAAA,CAAxB,CAZoC,CAAxC,CArF6G,CAnO1C,CAA/D,CAtjGR,CAioHItgF,GAAkBA,QAAQ,EAAG,CAE/B,MAAO,CACLif,SAAU,GADL;AAELb,QAAS,CAAC,QAAD,CAAW,UAAX,CAFJ,CAGLtjB,WAAYqlF,EAHP,CAILnhE,SAAU,CAJL,CAKL/C,KAAM,CACJ4N,IAKJg5D,QAAsB,CAAC/pF,CAAD,CAAQjI,CAAR,CAAiBN,CAAjB,CAAuB47E,CAAvB,CAA8B,CAEhD,IAAI8M,EAAa9M,CAAA,CAAM,CAAN,CAAjB,CACI+M,EAAc/M,CAAA,CAAM,CAAN,CAIlB,IAAK+M,CAAL,CAsBA,IAhBAD,CAAAC,YAgBIjgB,CAhBqBigB,CAgBrBjgB,CAXJpoE,CAAA8J,GAAA,CAAW,QAAX,CAAqB,QAAQ,EAAG,CAC9Bs+E,CAAAkB,oBAAA,EACArhF,EAAAE,OAAA,CAAa,QAAQ,EAAG,CACtBkgF,CAAA5rB,cAAA,CAA0B2rB,CAAAY,UAAA,EAA1B,CADsB,CAAxB,CAF8B,CAAhC,CAWI5gB,CAAA1oE,CAAA0oE,SAAJ,CAAmB,CACjBggB,CAAAhgB,SAAA,CAAsB,CAAA,CAGtBggB,EAAAY,UAAA,CAAuBC,QAA0B,EAAG,CAClD,IAAI9oF,EAAQ,EACZ/E,EAAA,CAAQ4E,CAAAL,KAAA,CAAa,QAAb,CAAR,CAAgC,QAAQ,CAACyP,CAAD,CAAS,CAC3CA,CAAAi5D,SAAJ,EAAwB2d,CAAA52E,CAAA42E,SAAxB,GACM3iF,CACJ,CADU+L,CAAAjT,MACV,CAAAgE,CAAAQ,KAAA,CAAW0C,CAAA,GAAO+kF,EAAAX,eAAP,CAAmCW,CAAAX,eAAA,CAA0BpkF,CAA1B,CAAnC,CAAoEA,CAA/E,CAFF,CAD+C,CAAjD,CAMA,OAAOlD,EAR2C,CAYpDioF,EAAAS,WAAA,CAAwBC,QAA2B,CAAC3sF,CAAD,CAAQ,CACzDf,CAAA,CAAQ4E,CAAAL,KAAA,CAAa,QAAb,CAAR,CAAgC,QAAQ,CAACyP,CAAD,CAAS,CAC/C,IAAI6iF,EAAmB,CAAE91F,CAAAA,CAArB81F,GArgkCuC,EAqgkCvCA,GArgkCPnzF,KAAA8iB,UAAAvhB,QAAA3E,KAAA,CAqgkC+CS,CArgkC/C;AAqgkCsDiT,CAAAjT,MArgkCtD,CAqgkCO81F,EArgkCuC,EAqgkCvCA,GArgkCPnzF,KAAA8iB,UAAAvhB,QAAA3E,KAAA,CAsgkC+CS,CAtgkC/C,CAsgkCsDisF,CAAAX,eAAA7sF,CAA0BwU,CAAAjT,MAA1BvB,CAtgkCtD,CAqgkCOq3F,CAWAA,EAAJ,GATwB7iF,CAAAi5D,SASxB,EACExD,EAAA,CAAwB7pE,CAAA,CAAOoU,CAAP,CAAxB,CAAwC6iF,CAAxC,CAb6C,CAAjD,CADyD,CAhB1C,KAsCbC,CAtCa,CAsCHC,EAAc93F,GAC5B4N,EAAA7I,OAAA,CAAagzF,QAA4B,EAAG,CACtCD,CAAJ,GAAoB9J,CAAA9rB,WAApB,EAA+Cr6D,EAAA,CAAOgwF,CAAP,CAAiB7J,CAAA9rB,WAAjB,CAA/C,GACE21B,CACA,CADWrkF,EAAA,CAAYw6E,CAAA9rB,WAAZ,CACX,CAAA8rB,CAAAjrB,QAAA,EAFF,CAIA+0B,EAAA,CAAc9J,CAAA9rB,WAL4B,CAA5C,CAUA8rB,EAAAnsB,SAAA,CAAuBm2B,QAAQ,CAACl2F,CAAD,CAAQ,CACrC,MAAO,CAACA,CAAR,EAAkC,CAAlC,GAAiBA,CAAAlB,OADoB,CAjDtB,CAAnB,CAtBA,IACEmtF,EAAAJ,eAAA,CAA4B5pF,CARkB,CAN5C,CAEJ66B,KAyFFq5D,QAAuB,CAACrqF,CAAD,CAAQjI,CAAR,CAAiBo1B,CAAjB,CAAwBkmD,CAAxB,CAA+B,CAEpD,IAAI+M,EAAc/M,CAAA,CAAM,CAAN,CAClB,IAAK+M,CAAL,CAAA,CAEA,IAAID,EAAa9M,CAAA,CAAM,CAAN,CAOjB+M,EAAAjrB,QAAA,CAAsBm1B,QAAQ,EAAG,CAC/BnK,CAAAS,WAAA,CAAsBR,CAAA9rB,WAAtB,CAD+B,CATjC,CAHoD,CA3FhD,CALD,CAFwB,CAjoHjC,CAyvHIltD,GAAkB,CAAC,cAAD,CAAiB,QAAQ,CAACyG,CAAD,CAAe,CAC5D,MAAO,CACLsY,SAAU,GADL,CAELD,SAAU,GAFL,CAGLjmB,QAASA,QAAQ,CAAClI,CAAD,CAAUN,CAAV,CAAgB,CAAA,IAC3B+xF,CAD2B,CACPC,CAEpBz3F,EAAA,CAAUyF,CAAA8T,QAAV,CAAJ;CAEWvZ,CAAA,CAAUyF,CAAAvD,MAAV,CAAJ,CAELs1F,CAFK,CAEgB37E,CAAA,CAAapW,CAAAvD,MAAb,CAAyB,CAAA,CAAzB,CAFhB,EAMLu1F,CANK,CAMe57E,CAAA,CAAa9V,CAAA8/B,KAAA,EAAb,CAA6B,CAAA,CAA7B,CANf,GAQHpgC,CAAA8+B,KAAA,CAAU,OAAV,CAAmBx+B,CAAA8/B,KAAA,EAAnB,CAVJ,CAcA,OAAO,SAAQ,CAAC73B,CAAD,CAAQjI,CAAR,CAAiBN,CAAjB,CAAuB,CAAA,IAIhCzB,EAAS+B,CAAA/B,OAAA,EAIb,EAHImqF,CAGJ,CAHiBnqF,CAAAmK,KAAA,CAFIoqF,mBAEJ,CAGjB,EAFMv0F,CAAAA,OAAA,EAAAmK,KAAA,CAHeoqF,mBAGf,CAEN,GACEpK,CAAAJ,eAAA,CAA0B//E,CAA1B,CAAiCjI,CAAjC,CAA0CN,CAA1C,CAAgD+xF,CAAhD,CAAoEC,CAApE,CATkC,CAjBP,CAH5B,CADqD,CAAxC,CAzvHtB,CA61HI1+E,GAAoB,CAAC,QAAD,CAAW,QAAQ,CAACoE,CAAD,CAAS,CAClD,MAAO,CACLgX,SAAU,GADL,CAELb,QAAS,UAFJ,CAGLnC,KAAMA,QAAQ,CAACnjB,CAAD,CAAQ0e,CAAR,CAAajnB,CAAb,CAAmB07D,CAAnB,CAAyB,CACrC,GAAKA,CAAL,CAAA,CAEA,IAAIj/D,EAAQuD,CAAAjE,eAAA,CAAoB,UAApB,CAARU,EAA2Cib,CAAA,CAAO1X,CAAAuT,WAAP,CAAA,CAAwBhL,CAAxB,CAE1CvI,EAAAuT,WAAL,GAGEvT,CAAAqT,SAHF,CAGkB,CAAA,CAHlB,CAMAqoD,EAAAsE,YAAA3sD,SAAA,CAA4B0/E,QAAQ,CAAChuB,CAAD,CAAa/D,CAAb,CAAwB,CAC1D,MAAO,CAACvkE,CAAR,EAAiB,CAACi/D,CAAAc,SAAA,CAAcwE,CAAd,CADwC,CAI5DhhE,EAAAikC,SAAA,CAAc,UAAd,CAA0B,QAAQ,CAAC3c,CAAD,CAAS,CAErC7qB,CAAJ,GAAc6qB,CAAd,GACE7qB,CACA;AADQ6qB,CACR,CAAAo0C,CAAAwE,UAAA,EAFF,CAFyC,CAA3C,CAdA,CADqC,CAHlC,CAD2C,CAA5B,CA71HxB,CA48HI/sD,GAAmB,CAAC,QAAD,CAAW,QAAQ,CAACuE,CAAD,CAAS,CACjD,MAAO,CACLgX,SAAU,GADL,CAELb,QAAS,UAFJ,CAGLrlB,QAASA,QAAQ,CAACwqF,CAAD,CAAOC,CAAP,CAAc,CAC7B,IAAI3tB,CAAJ,CACIzD,CAEAoxB,EAAA7/E,UAAJ,GACEkyD,CAME,CANW2tB,CAAA7/E,UAMX,CAAAyuD,CAAA,CADgC,GAAlC,GAAIoxB,CAAA7/E,UAAApQ,OAAA,CAAuB,CAAvB,CAAJ,EAAyCyiE,EAAA5lE,KAAA,CAAyBozF,CAAA7/E,UAAzB,CAAzC,CACYyuD,QAAQ,EAAG,CAAE,MAAOoxB,EAAA7/E,UAAT,CADvB,CAGYsE,CAAA,CAAOu7E,CAAA7/E,UAAP,CATd,CAaA,OAAO,SAAQ,CAAC7K,CAAD,CAAQ0e,CAAR,CAAajnB,CAAb,CAAmB07D,CAAnB,CAAyB,CACtC,GAAKA,CAAL,CAAA,CAEA,IAAIw3B,EAAUlzF,CAAAkT,QAEVlT,EAAAoT,UAAJ,CACE8/E,CADF,CACYrxB,CAAA,CAAQt5D,CAAR,CADZ,CAGE+8D,CAHF,CAGetlE,CAAAkT,QAGf,KAAIyc,EAAS01C,EAAA,CAAiB6tB,CAAjB,CAA0B5tB,CAA1B,CAAsCr+C,CAAtC,CAEbjnB,EAAAikC,SAAA,CAAc,SAAd,CAAyB,QAAQ,CAAC3c,CAAD,CAAS,CACxC,IAAI6rE,EAAYxjE,CAEhBA,EAAA,CAAS01C,EAAA,CAAiB/9C,CAAjB,CAAyBg+C,CAAzB,CAAqCr+C,CAArC,CAET,EAAKksE,CAAL,EAAkBA,CAAAn0F,SAAA,EAAlB,KAA6C2wB,CAA7C,EAAuDA,CAAA3wB,SAAA,EAAvD,GACE08D,CAAAwE,UAAA,EANsC,CAA1C,CAUAxE,EAAAsE,YAAA9sD,QAAA,CAA2BkgF,QAAQ,CAACruB,CAAD,CAAa/D,CAAb,CAAwB,CAEzD,MAAOtF,EAAAc,SAAA,CAAcwE,CAAd,CAAP;AAAmC/hE,CAAA,CAAY0wB,CAAZ,CAAnC,EAA0DA,CAAA9vB,KAAA,CAAYmhE,CAAZ,CAFD,CAtB3D,CADsC,CAjBX,CAH1B,CAD0C,CAA5B,CA58HvB,CAykIIptD,GAAqB,CAAC,QAAD,CAAW,QAAQ,CAAC8D,CAAD,CAAS,CACnD,MAAO,CACLgX,SAAU,GADL,CAELb,QAAS,UAFJ,CAGLnC,KAAMA,QAAQ,CAACnjB,CAAD,CAAQ0e,CAAR,CAAajnB,CAAb,CAAmB07D,CAAnB,CAAyB,CACrC,GAAKA,CAAL,CAAA,CAEA,IAAI/nD,EAAY3T,CAAA2T,UAAZA,EAA8B+D,CAAA,CAAO1X,CAAA6T,YAAP,CAAA,CAAyBtL,CAAzB,CAAlC,CACI8qF,EAAkB9tB,EAAA,CAAY5xD,CAAZ,CAEtB3T,EAAAikC,SAAA,CAAc,WAAd,CAA2B,QAAQ,CAACxnC,CAAD,CAAQ,CACrCkX,CAAJ,GAAkBlX,CAAlB,GACE42F,CAEA,CAFkB9tB,EAAA,CAAY9oE,CAAZ,CAElB,CADAkX,CACA,CADYlX,CACZ,CAAAi/D,CAAAwE,UAAA,EAHF,CADyC,CAA3C,CAOAxE,EAAAsE,YAAArsD,UAAA,CAA6B2/E,QAAQ,CAACvuB,CAAD,CAAa/D,CAAb,CAAwB,CAC3D,MAA0B,EAA1B,CAAQqyB,CAAR,EAAgC33B,CAAAc,SAAA,CAAcwE,CAAd,CAAhC,EAA6DA,CAAAzlE,OAA7D,EAAiF83F,CADtB,CAZ7D,CADqC,CAHlC,CAD4C,CAA5B,CAzkIzB,CAsqII5/E,GAAqB,CAAC,QAAD,CAAW,QAAQ,CAACiE,CAAD,CAAS,CACnD,MAAO,CACLgX,SAAU,GADL,CAELb,QAAS,UAFJ,CAGLnC,KAAMA,QAAQ,CAACnjB,CAAD,CAAQ0e,CAAR,CAAajnB,CAAb,CAAmB07D,CAAnB,CAAyB,CACrC,GAAKA,CAAL,CAAA,CAEA,IAAIloD,EAAYxT,CAAAwT,UAAZA,EAA8BkE,CAAA,CAAO1X,CAAA0T,YAAP,CAAA,CAAyBnL,CAAzB,CAAlC,CACIgrF,EAAkBhuB,EAAA,CAAY/xD,CAAZ,CAAlB+/E,EAA6C,EAEjDvzF,EAAAikC,SAAA,CAAc,WAAd,CAA2B,QAAQ,CAACxnC,CAAD,CAAQ,CACrC+W,CAAJ;AAAkB/W,CAAlB,GACE82F,CAEA,CAFkBhuB,EAAA,CAAY9oE,CAAZ,CAElB,EAFyC,EAEzC,CADA+W,CACA,CADY/W,CACZ,CAAAi/D,CAAAwE,UAAA,EAHF,CADyC,CAA3C,CAQAxE,EAAAsE,YAAAxsD,UAAA,CAA6BggF,QAAQ,CAACzuB,CAAD,CAAa/D,CAAb,CAAwB,CAC3D,MAAOtF,EAAAc,SAAA,CAAcwE,CAAd,CAAP,EAAmCA,CAAAzlE,OAAnC,EAAuDg4F,CADI,CAb7D,CADqC,CAHlC,CAD4C,CAA5B,CA+CrBp5F,EAAA0O,QAAA7B,UAAJ,CAEM7M,CAAAuN,QAFN,EAGIA,OAAAwyC,IAAA,CAAY,kDAAZ,CAHJ,EAUApwC,EAAA,EAmJE,CAjJFwE,EAAA,CAAmBzF,EAAnB,CAiJE,CA/IFA,EAAA3B,OAAA,CAAe,UAAf,CAA2B,EAA3B,CAA+B,CAAC,UAAD,CAAa,QAAQ,CAACe,CAAD,CAAW,CAE/DwrF,QAASA,EAAW,CAAChoE,CAAD,CAAI,CACtBA,CAAA,EAAQ,EACR,KAAInvB,EAAImvB,CAAA9qB,QAAA,CAAU,GAAV,CACR,OAAc,EAAP,EAACrE,CAAD,CAAY,CAAZ,CAAgBmvB,CAAAlwB,OAAhB,CAA2Be,CAA3B,CAA+B,CAHhB,CAkBxB2L,CAAAxL,MAAA,CAAe,SAAf,CAA0B,CACxB,iBAAoB,CAClB,MAAS,CACP,IADO,CAEP,IAFO,CADS,CAKlB,IAAO,0DAAA,MAAA,CAAA,GAAA,CALW,CAclB,SAAY,CACV,eADU,CAEV,aAFU,CAdM;AAkBlB,KAAQ,CACN,IADM,CAEN,IAFM,CAlBU,CAsBlB,eAAkB,CAtBA,CAuBlB,MAAS,uFAAA,MAAA,CAAA,GAAA,CAvBS,CAqClB,SAAY,6BAAA,MAAA,CAAA,GAAA,CArCM,CA8ClB,WAAc,iDAAA,MAAA,CAAA,GAAA,CA9CI,CA4DlB,gBAAmB,uFAAA,MAAA,CAAA,GAAA,CA5DD,CA0ElB,aAAgB,CACd,CADc,CAEd,CAFc,CA1EE,CA8ElB,SAAY,iBA9EM,CA+ElB,SAAY,WA/EM,CAgFlB,OAAU,oBAhFQ,CAiFlB,WAAc,UAjFI,CAkFlB,WAAc,WAlFI;AAmFlB,QAAS,eAnFS,CAoFlB,UAAa,QApFK,CAqFlB,UAAa,QArFK,CADI,CAwFxB,eAAkB,CAChB,aAAgB,GADA,CAEhB,YAAe,GAFC,CAGhB,UAAa,GAHG,CAIhB,SAAY,CACV,CACE,MAAS,CADX,CAEE,OAAU,CAFZ,CAGE,QAAW,CAHb,CAIE,QAAW,CAJb,CAKE,OAAU,CALZ,CAME,OAAU,GANZ,CAOE,OAAU,EAPZ,CAQE,OAAU,EARZ,CASE,OAAU,EATZ,CADU,CAYV,CACE,MAAS,CADX,CAEE,OAAU,CAFZ,CAGE,QAAW,CAHb,CAIE,QAAW,CAJb,CAKE,OAAU,CALZ,CAME,OAAU,SANZ,CAOE,OAAU,EAPZ,CAQE,OAAU,QARZ,CASE,OAAU,EATZ,CAZU,CAJI,CAxFM,CAqHxB,GAAM,OArHkB,CAsHxB,SAAY,OAtHY,CAuHxB,UAAagvF,QAAQ,CAAChgE,CAAD,CAAIioE,CAAJ,CAAmB,CAAG,IAAIp3F,EAAImvB,CAAJnvB,CAAQ,CAAZ,CAlIvC80B,EAkIyEsiE,CAhIzElyF,KAAAA,EAAJ,GAAkB4vB,CAAlB,GACEA,CADF,CACMe,IAAAwiC,IAAA,CAAS8+B,CAAA,CA+H2DhoE,CA/H3D,CAAT,CAAyB,CAAzB,CADN,CAIW0G,KAAAwvC,IAAA,CAAS,EAAT,CAAavwC,CAAb,CA4HmF,OAAS,EAAT,EAAI90B,CAAJ,EAAsB,CAAtB,EA1HnF80B,CA0HmF,CA1ItDuiE,KA0IsD,CA1IFC,OA0IpD,CAvHhB,CAA1B,CApB+D,CAAhC,CAA/B,CA+IE,CAAAt4F,CAAA,CAAO,QAAQ,EAAG,CAChByL,EAAA,CAAY5M,CAAAyJ,SAAZ;AAA6BoD,EAA7B,CADgB,CAAlB,CA7JF,CAt6mCkB,CAAjB,CAAD,CAuknCG7M,MAvknCH,CAyknCC2rE,EAAA3rE,MAAA0O,QAAAgrF,MAAA,EAAA/tB,cAAD,EAAyC3rE,MAAA0O,QAAAvI,QAAA,CAAuBsD,QAAAkwF,KAAvB,CAAArqB,QAAA,CAA8C,gRAA9C;", -"sources":["angular.js"], -"names":["window","errorHandlingConfig","config","isObject","isDefined","objectMaxDepth","minErrConfig","isValidObjectMaxDepth","NaN","urlErrorParamsEnabled","isBoolean","maxDepth","isNumber","minErr","isArrayLike","obj","isWindow","isArray","isString","jqLite","length","Object","item","forEach","iterator","context","key","isFunction","hasOwnProperty","call","isPrimitive","isBlankObject","forEachSorted","keys","sort","i","reverseParams","iteratorFn","value","nextUid","uid","baseExtend","dst","objs","deep","h","$$hashKey","ii","j","jj","src","isDate","Date","valueOf","isRegExp","RegExp","nodeName","cloneNode","isElement","clone","extend","slice","arguments","merge","toInt","str","parseInt","inherit","parent","extra","create","noop","identity","$","valueFn","valueRef","hasCustomToString","toString","isUndefined","getPrototypeOf","arr","Array","isError","tag","Error","isScope","$evalAsync","$watch","isTypedArray","TYPED_ARRAY_REGEXP","test","node","prop","attr","find","makeMap","items","split","nodeName_","element","lowercase","arrayRemove","array","index","indexOf","splice","copy","source","destination","copyRecurse","push","copyElement","stackSource","stackDest","ngMinErr","needsRecurse","copyType","undefined","constructor","buffer","byteOffset","copied","ArrayBuffer","byteLength","set","Uint8Array","re","match","lastIndex","type","simpleCompare","a","b","equals","o1","o2","t1","t2","getTime","keySet","createMap","charAt","concat","array1","array2","bind","self","fn","curryArgs","startIndex","apply","toJsonReplacer","val","document","toJson","pretty","JSON","stringify","fromJson","json","parse","timezoneToOffset","timezone","fallback","replace","ALL_COLONS","requestedTimezoneOffset","isNumberNaN","addDateMinutes","date","minutes","setMinutes","getMinutes","convertTimezoneToLocal","reverse","dateTimezoneOffset","getTimezoneOffset","timezoneOffset","startingTag","empty","elemHtml","append","html","nodeType","NODE_TYPE_TEXT","e","tryDecodeURIComponent","decodeURIComponent","parseKeyValue","keyValue","splitPoint","substring","toKeyValue","parts","arrayValue","encodeUriQuery","join","encodeUriSegment","pctEncodeSpaces","encodeURIComponent","getNgAttribute","ngAttr","ngAttrPrefixes","getAttribute","angularInit","bootstrap","appElement","module","prefix","name","hasAttribute","candidate","querySelector","isAutoBootstrapAllowed","strictDi","console","error","modules","defaultConfig","doBootstrap","injector","unshift","$provide","debugInfoEnabled","$compileProvider","createInjector","invoke","bootstrapApply","scope","compile","$apply","data","NG_ENABLE_DEBUG_INFO","NG_DEFER_BOOTSTRAP","angular","resumeBootstrap","angular.resumeBootstrap","extraModules","resumeDeferredBootstrap","reloadWithDebugInfo","location","reload","getTestability","rootElement","get","snake_case","separator","SNAKE_CASE_REGEXP","letter","pos","toLowerCase","bindJQuery","originalCleanData","bindJQueryFired","jqName","jq","jQuery","on","JQLitePrototype","isolateScope","controller","inheritedData","JQLite","cleanData","jqLite.cleanData","elems","events","elem","_data","$destroy","triggerHandler","assertArg","arg","reason","assertArgFn","acceptArrayAnnotation","assertNotHasOwnProperty","getter","path","bindFnToScope","lastInstance","len","getBlockNodes","nodes","endNode","blockNodes","nextSibling","setupModuleLoader","ensure","factory","$injectorMinErr","$$minErr","requires","configFn","info","invokeLater","provider","method","insertMethod","queue","invokeQueue","moduleInstance","invokeLaterAndSetModuleName","recipeName","factoryFunction","$$moduleName","configBlocks","runBlocks","_invokeQueue","_configBlocks","_runBlocks","service","constant","decorator","animation","filter","directive","component","run","block","shallowCopy","serializeObject","seen","publishExternalAPI","version","$$counter","csp","uppercase","angularModule","ngModule","$$sanitizeUri","$$SanitizeUriProvider","$CompileProvider","htmlAnchorDirective","input","inputDirective","textarea","form","formDirective","script","scriptDirective","select","selectDirective","option","optionDirective","ngBind","ngBindDirective","ngBindHtml","ngBindHtmlDirective","ngBindTemplate","ngBindTemplateDirective","ngClass","ngClassDirective","ngClassEven","ngClassEvenDirective","ngClassOdd","ngClassOddDirective","ngCloak","ngCloakDirective","ngController","ngControllerDirective","ngForm","ngFormDirective","ngHide","ngHideDirective","ngIf","ngIfDirective","ngInclude","ngIncludeDirective","ngInit","ngInitDirective","ngNonBindable","ngNonBindableDirective","ngPluralize","ngPluralizeDirective","ngRef","ngRefDirective","ngRepeat","ngRepeatDirective","ngShow","ngShowDirective","ngStyle","ngStyleDirective","ngSwitch","ngSwitchDirective","ngSwitchWhen","ngSwitchWhenDirective","ngSwitchDefault","ngSwitchDefaultDirective","ngOptions","ngOptionsDirective","ngTransclude","ngTranscludeDirective","ngModel","ngModelDirective","ngList","ngListDirective","ngChange","ngChangeDirective","pattern","patternDirective","ngPattern","required","requiredDirective","ngRequired","minlength","minlengthDirective","ngMinlength","maxlength","maxlengthDirective","ngMaxlength","ngValue","ngValueDirective","ngModelOptions","ngModelOptionsDirective","ngIncludeFillContentDirective","hiddenInputBrowserCacheDirective","ngAttributeAliasDirectives","ngEventDirectives","$anchorScroll","$AnchorScrollProvider","$animate","$AnimateProvider","$animateCss","$CoreAnimateCssProvider","$$animateJs","$$CoreAnimateJsProvider","$$animateQueue","$$CoreAnimateQueueProvider","$$AnimateRunner","$$AnimateRunnerFactoryProvider","$$animateAsyncRun","$$AnimateAsyncRunFactoryProvider","$browser","$BrowserProvider","$cacheFactory","$CacheFactoryProvider","$controller","$ControllerProvider","$document","$DocumentProvider","$$isDocumentHidden","$$IsDocumentHiddenProvider","$exceptionHandler","$ExceptionHandlerProvider","$filter","$FilterProvider","$$forceReflow","$$ForceReflowProvider","$interpolate","$InterpolateProvider","$interval","$IntervalProvider","$$intervalFactory","$$IntervalFactoryProvider","$http","$HttpProvider","$httpParamSerializer","$HttpParamSerializerProvider","$httpParamSerializerJQLike","$HttpParamSerializerJQLikeProvider","$httpBackend","$HttpBackendProvider","$xhrFactory","$xhrFactoryProvider","$jsonpCallbacks","$jsonpCallbacksProvider","$location","$LocationProvider","$log","$LogProvider","$parse","$ParseProvider","$rootScope","$RootScopeProvider","$q","$QProvider","$$q","$$QProvider","$sce","$SceProvider","$sceDelegate","$SceDelegateProvider","$sniffer","$SnifferProvider","$$taskTrackerFactory","$$TaskTrackerFactoryProvider","$templateCache","$TemplateCacheProvider","$templateRequest","$TemplateRequestProvider","$$testability","$$TestabilityProvider","$timeout","$TimeoutProvider","$window","$WindowProvider","$$rAF","$$RAFProvider","$$jqLite","$$jqLiteProvider","$$Map","$$MapProvider","$$cookieReader","$$CookieReaderProvider","angularVersion","fnCamelCaseReplace","all","toUpperCase","kebabToCamel","DASH_LOWERCASE_REGEXP","jqLiteAcceptsData","NODE_TYPE_ELEMENT","NODE_TYPE_DOCUMENT","jqLiteBuildFragment","tmp","fragment","createDocumentFragment","HTML_REGEXP","appendChild","createElement","TAG_NAME_REGEXP","exec","wrap","wrapMap","_default","innerHTML","XHTML_TAG_REGEXP","lastChild","childNodes","firstChild","textContent","createTextNode","argIsString","trim","jqLiteMinErr","parsed","SINGLE_TAG_REGEXP","jqLiteAddNodes","jqLiteReady","jqLiteClone","jqLiteDealoc","onlyDescendants","querySelectorAll","isEmptyObject","removeIfEmptyData","expandoId","ng339","expandoStore","jqCache","jqLiteOff","unsupported","jqLiteExpandoStore","handle","removeHandler","listenerFns","removeEventListener","MOUSE_EVENT_MAP","jqLiteRemoveData","createIfNecessary","jqId","jqLiteData","isSimpleSetter","isSimpleGetter","massGetter","jqLiteHasClass","selector","jqLiteRemoveClass","cssClasses","setAttribute","existingClasses","newClasses","cssClass","jqLiteAddClass","root","elements","jqLiteController","jqLiteInheritedData","documentElement","names","parentNode","NODE_TYPE_DOCUMENT_FRAGMENT","host","jqLiteEmpty","removeChild","jqLiteRemove","keepData","jqLiteDocumentLoaded","action","win","readyState","setTimeout","trigger","addEventListener","getBooleanAttrName","booleanAttr","BOOLEAN_ATTR","BOOLEAN_ELEMENTS","createEventHandler","eventHandler","event","isDefaultPrevented","event.isDefaultPrevented","defaultPrevented","eventFns","eventFnsLength","immediatePropagationStopped","originalStopImmediatePropagation","stopImmediatePropagation","event.stopImmediatePropagation","stopPropagation","isImmediatePropagationStopped","event.isImmediatePropagationStopped","handlerWrapper","specialHandlerWrapper","defaultHandlerWrapper","handler","specialMouseHandlerWrapper","target","related","relatedTarget","jqLiteContains","$get","this.$get","hasClass","classes","addClass","removeClass","hashKey","nextUidFn","objType","NgMapShim","_keys","_values","_lastKey","_lastIndex","extractArgs","fnText","Function","prototype","STRIP_COMMENTS","ARROW_ARG","FN_ARGS","anonFn","args","modulesToLoad","supportObject","delegate","provider_","providerInjector","instantiate","providerCache","providerSuffix","enforceReturnValue","enforcedReturnValue","result","instanceInjector","factoryFn","enforce","loadModules","moduleFn","runInvokeQueue","invokeArgs","loadedModules","message","stack","createInternalInjector","cache","getService","serviceName","caller","INSTANTIATING","err","shift","injectionArgs","locals","$inject","$$annotate","msie","func","$$ngIsClass","Type","ctor","annotate","has","NgMap","$injector","instanceCache","decorFn","origProvider","orig$get","origProvider.$get","origInstance","$delegate","protoInstanceInjector","loadNewModules","instanceInjector.loadNewModules","mods","autoScrollingEnabled","disableAutoScrolling","this.disableAutoScrolling","getFirstAnchor","list","some","scrollTo","scrollIntoView","offset","scroll","yOffset","getComputedStyle","style","position","getBoundingClientRect","bottom","elemTop","top","scrollBy","hash","elm","getElementById","getElementsByName","autoScrollWatch","autoScrollWatchAction","newVal","oldVal","mergeClasses","splitClasses","klass","prepareAnimateOptions","options","Browser","cacheStateAndFireUrlChange","pendingLocation","fireStateOrUrlChange","cacheState","cachedState","getCurrentState","lastCachedState","lastHistoryState","prevLastHistoryState","lastBrowserUrl","url","urlChangeListeners","listener","history","clearTimeout","pendingDeferIds","taskTracker","isMock","$$completeOutstandingRequest","completeTask","$$incOutstandingRequestCount","incTaskCount","notifyWhenNoOutstandingRequests","notifyWhenNoPendingTasks","href","baseElement","state","self.url","sameState","urlResolve","sameBase","stripHash","substr","self.state","urlChangeInit","onUrlChange","self.onUrlChange","callback","$$applicationDestroyed","self.$$applicationDestroyed","off","$$checkUrlChange","baseHref","self.baseHref","defer","self.defer","delay","taskType","timeoutId","DEFAULT_TASK_TYPE","cancel","self.defer.cancel","deferId","cacheFactory","cacheId","refresh","entry","freshEnd","staleEnd","n","link","p","nextEntry","prevEntry","caches","size","stats","id","capacity","Number","MAX_VALUE","lruHash","put","lruEntry","remove","removeAll","destroy","cacheFactory.info","cacheFactory.get","$$sanitizeUriProvider","parseIsolateBindings","directiveName","isController","LOCAL_REGEXP","bindings","definition","scopeName","bindingCache","$compileMinErr","mode","collection","optional","attrName","assertValidDirectiveName","getDirectiveRequire","require","REQUIRE_PREFIX_REGEXP","hasDirectives","COMMENT_DIRECTIVE_REGEXP","CLASS_DIRECTIVE_REGEXP","ALL_OR_NOTHING_ATTRS","EVENT_HANDLER_ATTR_REGEXP","this.directive","registerDirective","directiveFactory","Suffix","directives","priority","restrict","this.component","registerComponent","makeInjectable","tElement","tAttrs","$element","$attrs","template","templateUrl","ddo","controllerAs","identifierForController","transclude","bindToController","aHrefSanitizationWhitelist","this.aHrefSanitizationWhitelist","regexp","imgSrcSanitizationWhitelist","this.imgSrcSanitizationWhitelist","this.debugInfoEnabled","enabled","strictComponentBindingsEnabled","this.strictComponentBindingsEnabled","TTL","onChangesTtl","this.onChangesTtl","commentDirectivesEnabledConfig","commentDirectivesEnabled","this.commentDirectivesEnabled","cssClassDirectivesEnabledConfig","cssClassDirectivesEnabled","this.cssClassDirectivesEnabled","PROP_CONTEXTS","addPropertySecurityContext","this.addPropertySecurityContext","elementName","propertyName","ctx","registerNativePropertyContexts","registerContext","values","v","SCE_CONTEXTS","HTML","CSS","URL","MEDIA_URL","RESOURCE_URL","flushOnChangesQueue","onChangesQueue","sanitizeSrcset","invokeType","trimmedSrcset","srcPattern","rawUris","nbrUrisWith2parts","Math","floor","innerIdx","getTrustedMediaUrl","lastTuple","Attributes","attributesToCopy","l","$attr","$$element","setSpecialAttr","specialAttrHolder","attributes","attribute","removeNamedItem","setNamedItem","safeAddClass","className","$compileNodes","transcludeFn","maxPriority","ignoreDirective","previousCompileContext","compositeLinkFn","compileNodes","$$addScopeClass","namespace","publicLinkFn","cloneConnectFn","needsNewScope","$parent","$new","parentBoundTranscludeFn","transcludeControllers","futureParentElement","$$boundTransclude","$linkNode","wrapTemplate","controllerName","instance","$$addScopeInfo","nodeList","$rootElement","childLinkFn","childScope","childBoundTranscludeFn","stableNodeList","nodeLinkFnFound","linkFns","idx","nodeLinkFn","transcludeOnThisElement","createBoundTranscludeFn","templateOnThisElement","notLiveList","attrs","linkFnFound","mergeConsecutiveTextNodes","collectDirectives","applyDirectivesToNode","terminal","sibling","nodeValue","previousBoundTranscludeFn","boundTranscludeFn","transcludedScope","cloneFn","controllers","containingScope","$$transcluded","boundSlots","$$slots","slotName","attrsMap","addDirective","directiveNormalize","nName","ngPrefixMatch","nAttrs","attrStartName","attrEndName","isNgAttr","isNgProp","isNgEvent","multiElementMatch","NG_PREFIX_BINDING","PREFIX_REGEXP","MULTI_ELEMENT_DIR_RE","directiveIsMultiElement","addPropertyDirective","createEventDirective","addAttrInterpolateDirective","animVal","addTextInterpolateDirective","NODE_TYPE_COMMENT","collectCommentDirectives","byPriority","groupScan","attrStart","attrEnd","depth","groupElementsLinkFnWrapper","linkFn","groupedElementsLink","compilationGenerator","eager","compiled","lazyCompilation","compileNode","templateAttrs","jqCollection","originalReplaceDirective","preLinkFns","postLinkFns","addLinkFns","pre","post","newIsolateScopeDirective","$$isolateScope","cloneAndAnnotateFn","linkNode","controllersBoundTransclude","cloneAttachFn","hasElementTranscludeDirective","elementControllers","slotTranscludeFn","scopeToChild","controllerScope","newScopeDirective","isSlotFilled","transcludeFn.isSlotFilled","controllerDirectives","setupControllers","templateDirective","$$originalDirective","$$isolateBindings","scopeBindingInfo","initializeDirectiveBindings","removeWatches","$on","controllerDirective","$$bindings","bindingInfo","getControllers","controllerInstance","$onChanges","initialChanges","$onInit","$doCheck","$onDestroy","callOnDestroyHook","invokeLinkFn","$postLink","terminalPriority","nonTlbTranscludeDirective","hasTranscludeDirective","hasTemplate","$compileNode","$template","childTranscludeFn","didScanForMultipleTransclusion","mightHaveMultipleTransclusionError","directiveValue","$$start","$$end","assertNoDuplicate","$$tlb","scanningIndex","candidateDirective","$$createComment","replaceWith","replaceDirective","slots","slotMap","filledSlots","elementSelector","contents","filled","slotCompileNodes","$$newScope","denormalizeTemplate","removeComments","templateNamespace","newTemplateAttrs","templateDirectives","unprocessedDirectives","markDirectiveScope","mergeTemplateAttributes","compileTemplateUrl","max","inheritType","dataName","property","controllerKey","$scope","$transclude","newScope","tDirectives","startAttrName","endAttrName","multiElement","srcAttr","dstAttr","$set","linkQueue","afterTemplateNodeLinkFn","afterTemplateChildLinkFn","beforeTemplateCompileNode","origAsyncDirective","derivedSyncDirective","then","content","tempTemplateAttrs","beforeTemplateLinkNode","linkRootElement","$$destroyed","oldClasses","catch","delayedNodeLinkFn","ignoreChildLinkFn","diff","what","previousDirective","wrapModuleNameIfDefined","moduleName","text","interpolateFn","textInterpolateCompileFn","templateNode","templateNodeParent","hasCompileParent","$$addBindingClass","textInterpolateLinkFn","$$addBindingInfo","expressions","interpolateFnWatchAction","wrapper","getTrustedAttrContext","attrNormalizedName","getTrustedPropContext","propNormalizedName","sanitizeSrcsetPropertyValue","propName","trustedContext","sanitizer","getTrusted","ngPropCompileFn","_","ngPropGetter","ngPropWatch","sceValueOf","ngPropPreLinkFn","applyPropValue","propValue","allOrNothing","mustHaveExpression","attrInterpolatePreLinkFn","$$observers","newValue","$$inter","$$scope","oldValue","$updateClass","elementsToRemove","newNode","firstElementToRemove","removeCount","j2","replaceChild","hasData","annotation","strictBindingsCheck","recordChanges","currentValue","previousValue","$$postDigest","changes","triggerOnChangesHook","SimpleChange","removeWatchCollection","initializeBinding","lastValue","parentGet","parentSet","compare","removeWatch","$observe","_UNINITIALIZED_VALUE","literal","assign","parentValueWatch","parentValue","$stateful","$watchCollection","isLiteral","initialValue","parentValueWatchAction","SIMPLE_ATTR_NAME","$normalize","$addClass","classVal","$removeClass","toAdd","tokenDifference","toRemove","writeAttr","booleanKey","aliasedKey","ALIASED_ATTR","observer","removeAttr","listeners","startSymbol","endSymbol","binding","isolated","noTemplate","compile.$$createComment","comment","createComment","previous","current","SPECIAL_CHARS_REGEXP","str1","str2","tokens1","tokens2","token","jqNodes","ident","CNTRL_REG","this.has","register","this.register","addIdentifier","identifier","expression","later","$controllerMinErr","controllerPrototype","$controllerInit","changeListener","hidden","doc","exception","cause","serializeValue","toISOString","ngParamSerializer","params","jQueryLikeParamSerializer","serialize","toSerialize","topLevel","defaultHttpResponseTransform","headers","tempData","JSON_PROTECTION_PREFIX","contentType","hasJsonContentType","APPLICATION_JSON","jsonStart","JSON_START","JSON_ENDS","$httpMinErr","parseHeaders","line","headerVal","headerKey","headersGetter","headersObj","transformData","status","fns","defaults","transformResponse","transformRequest","d","common","CONTENT_TYPE_APPLICATION_JSON","patch","xsrfCookieName","xsrfHeaderName","paramSerializer","jsonpCallbackParam","useApplyAsync","this.useApplyAsync","interceptorFactories","interceptors","xsrfWhitelistedOrigins","requestConfig","chainInterceptors","promise","thenFn","rejectFn","executeHeaderFns","headerContent","processedHeaders","headerFn","header","response","resp","reject","mergeHeaders","defHeaders","reqHeaders","defHeaderName","lowercaseDefHeaderName","reqHeaderName","requestInterceptors","responseInterceptors","resolve","reversedInterceptors","interceptor","request","requestError","responseError","serverRequest","reqData","withCredentials","sendReq","finally","completeOutstandingRequest","createApplyHandlers","eventHandlers","applyHandlers","callEventHandler","$applyAsync","$$phase","done","headersString","statusText","xhrStatus","resolveHttpPromise","resolvePromise","deferred","resolvePromiseWithResult","removePendingReq","pendingRequests","cachedResp","isJsonp","getTrustedResourceUrl","buildUrl","sanitizeJsonpCallbackParam","defaultCache","xsrfValue","urlIsAllowedOrigin","timeout","responseType","uploadEventHandlers","serializedParams","cbKey","interceptorFactory","urlIsAllowedOriginFactory","createShortMethods","createShortMethodsWithData","createXhr","XMLHttpRequest","createHttpBackend","$browserDefer","callbacks","rawDocument","jsonpReq","callbackPath","async","body","wasCalled","timeoutRequest","abortedByTimeout","jsonpDone","xhr","abort","completeRequest","createCallback","getResponse","removeCallback","open","setRequestHeader","onload","xhr.onload","responseText","protocol","getAllResponseHeaders","onerror","ontimeout","requestTimeout","onabort","requestAborted","upload","send","$$timeoutId","this.startSymbol","this.endSymbol","escape","ch","unescapeText","escapedStartRegexp","escapedEndRegexp","constantWatchDelegate","objectEquality","constantInterp","unwatch","constantInterpolateWatch","parseStringifyInterceptor","contextAllowsConcatenation","$interpolateMinErr","interr","unescapedText","exp","$$watchDelegate","endIndex","parseFns","textLength","expressionPositions","singleExpression","startSymbolLength","endSymbolLength","map","compute","throwNoconcat","interpolationFn","$watchGroup","interpolateFnWatcher","oldValues","currValue","$interpolate.startSymbol","$interpolate.endSymbol","intervals","clearIntervalFn","clearInterval","interval","setIntervalFn","tick","setInterval","interval.cancel","$intervalMinErr","$$intervalId","q","$$state","pur","intervalFactory","intervalFn","count","invokeApply","hasParams","iteration","skipApply","notify","parseAbsoluteUrl","absoluteUrl","locationObj","parsedUrl","$$protocol","$$host","hostname","$$port","port","DEFAULT_PORTS","parseAppUrl","html5Mode","DOUBLE_SLASH_REGEX","$locationMinErr","prefixed","segments","pathname","$$path","$$search","search","$$hash","startsWith","stripBaseUrl","base","LocationHtml5Url","appBase","appBaseNoFile","basePrefix","$$html5","$$parse","this.$$parse","pathUrl","$$compose","$$normalizeUrl","this.$$normalizeUrl","$$parseLinkUrl","this.$$parseLinkUrl","relHref","appUrl","prevAppUrl","rewrittenUrl","LocationHashbangUrl","hashPrefix","withoutBaseUrl","withoutHashUrl","windowsFilePathExp","firstPathSegmentMatch","LocationHashbangInHtml5Url","locationGetter","locationGetterSetter","preprocess","requireBase","rewriteLinks","this.hashPrefix","this.html5Mode","urlsEqual","setBrowserUrlWithFallback","oldUrl","oldState","afterLocationChange","$broadcast","absUrl","LocationMode","initialUrl","lastIndexOf","IGNORE_URI_REGEXP","ctrlKey","metaKey","shiftKey","which","button","absHref","preventDefault","initializing","newUrl","newState","$digest","$locationWatch","$$urlUpdatedByLocation","currentReplace","$$replace","urlOrStateChanged","debug","debugEnabled","this.debugEnabled","flag","formatError","formatStackTrace","sourceURL","consoleLog","logFn","log","navigator","userAgent","warn","getStringValue","ifDefined","plusFn","r","isPure","parentIsPure","AST","MemberExpression","computed","UnaryExpression","PURITY_ABSOLUTE","BinaryExpression","operator","CallExpression","PURITY_RELATIVE","findConstantAndWatchExpressions","ast","allConstants","argsToWatch","astIsPure","Program","expr","Literal","toWatch","argument","left","right","LogicalExpression","ConditionalExpression","alternate","consequent","Identifier","object","isStatelessFilter","callee","AssignmentExpression","ArrayExpression","ObjectExpression","properties","ThisExpression","LocalsExpression","getInputs","lastExpression","isAssignable","assignableAST","NGValueParameter","ASTCompiler","ASTInterpreter","Parser","lexer","astCompiler","getValueOf","objectValueOf","literals","identStart","identContinue","addLiteral","this.addLiteral","literalName","literalValue","setIdentifierFns","this.setIdentifierFns","identifierStart","identifierContinue","interceptorFn","parsedExpression","cacheKey","Lexer","$parseOptions","parser","addWatchDelegate","addInterceptor","expressionInputDirtyCheck","oldValueOfValue","compareObjectIdentity","inputsWatchDelegate","prettyPrintExpression","inputExpressions","inputs","lastResult","oldInputValueOf","expressionInputWatch","newInputValue","oldInputValueOfValues","oldInputValues","expressionInputsWatch","changed","oneTimeWatchDelegate","unwatchIfDone","isDone","oneTimeWatch","useInputs","isAllDefined","$$intercepted","$$interceptor","allDefined","constantWatch","oneTime","first","second","chainedInterceptor","$$pure","depurifier","s","noUnsafeEval","isIdentifierStart","isIdentifierContinue","$$getAst","getAst","errorOnUnhandledRejections","qFactory","this.errorOnUnhandledRejections","nextTick","exceptionHandler","Deferred","Promise","this.resolve","this.reject","rejectPromise","this.notify","progress","notifyPromise","processChecks","queueSize","checkQueue","toCheck","errorMessage","scheduleProcessQueue","pending","processScheduled","$$passToExceptionHandler","$$reject","$qMinErr","$$resolve","doResolve","doReject","doNotify","handleCallback","resolver","callbackOutput","when","errback","progressBack","$Q","resolveFn","TypeError","onFulfilled","onRejected","promises","counter","results","race","requestAnimationFrame","webkitRequestAnimationFrame","cancelAnimationFrame","webkitCancelAnimationFrame","webkitCancelRequestAnimationFrame","rafSupported","raf","timer","supported","createChildScopeClass","ChildScope","$$watchers","$$nextSibling","$$childHead","$$childTail","$$listeners","$$listenerCount","$$watchersCount","$id","$$ChildScope","$$suspended","$rootScopeMinErr","lastDirtyWatch","applyAsyncId","digestTtl","this.digestTtl","destroyChildScope","$event","currentScope","cleanUpScope","$$prevSibling","$root","Scope","beginPhase","phase","incrementWatchersCount","decrementListenerCount","initWatchVal","flushApplyAsync","applyAsyncQueue","scheduleApplyAsync","isolate","child","watchExp","watcher","last","eq","$$digestWatchIndex","deregisterWatch","watchExpressions","watchGroupAction","changeReactionScheduled","firstRun","newValues","deregisterFns","shouldCall","deregisterWatchGroup","unwatchFn","watchGroupSubAction","$watchCollectionInterceptor","_value","bothNaN","newItem","oldItem","internalArray","oldLength","changeDetected","newLength","internalObject","veryOldValue","trackVeryOldValue","changeDetector","initRun","$watchCollectionAction","watch","watchers","dirty","ttl","asyncQueue","watchLog","logIdx","asyncTask","asyncQueuePosition","msg","next","postDigestQueuePosition","postDigestQueue","$suspend","$isSuspended","$resume","eventName","this.$watchGroup","$eval","$applyAsyncExpression","namedListeners","indexOfListener","$emit","targetScope","listenerArgs","$$asyncQueue","$$postDigestQueue","$$applyAsyncQueue","sanitizeUri","uri","isMediaUrl","regex","normalizedVal","adjustMatcher","matcher","$sceMinErr","escapeForRegexp","adjustMatchers","matchers","adjustedMatchers","resourceUrlWhitelist","resourceUrlBlacklist","this.resourceUrlWhitelist","this.resourceUrlBlacklist","matchUrl","baseURI","baseUrlParsingNode","generateHolderType","Base","holderType","trustedValue","$$unwrapTrustedValue","this.$$unwrapTrustedValue","holderType.prototype.valueOf","holderType.prototype.toString","htmlSanitizer","trustedValueHolderBase","byType","JS","trustAs","Constructor","maybeTrusted","allowed","this.enabled","sce","isEnabled","sce.isEnabled","sce.getTrusted","parseAs","sce.parseAs","enumValue","lName","UNDERSCORE_LOWERCASE_REGEXP","eventSupport","hasHistoryPushState","nw","process","chrome","app","runtime","pushState","android","boxee","bodyStyle","transitions","animations","hasEvent","divElm","TaskTracker","getLastCallback","cbInfo","taskCallbacks","pop","cb","getLastCallbackForType","taskCounts","ALL_TASKS_TYPE","countForType","countForAll","getNextCallback","nextCb","httpOptions","this.httpOptions","handleRequestFn","tpl","ignoreRequestError","totalPendingRequests","transformer","handleError","$templateRequestMinErr","testability","testability.findBindings","opt_exactMatch","getElementsByClassName","matches","dataBinding","bindingName","testability.findModels","prefixes","attributeEquals","testability.getLocation","testability.setLocation","testability.whenStable","deferreds","timeout.cancel","$timeoutMinErr","urlParsingNode","ipv6InBrackets","whitelistedOriginUrls","parsedAllowedOriginUrls","originUrl","requestUrl","urlsAreSameOrigin","url1","url2","$$CookieReader","safeDecodeURIComponent","lastCookies","lastCookieString","cookieArray","cookie","currentCookieString","filters","suffix","currencyFilter","dateFilter","filterFilter","jsonFilter","limitToFilter","lowercaseFilter","numberFilter","orderByFilter","uppercaseFilter","comparator","anyPropertyKey","matchAgainstAnyProp","getTypeForFilter","expressionType","predicateFn","createPredicateFn","shouldMatchPrimitives","actual","expected","deepCompare","dontMatchWholeObject","actualType","expectedType","expectedVal","matchAnyProperty","actualVal","$locale","formats","NUMBER_FORMATS","amount","currencySymbol","fractionSize","CURRENCY_SYM","PATTERNS","maxFrac","currencySymbolRe","formatNumber","GROUP_SEP","DECIMAL_SEP","number","numStr","exponent","digits","numberOfIntegerDigits","zeros","ZERO_CHAR","MAX_DIGITS","roundNumber","parsedNumber","minFrac","fractionLen","min","roundAt","digit","k","carry","reduceRight","groupSep","decimalSep","isNaN","isInfinity","isFinite","isZero","abs","formattedText","integerLen","decimals","reduce","groups","lgSize","gSize","negPre","negSuf","posPre","posSuf","padNumber","num","negWrap","neg","dateGetter","dateStrGetter","shortForm","standAlone","getFirstThursdayOfYear","year","dayOfWeekOnFirst","getDay","weekGetter","firstThurs","getFullYear","thisThurs","getMonth","getDate","round","eraGetter","ERAS","jsonStringToDate","string","R_ISO8601_STR","tzHour","tzMin","dateSetter","setUTCFullYear","setFullYear","timeSetter","setUTCHours","setHours","m","ms","parseFloat","format","DATETIME_FORMATS","NUMBER_STRING","DATE_FORMATS_SPLIT","DATE_FORMATS","spacing","limit","begin","Infinity","sliceFn","end","processPredicates","sortPredicates","predicate","descending","defaultCompare","v1","v2","type1","type2","value1","value2","sortPredicate","reverseOrder","compareFn","predicates","compareValues","getComparisonObject","tieBreaker","predicateValues","doComparison","ngDirective","FormController","$$controls","$error","$$success","$pending","$name","$dirty","$valid","$pristine","$submitted","$invalid","$$parentForm","nullFormCtrl","$$animate","setupValidity","$$classCache","INVALID_CLASS","VALID_CLASS","addSetValidityMethod","cachedToggleClass","ctrl","switchValue","toggleValidationCss","validationErrorKey","isValid","unset","clazz","$setValidity","clazz.prototype.$setValidity","isObjectEmpty","PENDING_CLASS","combinedState","stringBasedInputType","$formatters","$isEmpty","baseInputType","composing","ev","ngTrim","$viewValue","$$hasNativeValidators","$setViewValue","deferListener","origValue","keyCode","PARTIAL_VALIDATION_TYPES","PARTIAL_VALIDATION_EVENTS","validity","origBadInput","badInput","origTypeMismatch","typeMismatch","$render","ctrl.$render","createDateParser","mapping","iso","previousDate","ISO_DATE_REGEXP","yyyy","MM","dd","HH","getHours","mm","ss","getSeconds","sss","getMilliseconds","part","createDateInputType","parseDate","dynamicDateInputType","isValidDate","parseObservedDateValue","parseDateAndConvertTimeZoneToLocal","$options","getOption","previousTimezone","parsedDate","badInputChecker","isTimeType","$parsers","$$parserName","ngModelMinErr","targetFormat","formatted","ngMin","minVal","parsedMinVal","$validators","ctrl.$validators.min","$validate","ngMax","maxVal","parsedMaxVal","ctrl.$validators.max","parserName","VALIDITY_STATE_PROPERTY","numberFormatterParser","NUMBER_REGEXP","parseNumberAttrVal","countDecimals","numString","decimalSymbolIndex","isValidForStep","viewValue","stepBase","step","isNonIntegerValue","isNonIntegerStepBase","isNonIntegerStep","valueDecimals","stepBaseDecimals","stepDecimals","decimalCount","multiplier","pow","parseConstantExpr","parseFn","classDirective","arrayDifference","toClassString","classValue","classString","indexWatchExpression","digestClassCounts","classArray","classesToUpdate","classCounts","ngClassIndexWatchAction","newModulo","oldClassString","oldModulo","moduloTwo","$index","ngClassWatchAction","newClassString","oldClassArray","newClassArray","toRemoveArray","toAddArray","toRemoveString","toAddString","forceAsync","ngEventHandler","NgModelController","$modelValue","$$rawModelValue","$asyncValidators","$viewChangeListeners","$untouched","$touched","defaultModelOptions","$$updateEvents","$$updateEventHandler","$$parsedNgModel","$$parsedNgModelAssign","$$ngModelGet","$$ngModelSet","$$pendingDebounce","$$parserValid","$$currentValidationRunId","$$rootScope","$$attr","$$timeout","$$exceptionHandler","setupModelWatcher","ngModelWatch","modelValue","$$setModelValue","ModelOptions","$$options","setOptionSelectedStatus","optionEl","parsePatternAttr","patternExp","parseLength","intVal","REGEX_STRING_REGEXP","documentMode","rules","ngCspElement","ngCspAttribute","noInlineStyle","name_","el","allowAutoBootstrap","currentScript","HTMLScriptElement","SVGScriptElement","srcs","getNamedItem","every","origin","full","major","minor","dot","codeName","expando","JQLite._data","MS_HACK_REGEXP","mouseleave","mouseenter","optgroup","tbody","tfoot","colgroup","caption","thead","th","td","Node","contains","compareDocumentPosition","ready","removeData","jqLiteHasData","jqLiteCleanData","removeAttribute","css","NODE_TYPE_ATTRIBUTE","lowercasedName","isBooleanAttr","ret","getText","$dv","multiple","selected","arg1","arg2","nodeCount","jqLiteOn","types","addHandler","noEventListener","one","onFn","replaceNode","insertBefore","children","contentDocument","prepend","wrapNode","detach","after","newElement","toggleClass","condition","classCondition","nextElementSibling","getElementsByTagName","extraParameters","dummyEvent","handlerArgs","eventFnsCopy","arg3","unbind","nanKey","_idx","_transformKey","delete","FN_ARG_SPLIT","FN_ARG","argDecl","underscore","$animateMinErr","postDigestElements","updateData","handleCSSClassChanges","existing","pin","domOperation","from","to","classesAdded","add","classesRemoved","runner","complete","classNameFilter","customFilter","$$registeredAnimations","this.customFilter","filterFn","this.classNameFilter","reservedRegex","NG_ANIMATE_CLASSNAME","domInsert","parentElement","afterElement","afterNode","ELEMENT_NODE","previousElementSibling","enter","move","leave","addclass","setClass","animate","tempClasses","waitForTick","waitQueue","passed","AnimateRunner","setHost","rafTick","_doneCallbacks","_tick","this._tick","_state","chain","AnimateRunner.chain","AnimateRunner.all","runners","onProgress","DONE_COMPLETE_STATE","getPromise","resolveHandler","rejectHandler","pause","resume","_resolve","INITIAL_STATE","DONE_PENDING_STATE","initialOptions","closed","$$prepared","cleanupStyles","start","UNINITIALIZED_VALUE","isFirstChange","SimpleChange.prototype.isFirstChange","domNode","offsetWidth","$interpolateMinErr.throwNoconcat","$interpolateMinErr.interr","callbackId","called","callbackMap","PATH_MATCH","locationPrototype","$$absUrl","hashValue","pathValue","$$url","paramValue","Location","Location.prototype.state","$parseMinErr","OPERATORS","ESCAPE","lex","tokens","readString","peek","readNumber","peekMultichar","readIdent","is","isWhitespace","ch2","ch3","op2","op3","op1","throwError","chars","codePointAt","isValidIdentifierStart","isValidIdentifierContinue","cp","charCodeAt","cp1","cp2","isExpOperator","colStr","peekCh","quote","rawString","hex","String","fromCharCode","rep","ExpressionStatement","Property","program","expressionStatement","expect","filterChain","assignment","ternary","logicalOR","consume","logicalAND","equality","relational","additive","multiplicative","unary","primary","arrayDeclaration","selfReferential","parseArguments","baseExpression","peekToken","kind","e1","e2","e3","e4","peekAhead","t","nextId","vars","own","assignable","stage","computing","recurse","return_","generateFunction","fnKey","intoId","watchId","fnString","USE","STRICT","filterPrefix","watchFns","varsPrefix","section","nameId","recursionFn","skipWatchIdCheck","if_","lazyAssign","computedMember","lazyRecurse","plus","not","getHasOwnProperty","isNull","nonComputedMember","notNull","member","filterName","defaultValue","UNSAFE_CHARACTERS","SAFE_IDENTIFIER","stringEscapeFn","stringEscapeRegex","c","skip","init","fn.assign","rhs","lhs","unary+","unary-","unary!","binary+","binary-","binary*","binary/","binary%","binary===","binary!==","binary==","binary!=","binary<","binary>","binary<=","binary>=","binary&&","binary||","ternary?:","yy","y","MMMM","MMM","M","LLLL","H","hh","EEEE","EEE","ampmGetter","AMPMS","Z","timeZoneGetter","zone","paddedZone","ww","w","G","GG","GGG","GGGG","longEraGetter","ERANAMES","xlinkHref","defaultLinkFn","normalized","ngBooleanAttrWatchAction","htmlAttr","ngAttrAliasWatchAction","$addControl","$getControls","$$renameControl","nullFormRenameControl","control","$removeControl","$setDirty","$setPristine","$setSubmitted","$$setSubmitted","$rollbackViewValue","$commitViewValue","newName","oldName","PRISTINE_CLASS","DIRTY_CLASS","SUBMITTED_CLASS","$setUntouched","rootForm","formDirectiveFactory","isNgForm","getSetter","ngFormCompile","formElement","nameAttr","ngFormPreLink","ctrls","handleFormSubmission","setter","URL_REGEXP","EMAIL_REGEXP","DATE_REGEXP","DATETIMELOCAL_REGEXP","WEEK_REGEXP","MONTH_REGEXP","TIME_REGEXP","inputType","textInputType","weekParser","isoWeek","existingDate","week","hours","seconds","milliseconds","addDays","numberInputType","ngStep","stepVal","parsedStepVal","ctrl.$validators.step","urlInputType","ctrl.$validators.url","emailInputType","email","ctrl.$validators.email","radioInputType","doTrim","checked","rangeInputType","setInitialValueAndObserver","htmlAttrName","changeFn","wrappedObserver","minChange","supportsRange","elVal","maxChange","stepChange","hasMinAttr","hasMaxAttr","hasStepAttr","originalRender","rangeUnderflow","rangeOverflow","rangeRender","noopMinValidator","minValidator","noopMaxValidator","maxValidator","nativeStepValidator","stepMismatch","stepValidator","checkboxInputType","trueValue","ngTrueValue","falseValue","ngFalseValue","ctrl.$isEmpty","valueProperty","configurable","enumerable","defineProperty","CONSTANT_VALUE_REGEXP","updateElementValue","tplAttr","ngValueConstantLink","ngValueLink","valueWatchAction","$compile","ngBindCompile","templateElement","ngBindLink","ngBindWatchAction","ngBindTemplateCompile","ngBindTemplateLink","ngBindHtmlCompile","ngBindHtmlGetter","ngBindHtmlWatch","ngBindHtmlLink","ngBindHtmlWatchAction","getTrustedHtml","forceAsyncEvents","previousElements","ngIfWatchAction","srcExp","onloadExp","autoScrollExp","autoscroll","changeCounter","previousElement","currentElement","cleanupLastIncludeContent","ngIncludeWatchAction","afterAnimation","thisChangeId","namespaceAdaptedClone","trimValues","$$initGetterSetters","invokeModelGetter","invokeModelSetter","this.$$ngModelGet","this.$$ngModelSet","$$$p","$$updateEmptyClasses","NOT_EMPTY_CLASS","EMPTY_CLASS","UNTOUCHED_CLASS","TOUCHED_CLASS","$setTouched","$$lastCommittedViewValue","prevValid","prevModelValue","allowInvalid","that","$$runValidators","allValid","$$writeModelToScope","doneCallback","processSyncValidators","syncValidatorsValid","validator","Boolean","setValidity","processAsyncValidators","validatorPromises","validationDone","localValidationRunId","processParseErrors","errorKey","$$parseAndValidate","$$debounceViewValueCommit","debounceDelay","$overrideModelOptions","createChild","$$setUpdateOnEvents","$processModelValue","$$format","formatters","ngModelCompile","ngModelPreLink","modelCtrl","formCtrl","optionsCtrl","ngModelPostLink","setTouched","DEFAULT_REGEXP","inheritAll","updateOnDefault","updateOn","debounce","getterSetter","NgModelOptionsController","$$attrs","parentOptions","parentCtrl","modelOptionsDefinition","ngOptionsMinErr","NG_OPTIONS_REGEXP","parseOptionsExpression","optionsExp","selectElement","Option","selectValue","label","group","disabled","getOptionValuesKeys","optionValues","optionValuesKeys","keyName","itemKey","valueName","selectAs","trackBy","viewValueFn","trackByFn","getTrackByValueFn","getHashOfValue","getTrackByValue","getLocals","displayFn","groupByFn","disableWhenFn","valuesFn","getWatchables","watchedArray","optionValuesLength","disableWhen","getOptions","optionItems","selectValueMap","optionItem","getOptionFromViewValue","getViewValueFromOption","optionTemplate","optGroupTemplate","ngOptionsPreLink","registerOption","ngOptionsPostLink","getAndUpdateSelectedOption","updateOptionElement","selectCtrl","ngModelCtrl","hasEmptyOption","emptyOption","providedEmptyOption","unknownOption","listFragment","generateUnknownOptionValue","selectCtrl.generateUnknownOptionValue","writeValue","selectCtrl.writeValue","selectedOptions","readValue","selectCtrl.readValue","selectedValues","selections","selectedOption","selectedIndex","removeUnknownOption","selectUnknownOrEmptyOption","unselectEmptyOption","selectCtrl.registerOption","optionScope","needsRerender","$isEmptyOptionSelected","updateOptions","groupElementMap","addOption","groupElement","optionElement","nextValue","BRACE","IS_WHEN","updateElementText","newText","numberExp","whenExp","whens","whensExpFns","braceReplacement","watchRemover","lastCount","attributeName","tmpMatch","whenKey","ngPluralizeWatchAction","countIsNaN","pluralCat","whenExpFn","ngRefMinErr","refValue","ngRefRead","ngRepeatMinErr","updateScope","valueIdentifier","keyIdentifier","arrayLength","$first","$last","$middle","$odd","$even","trackByIdArrayFn","trackByIdObjFn","ngRepeatCompile","ngRepeatEndComment","aliasAs","trackByExp","trackByIdExpFn","hashFnLocals","trackByExpGetter","ngRepeatLink","lastBlockMap","ngRepeatAction","previousNode","nextNode","nextBlockMap","collectionLength","trackById","collectionKeys","nextBlockOrder","trackByIdFn","blockKey","ngRepeatTransclude","ngShowWatchAction","NG_HIDE_CLASS","NG_HIDE_IN_PROGRESS_CLASS","ngHideWatchAction","ngStyleWatchAction","newStyles","oldStyles","NgSwitchController","cases","ngSwitchController","selectedTranscludes","selectedElements","previousLeaveAnimations","selectedScopes","spliceFactory","ngSwitchWatchAction","selectedTransclude","caseElement","selectedScope","anchor","ngSwitchWhenSeparator","whenCase","ngTranscludeMinErr","ngTranscludeCompile","fallbackLinkFn","ngTranscludePostLink","useFallbackContent","ngTranscludeSlot","ngTranscludeCloneAttachFn","noopNgModelController","SelectController","scheduleRender","renderScheduled","scheduleViewValueUpdate","renderAfter","updateScheduled","optionsMap","renderUnknownOption","self.renderUnknownOption","unknownVal","updateUnknownOption","self.updateUnknownOption","self.generateUnknownOptionValue","self.removeUnknownOption","selectEmptyOption","self.selectEmptyOption","self.unselectEmptyOption","self.readValue","realVal","hasOption","self.writeValue","currentlySelectedOption","hashedVal","self.addOption","removeOption","self.removeOption","self.hasOption","$hasEmptyOption","self.$hasEmptyOption","$isUnknownOptionSelected","self.$isUnknownOptionSelected","self.$isEmptyOptionSelected","self.selectUnknownOrEmptyOption","self.registerOption","optionAttrs","interpolateValueFn","interpolateTextFn","valueAttributeObserveAction","removal","previouslySelected","interpolateWatchAction","removeValue","selectPreLink","shouldBeSelected","lastView","lastViewRef","selectMultipleWatch","ngModelCtrl.$isEmpty","selectPostLink","ngModelCtrl.$render","selectCtrlName","ctrl.$validators.required","tElm","tAttr","attrVal","oldRegexp","ctrl.$validators.pattern","maxlengthParsed","ctrl.$validators.maxlength","minlengthParsed","ctrl.$validators.minlength","getDecimals","opt_precision","ONE","OTHER","$$csp","head"] -} diff --git a/node_modules/angular/bower.json b/node_modules/angular/bower.json deleted file mode 100644 index 9301ed1..0000000 --- a/node_modules/angular/bower.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "angular", - "version": "1.7.9", - "license": "MIT", - "main": "./angular.js", - "ignore": [], - "dependencies": { - } -} diff --git a/node_modules/angular/index.js b/node_modules/angular/index.js deleted file mode 100644 index 5c1aafc..0000000 --- a/node_modules/angular/index.js +++ /dev/null @@ -1,2 +0,0 @@ -require('./angular'); -module.exports = angular; diff --git a/node_modules/angular/package.json b/node_modules/angular/package.json deleted file mode 100644 index ae5fad1..0000000 --- a/node_modules/angular/package.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "_args": [ - [ - "angular@1.7.9", - "/Users/yoshi/Frontend-Dev/Tic-Tac-Toe" - ] - ], - "_from": "angular@1.7.9", - "_id": "angular@1.7.9", - "_inBundle": false, - "_integrity": "sha512-5se7ZpcOtu0MBFlzGv5dsM1quQDoDeUTwZrWjGtTNA7O88cD8TEk5IEKCTDa3uECV9XnvKREVUr7du1ACiWGFQ==", - "_location": "/angular", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "angular@1.7.9", - "name": "angular", - "escapedName": "angular", - "rawSpec": "1.7.9", - "saveSpec": null, - "fetchSpec": "1.7.9" - }, - "_requiredBy": [ - "/" - ], - "_resolved": "https://registry.npmjs.org/angular/-/angular-1.7.9.tgz", - "_spec": "1.7.9", - "_where": "/Users/yoshi/Frontend-Dev/Tic-Tac-Toe", - "author": { - "name": "Angular Core Team", - "email": "angular-core+npm@google.com" - }, - "bugs": { - "url": "https://github.com/angular/angular.js/issues" - }, - "description": "HTML enhanced for web apps", - "homepage": "http://angularjs.org", - "keywords": [ - "angular", - "framework", - "browser", - "client-side" - ], - "license": "MIT", - "main": "index.js", - "name": "angular", - "repository": { - "type": "git", - "url": "git+https://github.com/angular/angular.js.git" - }, - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "version": "1.7.9" -} diff --git a/node_modules/bootstrap/CHANGELOG.md b/node_modules/bootstrap/CHANGELOG.md deleted file mode 100644 index 416b64b..0000000 --- a/node_modules/bootstrap/CHANGELOG.md +++ /dev/null @@ -1,5 +0,0 @@ -Bootstrap uses [GitHub's Releases feature](https://blog.github.com/2013-07-02-release-your-software/) for its changelogs. - -See [the Releases section of our GitHub project](https://github.com/twbs/bootstrap/releases) for changelogs for each release version of Bootstrap. - -Release announcement posts on [the official Bootstrap blog](https://blog.getbootstrap.com/) contain summaries of the most noteworthy changes made in each release. diff --git a/node_modules/bootstrap/Gruntfile.js b/node_modules/bootstrap/Gruntfile.js deleted file mode 100644 index 05d88c2..0000000 --- a/node_modules/bootstrap/Gruntfile.js +++ /dev/null @@ -1,430 +0,0 @@ -/*! - * Bootstrap's Gruntfile - * https://getbootstrap.com/ - * Copyright 2013-2019 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - */ - -module.exports = function (grunt) { - 'use strict'; - - // Force use of Unix newlines - grunt.util.linefeed = '\n'; - - RegExp.quote = function (string) { - return string.replace(/[-\\^$*+?.()|[\]{}]/g, '\\$&'); - }; - - var fs = require('fs'); - var path = require('path'); - var generateGlyphiconsData = require('./grunt/bs-glyphicons-data-generator.js'); - var BsLessdocParser = require('./grunt/bs-lessdoc-parser.js'); - var getLessVarsData = function () { - var filePath = path.join(__dirname, 'less/variables.less'); - var fileContent = fs.readFileSync(filePath, { encoding: 'utf8' }); - var parser = new BsLessdocParser(fileContent); - return { sections: parser.parseFile() }; - }; - var generateRawFiles = require('./grunt/bs-raw-files-generator.js'); - var generateCommonJSModule = require('./grunt/bs-commonjs-generator.js'); - var configBridge = grunt.file.readJSON('./grunt/configBridge.json', { encoding: 'utf8' }); - - Object.keys(configBridge.paths).forEach(function (key) { - configBridge.paths[key].forEach(function (val, i, arr) { - arr[i] = path.join('./docs/assets', val); - }); - }); - - // Project configuration. - grunt.initConfig({ - - // Metadata. - pkg: grunt.file.readJSON('package.json'), - banner: '/*!\n' + - ' * Bootstrap v<%= pkg.version %> (<%= pkg.homepage %>)\n' + - ' * Copyright 2011-<%= grunt.template.today("yyyy") %> <%= pkg.author %>\n' + - ' * Licensed under the <%= pkg.license %> license\n' + - ' */\n', - jqueryCheck: configBridge.config.jqueryCheck.join('\n'), - jqueryVersionCheck: configBridge.config.jqueryVersionCheck.join('\n'), - - // Task configuration. - clean: { - dist: 'dist', - docs: 'docs/dist' - }, - - jshint: { - options: { - jshintrc: 'js/.jshintrc' - }, - grunt: { - options: { - jshintrc: 'grunt/.jshintrc' - }, - src: ['Gruntfile.js', 'package.js', 'grunt/*.js'] - }, - core: { - src: 'js/*.js' - }, - test: { - options: { - jshintrc: 'js/tests/unit/.jshintrc' - }, - src: 'js/tests/unit/*.js' - }, - assets: { - src: ['docs/assets/js/src/*.js', 'docs/assets/js/*.js', '!docs/assets/js/*.min.js'] - } - }, - - jscs: { - options: { - config: 'js/.jscsrc' - }, - grunt: { - src: '<%= jshint.grunt.src %>' - }, - core: { - src: '<%= jshint.core.src %>' - }, - test: { - src: '<%= jshint.test.src %>' - }, - assets: { - options: { - requireCamelCaseOrUpperCaseIdentifiers: null - }, - src: '<%= jshint.assets.src %>' - } - }, - - concat: { - options: { - banner: '<%= banner %>\n<%= jqueryCheck %>\n<%= jqueryVersionCheck %>', - stripBanners: false - }, - core: { - src: [ - 'js/transition.js', - 'js/alert.js', - 'js/button.js', - 'js/carousel.js', - 'js/collapse.js', - 'js/dropdown.js', - 'js/modal.js', - 'js/tooltip.js', - 'js/popover.js', - 'js/scrollspy.js', - 'js/tab.js', - 'js/affix.js' - ], - dest: 'dist/js/<%= pkg.name %>.js' - } - }, - - uglify: { - options: { - compress: true, - mangle: true, - ie8: true, - output: { - comments: /^!|@preserve|@license|@cc_on/i - } - }, - core: { - src: '<%= concat.core.dest %>', - dest: 'dist/js/<%= pkg.name %>.min.js' - }, - customize: { - src: configBridge.paths.customizerJs, - dest: 'docs/assets/js/customize.min.js' - }, - docs: { - src: configBridge.paths.docsJs, - dest: 'docs/assets/js/docs.min.js' - } - }, - - less: { - options: { - ieCompat: true, - strictMath: true, - sourceMap: true, - outputSourceFiles: true - }, - core: { - options: { - sourceMapURL: '<%= pkg.name %>.css.map', - sourceMapFilename: 'dist/css/<%= pkg.name %>.css.map' - }, - src: 'less/bootstrap.less', - dest: 'dist/css/<%= pkg.name %>.css' - }, - theme: { - options: { - sourceMapURL: '<%= pkg.name %>-theme.css.map', - sourceMapFilename: 'dist/css/<%= pkg.name %>-theme.css.map' - }, - src: 'less/theme.less', - dest: 'dist/css/<%= pkg.name %>-theme.css' - }, - docs: { - options: { - sourceMapURL: 'docs.css.map', - sourceMapFilename: 'docs/assets/css/docs.css.map' - }, - src: 'docs/assets/less/docs.less', - dest: 'docs/assets/css/docs.css' - }, - docsIe: { - options: { - sourceMap: false - }, - src: 'docs/assets/less/ie10-viewport-bug-workaround.less', - dest: 'docs/assets/css/ie10-viewport-bug-workaround.css' - } - }, - - postcss: { - options: { - map: { - inline: false, - sourcesContent: true - }, - processors: [ - require('autoprefixer')(configBridge.config.autoprefixer) - ] - }, - core: { - src: 'dist/css/<%= pkg.name %>.css' - }, - theme: { - src: 'dist/css/<%= pkg.name %>-theme.css' - }, - docs: { - src: 'docs/assets/css/docs.css' - }, - examples: { - options: { - map: false - }, - expand: true, - cwd: 'docs/examples/', - src: ['**/*.css'], - dest: 'docs/examples/' - } - }, - - stylelint: { - options: { - configFile: 'grunt/.stylelintrc', - reportNeedlessDisables: false - }, - dist: [ - 'less/**/*.less' - ], - docs: [ - 'docs/assets/less/**/*.less' - ], - examples: [ - 'docs/examples/**/*.css' - ] - }, - - cssmin: { - options: { - compatibility: 'ie8', - sourceMap: true, - sourceMapInlineSources: true, - level: { - 1: { - specialComments: 'all' - } - } - }, - core: { - src: 'dist/css/<%= pkg.name %>.css', - dest: 'dist/css/<%= pkg.name %>.min.css' - }, - theme: { - src: 'dist/css/<%= pkg.name %>-theme.css', - dest: 'dist/css/<%= pkg.name %>-theme.min.css' - }, - docs: { - src: 'docs/assets/css/docs.css', - dest: 'docs/assets/css/docs.min.css' - } - }, - - copy: { - fonts: { - expand: true, - src: 'fonts/**', - dest: 'dist/' - }, - docs: { - expand: true, - cwd: 'dist/', - src: [ - '**/*' - ], - dest: 'docs/dist/' - } - }, - - connect: { - server: { - options: { - port: 3000, - base: '.' - } - } - }, - - jekyll: { - options: { - bundleExec: true, - config: '_config.yml', - incremental: false - }, - docs: {}, - github: { - options: { - raw: 'github: true' - } - } - }, - - pug: { - options: { - pretty: true, - data: getLessVarsData - }, - customizerVars: { - src: 'docs/_pug/customizer-variables.pug', - dest: 'docs/_includes/customizer-variables.html' - }, - customizerNav: { - src: 'docs/_pug/customizer-nav.pug', - dest: 'docs/_includes/nav/customize.html' - } - }, - - htmllint: { - options: { - ignore: [ - 'Element "img" is missing required attribute "src".' - ], - noLangDetect: true - }, - src: ['_gh_pages/**/*.html', 'js/tests/**/*.html'] - }, - - watch: { - src: { - files: '<%= jshint.core.src %>', - tasks: ['jshint:core', 'exec:karma', 'concat'] - }, - test: { - files: '<%= jshint.test.src %>', - tasks: ['jshint:test', 'exec:karma'] - }, - less: { - files: 'less/**/*.less', - tasks: ['less', 'copy'] - }, - docs: { - files: 'docs/assets/less/**/*.less', - tasks: ['less'] - } - }, - - exec: { - browserstack: { - command: 'cross-env BROWSER=true karma start grunt/karma.conf.js' - }, - karma: { - command: 'karma start grunt/karma.conf.js' - } - } - }); - - - // These plugins provide necessary tasks. - require('load-grunt-tasks')(grunt, { scope: 'devDependencies' }); - require('time-grunt')(grunt); - - // Docs HTML validation task - grunt.registerTask('validate-html', ['jekyll:docs', 'htmllint']); - - var runSubset = function (subset) { - return !process.env.TWBS_TEST || process.env.TWBS_TEST === subset; - }; - var isUndefOrNonZero = function (val) { - return typeof val === 'undefined' || val !== '0'; - }; - - // Test task. - var testSubtasks = []; - // Skip core tests if running a different subset of the test suite - if (runSubset('core')) { - testSubtasks = testSubtasks.concat(['dist-css', 'dist-js', 'stylelint:dist', 'test-js', 'docs']); - } - // Skip HTML validation if running a different subset of the test suite - if (runSubset('validate-html') && - // Skip HTML5 validator on Travis when [skip validator] is in the commit message - isUndefOrNonZero(process.env.TWBS_DO_VALIDATOR)) { - testSubtasks.push('validate-html'); - } - // Only run BrowserStack tests if there's a BrowserStack access key - if (typeof process.env.BROWSER_STACK_USERNAME !== 'undefined' && - // Skip BrowserStack if running a different subset of the test suite - runSubset('browserstack') && - // Skip BrowserStack on Travis when [skip browserstack] is in the commit message - isUndefOrNonZero(process.env.TWBS_DO_BROWSERSTACK)) { - testSubtasks.push('exec:browserstack'); - } - - grunt.registerTask('test', testSubtasks); - grunt.registerTask('test-js', ['jshint:core', 'jshint:test', 'jshint:grunt', 'jscs:core', 'jscs:test', 'jscs:grunt', 'exec:karma']); - - // JS distribution task. - grunt.registerTask('dist-js', ['concat', 'uglify:core', 'commonjs']); - - // CSS distribution task. - grunt.registerTask('dist-css', ['less:core', 'less:theme', 'postcss:core', 'postcss:theme', 'cssmin:core', 'cssmin:theme']); - - // Full distribution task. - grunt.registerTask('dist', ['clean:dist', 'dist-css', 'copy:fonts', 'dist-js']); - - // Default task. - grunt.registerTask('default', ['clean:dist', 'copy:fonts', 'test']); - - grunt.registerTask('build-glyphicons-data', function () { - generateGlyphiconsData.call(this, grunt); - }); - - // task for building customizer - grunt.registerTask('build-customizer', ['build-customizer-html', 'build-raw-files']); - grunt.registerTask('build-customizer-html', 'pug'); - grunt.registerTask('build-raw-files', 'Add scripts/less files to customizer.', function () { - var banner = grunt.template.process('<%= banner %>'); - generateRawFiles(grunt, banner); - }); - - grunt.registerTask('commonjs', 'Generate CommonJS entrypoint module in dist dir.', function () { - var srcFiles = grunt.config.get('concat.core.src'); - var destFilepath = 'dist/js/npm.js'; - generateCommonJSModule(grunt, srcFiles, destFilepath); - }); - - // Docs task. - grunt.registerTask('docs-css', ['less:docs', 'less:docsIe', 'postcss:docs', 'postcss:examples', 'cssmin:docs']); - grunt.registerTask('lint-docs-css', ['stylelint:docs', 'stylelint:examples']); - grunt.registerTask('docs-js', ['uglify:docs', 'uglify:customize']); - grunt.registerTask('lint-docs-js', ['jshint:assets', 'jscs:assets']); - grunt.registerTask('docs', ['docs-css', 'lint-docs-css', 'docs-js', 'lint-docs-js', 'clean:docs', 'copy:docs', 'build-glyphicons-data', 'build-customizer']); - - grunt.registerTask('prep-release', ['dist', 'docs', 'jekyll:github']); -}; diff --git a/node_modules/bootstrap/LICENSE b/node_modules/bootstrap/LICENSE deleted file mode 100644 index ce3fc9f..0000000 --- a/node_modules/bootstrap/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2011-2019 Twitter, Inc. - -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. diff --git a/node_modules/bootstrap/README.md b/node_modules/bootstrap/README.md deleted file mode 100644 index f8b77ee..0000000 --- a/node_modules/bootstrap/README.md +++ /dev/null @@ -1,149 +0,0 @@ -# [Bootstrap](https://getbootstrap.com/) - -[![Slack](https://bootstrap-slack.herokuapp.com/badge.svg)](https://bootstrap-slack.herokuapp.com/) -![Bower version](https://img.shields.io/bower/v/bootstrap.svg) -[![npm version](https://img.shields.io/npm/v/bootstrap.svg)](https://www.npmjs.com/package/bootstrap) -[![Build Status](https://img.shields.io/travis/twbs/bootstrap/master.svg)](https://travis-ci.org/twbs/bootstrap) -[![devDependency Status](https://img.shields.io/david/dev/twbs/bootstrap.svg)](https://david-dm.org/twbs/bootstrap#info=devDependencies) -[![NuGet](https://img.shields.io/nuget/v/bootstrap.svg)](https://www.nuget.org/packages/Bootstrap) - -Bootstrap is a sleek, intuitive, and powerful front-end framework for faster and easier web development, created by [Mark Otto](https://twitter.com/mdo) and [Jacob Thornton](https://twitter.com/fat), and maintained by the [core team](https://github.com/orgs/twbs/people) with the massive support and involvement of the community. - -To get started, check out ! - - -## Table of contents - -* [Quick start](#quick-start) -* [Bugs and feature requests](#bugs-and-feature-requests) -* [Documentation](#documentation) -* [Contributing](#contributing) -* [Community](#community) -* [Versioning](#versioning) -* [Creators](#creators) -* [Thanks](#thanks) -* [Copyright and license](#copyright-and-license) - - -## Quick start - -Several quick start options are available: - -* [Download the latest release](https://github.com/twbs/bootstrap/archive/v3.4.1.zip). -* Clone the repo: `git clone https://github.com/twbs/bootstrap.git`. -* Install with [Bower](https://bower.io/): `bower install bootstrap`. -* Install with [npm](https://www.npmjs.com/): `npm install bootstrap@3`. -* Install with [Meteor](https://www.meteor.com/): `meteor add twbs:bootstrap`. -* Install with [Composer](https://getcomposer.org/): `composer require twbs/bootstrap`. - -Read the [Getting started page](https://getbootstrap.com/docs/3.4/getting-started/) for information on the framework contents, templates and examples, and more. - -### What's included - -Within the download you'll find the following directories and files, logically grouping common assets and providing both compiled and minified variations. You'll see something like this: - -``` -bootstrap/ -├── css/ -│ ├── bootstrap.css -│ ├── bootstrap.css.map -│ ├── bootstrap.min.css -│ ├── bootstrap.min.css.map -│ ├── bootstrap-theme.css -│ ├── bootstrap-theme.css.map -│ ├── bootstrap-theme.min.css -│ └── bootstrap-theme.min.css.map -├── js/ -│ ├── bootstrap.js -│ └── bootstrap.min.js -└── fonts/ - ├── glyphicons-halflings-regular.eot - ├── glyphicons-halflings-regular.svg - ├── glyphicons-halflings-regular.ttf - ├── glyphicons-halflings-regular.woff - └── glyphicons-halflings-regular.woff2 -``` - -We provide compiled CSS and JS (`bootstrap.*`), as well as compiled and minified CSS and JS (`bootstrap.min.*`). CSS [source maps](https://developers.google.com/web/tools/chrome-devtools/javascript/source-maps) (`bootstrap.*.map`) are available for use with certain browsers' developer tools. Fonts from Glyphicons are included, as is the optional Bootstrap theme. - - -## Bugs and feature requests - -Have a bug or a feature request? Please first read the [issue guidelines](https://github.com/twbs/bootstrap/blob/master/CONTRIBUTING.md#using-the-issue-tracker) and search for existing and closed issues. If your problem or idea is not addressed yet, [please open a new issue](https://github.com/twbs/bootstrap/issues/new). - -Note that **feature requests must target [Bootstrap v4](https://github.com/twbs/bootstrap/tree/v4-dev),** because Bootstrap v3 is now in maintenance mode and is closed off to new features. This is so that we can focus our efforts on Bootstrap v4. - - -## Documentation - -Bootstrap's documentation, included in this repo in the root directory, is built with [Jekyll](https://jekyllrb.com/) and publicly hosted on GitHub Pages at . The docs may also be run locally. - -### Running documentation locally - -1. If necessary, [install Jekyll](https://jekyllrb.com/docs/installation/) and other Ruby dependencies with `bundle install`. - **Note for Windows users:** Read [this guide](https://jekyllrb.com/docs/installation/windows/) to get Jekyll up and running without problems. -2. From the root `/bootstrap` directory, run `bundle exec jekyll serve` in the command line. -4. Open `http://localhost:9001` in your browser, and voilà. - -Learn more about using Jekyll by reading its [documentation](https://jekyllrb.com/docs/). - -### Documentation for previous releases - -Documentation for v2.3.2 has been made available for the time being at while folks transition to Bootstrap 3. - -[Previous releases](https://github.com/twbs/bootstrap/releases) and their documentation are also available for download. - - -## Contributing - -Please read through our [contributing guidelines](https://github.com/twbs/bootstrap/blob/master/CONTRIBUTING.md). Included are directions for opening issues, coding standards, and notes on development. - -Moreover, if your pull request contains JavaScript patches or features, you must include [relevant unit tests](https://github.com/twbs/bootstrap/tree/master/js/tests). All HTML and CSS should conform to the [Code Guide](https://github.com/mdo/code-guide), maintained by [Mark Otto](https://github.com/mdo). - -**Bootstrap v3 is now closed off to new features.** It has gone into maintenance mode so that we can focus our efforts on [Bootstrap v4](https://github.com/twbs/bootstrap/tree/v4-dev), the future of the framework. Pull requests which add new features (rather than fix bugs) should target [Bootstrap v4 (the `v4-dev` git branch)](https://github.com/twbs/bootstrap/tree/v4-dev) instead. - -Editor preferences are available in the [editor config](https://github.com/twbs/bootstrap/blob/master/.editorconfig) for easy use in common text editors. Read more and download plugins at . - - -## Community - -Get updates on Bootstrap's development and chat with the project maintainers and community members. - -* Follow [@getbootstrap on Twitter](https://twitter.com/getbootstrap). -* Read and subscribe to [The Official Bootstrap Blog](https://blog.getbootstrap.com/). -* Join [the official Slack room](https://bootstrap-slack.herokuapp.com/). -* Chat with fellow Bootstrappers in IRC. On the `irc.freenode.net` server, in the `##bootstrap` channel. -* Implementation help may be found at Stack Overflow (tagged [`twitter-bootstrap-3`](https://stackoverflow.com/questions/tagged/twitter-bootstrap-3)). -* Developers should use the keyword `bootstrap` on packages which modify or add to the functionality of Bootstrap when distributing through [npm](https://www.npmjs.com/search?q=keywords:bootstrap) or similar delivery mechanisms for maximum discoverability. - - -## Versioning - -For transparency into our release cycle and in striving to maintain backward compatibility, Bootstrap is maintained under [the Semantic Versioning guidelines](https://semver.org/). Sometimes we screw up, but we'll adhere to those rules whenever possible. - -See [the Releases section of our GitHub project](https://github.com/twbs/bootstrap/releases) for changelogs for each release version of Bootstrap. Release announcement posts on [the official Bootstrap blog](https://blog.getbootstrap.com/) contain summaries of the most noteworthy changes made in each release. - - -## Thanks - -BrowserStack Logo - -Thanks to [BrowserStack](https://www.browserstack.com/) for providing the infrastructure that allows us to test in real browsers! - - -## Creators - -**Mark Otto** - -* -* - -**Jacob Thornton** - -* -* - - -## Copyright and license - -Code and documentation copyright 2011-2019 Twitter, Inc. Code released under [the MIT license](https://github.com/twbs/bootstrap/blob/master/LICENSE). Docs released under [Creative Commons](https://github.com/twbs/bootstrap/blob/master/docs/LICENSE). diff --git a/node_modules/bootstrap/dist/css/bootstrap-theme.css b/node_modules/bootstrap/dist/css/bootstrap-theme.css deleted file mode 100644 index ea33f76..0000000 --- a/node_modules/bootstrap/dist/css/bootstrap-theme.css +++ /dev/null @@ -1,587 +0,0 @@ -/*! - * Bootstrap v3.4.1 (https://getbootstrap.com/) - * Copyright 2011-2019 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - */ -.btn-default, -.btn-primary, -.btn-success, -.btn-info, -.btn-warning, -.btn-danger { - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2); - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075); -} -.btn-default:active, -.btn-primary:active, -.btn-success:active, -.btn-info:active, -.btn-warning:active, -.btn-danger:active, -.btn-default.active, -.btn-primary.active, -.btn-success.active, -.btn-info.active, -.btn-warning.active, -.btn-danger.active { - -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); - box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); -} -.btn-default.disabled, -.btn-primary.disabled, -.btn-success.disabled, -.btn-info.disabled, -.btn-warning.disabled, -.btn-danger.disabled, -.btn-default[disabled], -.btn-primary[disabled], -.btn-success[disabled], -.btn-info[disabled], -.btn-warning[disabled], -.btn-danger[disabled], -fieldset[disabled] .btn-default, -fieldset[disabled] .btn-primary, -fieldset[disabled] .btn-success, -fieldset[disabled] .btn-info, -fieldset[disabled] .btn-warning, -fieldset[disabled] .btn-danger { - -webkit-box-shadow: none; - box-shadow: none; -} -.btn-default .badge, -.btn-primary .badge, -.btn-success .badge, -.btn-info .badge, -.btn-warning .badge, -.btn-danger .badge { - text-shadow: none; -} -.btn:active, -.btn.active { - background-image: none; -} -.btn-default { - background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%); - background-image: -o-linear-gradient(top, #fff 0%, #e0e0e0 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#e0e0e0)); - background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - background-repeat: repeat-x; - border-color: #dbdbdb; - text-shadow: 0 1px 0 #fff; - border-color: #ccc; -} -.btn-default:hover, -.btn-default:focus { - background-color: #e0e0e0; - background-position: 0 -15px; -} -.btn-default:active, -.btn-default.active { - background-color: #e0e0e0; - border-color: #dbdbdb; -} -.btn-default.disabled, -.btn-default[disabled], -fieldset[disabled] .btn-default, -.btn-default.disabled:hover, -.btn-default[disabled]:hover, -fieldset[disabled] .btn-default:hover, -.btn-default.disabled:focus, -.btn-default[disabled]:focus, -fieldset[disabled] .btn-default:focus, -.btn-default.disabled.focus, -.btn-default[disabled].focus, -fieldset[disabled] .btn-default.focus, -.btn-default.disabled:active, -.btn-default[disabled]:active, -fieldset[disabled] .btn-default:active, -.btn-default.disabled.active, -.btn-default[disabled].active, -fieldset[disabled] .btn-default.active { - background-color: #e0e0e0; - background-image: none; -} -.btn-primary { - background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%); - background-image: -o-linear-gradient(top, #337ab7 0%, #265a88 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#265a88)); - background-image: linear-gradient(to bottom, #337ab7 0%, #265a88 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - background-repeat: repeat-x; - border-color: #245580; -} -.btn-primary:hover, -.btn-primary:focus { - background-color: #265a88; - background-position: 0 -15px; -} -.btn-primary:active, -.btn-primary.active { - background-color: #265a88; - border-color: #245580; -} -.btn-primary.disabled, -.btn-primary[disabled], -fieldset[disabled] .btn-primary, -.btn-primary.disabled:hover, -.btn-primary[disabled]:hover, -fieldset[disabled] .btn-primary:hover, -.btn-primary.disabled:focus, -.btn-primary[disabled]:focus, -fieldset[disabled] .btn-primary:focus, -.btn-primary.disabled.focus, -.btn-primary[disabled].focus, -fieldset[disabled] .btn-primary.focus, -.btn-primary.disabled:active, -.btn-primary[disabled]:active, -fieldset[disabled] .btn-primary:active, -.btn-primary.disabled.active, -.btn-primary[disabled].active, -fieldset[disabled] .btn-primary.active { - background-color: #265a88; - background-image: none; -} -.btn-success { - background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%); - background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641)); - background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - background-repeat: repeat-x; - border-color: #3e8f3e; -} -.btn-success:hover, -.btn-success:focus { - background-color: #419641; - background-position: 0 -15px; -} -.btn-success:active, -.btn-success.active { - background-color: #419641; - border-color: #3e8f3e; -} -.btn-success.disabled, -.btn-success[disabled], -fieldset[disabled] .btn-success, -.btn-success.disabled:hover, -.btn-success[disabled]:hover, -fieldset[disabled] .btn-success:hover, -.btn-success.disabled:focus, -.btn-success[disabled]:focus, -fieldset[disabled] .btn-success:focus, -.btn-success.disabled.focus, -.btn-success[disabled].focus, -fieldset[disabled] .btn-success.focus, -.btn-success.disabled:active, -.btn-success[disabled]:active, -fieldset[disabled] .btn-success:active, -.btn-success.disabled.active, -.btn-success[disabled].active, -fieldset[disabled] .btn-success.active { - background-color: #419641; - background-image: none; -} -.btn-info { - background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%); - background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2)); - background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - background-repeat: repeat-x; - border-color: #28a4c9; -} -.btn-info:hover, -.btn-info:focus { - background-color: #2aabd2; - background-position: 0 -15px; -} -.btn-info:active, -.btn-info.active { - background-color: #2aabd2; - border-color: #28a4c9; -} -.btn-info.disabled, -.btn-info[disabled], -fieldset[disabled] .btn-info, -.btn-info.disabled:hover, -.btn-info[disabled]:hover, -fieldset[disabled] .btn-info:hover, -.btn-info.disabled:focus, -.btn-info[disabled]:focus, -fieldset[disabled] .btn-info:focus, -.btn-info.disabled.focus, -.btn-info[disabled].focus, -fieldset[disabled] .btn-info.focus, -.btn-info.disabled:active, -.btn-info[disabled]:active, -fieldset[disabled] .btn-info:active, -.btn-info.disabled.active, -.btn-info[disabled].active, -fieldset[disabled] .btn-info.active { - background-color: #2aabd2; - background-image: none; -} -.btn-warning { - background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%); - background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#eb9316)); - background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - background-repeat: repeat-x; - border-color: #e38d13; -} -.btn-warning:hover, -.btn-warning:focus { - background-color: #eb9316; - background-position: 0 -15px; -} -.btn-warning:active, -.btn-warning.active { - background-color: #eb9316; - border-color: #e38d13; -} -.btn-warning.disabled, -.btn-warning[disabled], -fieldset[disabled] .btn-warning, -.btn-warning.disabled:hover, -.btn-warning[disabled]:hover, -fieldset[disabled] .btn-warning:hover, -.btn-warning.disabled:focus, -.btn-warning[disabled]:focus, -fieldset[disabled] .btn-warning:focus, -.btn-warning.disabled.focus, -.btn-warning[disabled].focus, -fieldset[disabled] .btn-warning.focus, -.btn-warning.disabled:active, -.btn-warning[disabled]:active, -fieldset[disabled] .btn-warning:active, -.btn-warning.disabled.active, -.btn-warning[disabled].active, -fieldset[disabled] .btn-warning.active { - background-color: #eb9316; - background-image: none; -} -.btn-danger { - background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%); - background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c12e2a)); - background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - background-repeat: repeat-x; - border-color: #b92c28; -} -.btn-danger:hover, -.btn-danger:focus { - background-color: #c12e2a; - background-position: 0 -15px; -} -.btn-danger:active, -.btn-danger.active { - background-color: #c12e2a; - border-color: #b92c28; -} -.btn-danger.disabled, -.btn-danger[disabled], -fieldset[disabled] .btn-danger, -.btn-danger.disabled:hover, -.btn-danger[disabled]:hover, -fieldset[disabled] .btn-danger:hover, -.btn-danger.disabled:focus, -.btn-danger[disabled]:focus, -fieldset[disabled] .btn-danger:focus, -.btn-danger.disabled.focus, -.btn-danger[disabled].focus, -fieldset[disabled] .btn-danger.focus, -.btn-danger.disabled:active, -.btn-danger[disabled]:active, -fieldset[disabled] .btn-danger:active, -.btn-danger.disabled.active, -.btn-danger[disabled].active, -fieldset[disabled] .btn-danger.active { - background-color: #c12e2a; - background-image: none; -} -.thumbnail, -.img-thumbnail { - -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075); - box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075); -} -.dropdown-menu > li > a:hover, -.dropdown-menu > li > a:focus { - background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); - background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8)); - background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); - background-repeat: repeat-x; - background-color: #e8e8e8; -} -.dropdown-menu > .active > a, -.dropdown-menu > .active > a:hover, -.dropdown-menu > .active > a:focus { - background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%); - background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4)); - background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0); - background-repeat: repeat-x; - background-color: #2e6da4; -} -.navbar-default { - background-image: -webkit-linear-gradient(top, #ffffff 0%, #f8f8f8 100%); - background-image: -o-linear-gradient(top, #ffffff 0%, #f8f8f8 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#ffffff), to(#f8f8f8)); - background-image: linear-gradient(to bottom, #ffffff 0%, #f8f8f8 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - border-radius: 4px; - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075); -} -.navbar-default .navbar-nav > .open > a, -.navbar-default .navbar-nav > .active > a { - background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%); - background-image: -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#dbdbdb), to(#e2e2e2)); - background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0); - background-repeat: repeat-x; - -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075); -} -.navbar-brand, -.navbar-nav > li > a { - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.25); -} -.navbar-inverse { - background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%); - background-image: -o-linear-gradient(top, #3c3c3c 0%, #222 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222)); - background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - border-radius: 4px; -} -.navbar-inverse .navbar-nav > .open > a, -.navbar-inverse .navbar-nav > .active > a { - background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%); - background-image: -o-linear-gradient(top, #080808 0%, #0f0f0f 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#080808), to(#0f0f0f)); - background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0); - background-repeat: repeat-x; - -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25); - box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25); -} -.navbar-inverse .navbar-brand, -.navbar-inverse .navbar-nav > li > a { - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); -} -.navbar-static-top, -.navbar-fixed-top, -.navbar-fixed-bottom { - border-radius: 0; -} -@media (max-width: 767px) { - .navbar .navbar-nav .open .dropdown-menu > .active > a, - .navbar .navbar-nav .open .dropdown-menu > .active > a:hover, - .navbar .navbar-nav .open .dropdown-menu > .active > a:focus { - color: #fff; - background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%); - background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4)); - background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0); - background-repeat: repeat-x; - } -} -.alert { - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.2); - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05); -} -.alert-success { - background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%); - background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc)); - background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0); - background-repeat: repeat-x; - border-color: #b2dba1; -} -.alert-info { - background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%); - background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0)); - background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0); - background-repeat: repeat-x; - border-color: #9acfea; -} -.alert-warning { - background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%); - background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0)); - background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0); - background-repeat: repeat-x; - border-color: #f5e79e; -} -.alert-danger { - background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%); - background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3)); - background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0); - background-repeat: repeat-x; - border-color: #dca7a7; -} -.progress { - background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%); - background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5)); - background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0); - background-repeat: repeat-x; -} -.progress-bar { - background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%); - background-image: -o-linear-gradient(top, #337ab7 0%, #286090 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#286090)); - background-image: linear-gradient(to bottom, #337ab7 0%, #286090 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0); - background-repeat: repeat-x; -} -.progress-bar-success { - background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%); - background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44)); - background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0); - background-repeat: repeat-x; -} -.progress-bar-info { - background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%); - background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#31b0d5)); - background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0); - background-repeat: repeat-x; -} -.progress-bar-warning { - background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%); - background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f)); - background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0); - background-repeat: repeat-x; -} -.progress-bar-danger { - background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%); - background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c)); - background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0); - background-repeat: repeat-x; -} -.progress-bar-striped { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} -.list-group { - border-radius: 4px; - -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075); - box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075); -} -.list-group-item.active, -.list-group-item.active:hover, -.list-group-item.active:focus { - text-shadow: 0 -1px 0 #286090; - background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%); - background-image: -o-linear-gradient(top, #337ab7 0%, #2b669a 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2b669a)); - background-image: linear-gradient(to bottom, #337ab7 0%, #2b669a 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0); - background-repeat: repeat-x; - border-color: #2b669a; -} -.list-group-item.active .badge, -.list-group-item.active:hover .badge, -.list-group-item.active:focus .badge { - text-shadow: none; -} -.panel { - -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); - box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); -} -.panel-default > .panel-heading { - background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); - background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8)); - background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); - background-repeat: repeat-x; -} -.panel-primary > .panel-heading { - background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%); - background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4)); - background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0); - background-repeat: repeat-x; -} -.panel-success > .panel-heading { - background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%); - background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6)); - background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0); - background-repeat: repeat-x; -} -.panel-info > .panel-heading { - background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%); - background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3)); - background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0); - background-repeat: repeat-x; -} -.panel-warning > .panel-heading { - background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%); - background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc)); - background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0); - background-repeat: repeat-x; -} -.panel-danger > .panel-heading { - background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%); - background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc)); - background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0); - background-repeat: repeat-x; -} -.well { - background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%); - background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%); - background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#f5f5f5)); - background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0); - background-repeat: repeat-x; - border-color: #dcdcdc; - -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1); - box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1); -} -/*# sourceMappingURL=bootstrap-theme.css.map */ \ No newline at end of file diff --git a/node_modules/bootstrap/dist/css/bootstrap-theme.css.map b/node_modules/bootstrap/dist/css/bootstrap-theme.css.map deleted file mode 100644 index 949d097..0000000 --- a/node_modules/bootstrap/dist/css/bootstrap-theme.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["bootstrap-theme.css","less/theme.less","less/mixins/vendor-prefixes.less","less/mixins/gradients.less","less/mixins/reset-filter.less"],"names":[],"mappings":"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","file":"bootstrap-theme.css","sourcesContent":["/*!\n * Bootstrap v3.4.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2);\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.btn-default:active,\n.btn-primary:active,\n.btn-success:active,\n.btn-info:active,\n.btn-warning:active,\n.btn-danger:active,\n.btn-default.active,\n.btn-primary.active,\n.btn-success.active,\n.btn-info.active,\n.btn-warning.active,\n.btn-danger.active {\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn-default.disabled,\n.btn-primary.disabled,\n.btn-success.disabled,\n.btn-info.disabled,\n.btn-warning.disabled,\n.btn-danger.disabled,\n.btn-default[disabled],\n.btn-primary[disabled],\n.btn-success[disabled],\n.btn-info[disabled],\n.btn-warning[disabled],\n.btn-danger[disabled],\nfieldset[disabled] .btn-default,\nfieldset[disabled] .btn-primary,\nfieldset[disabled] .btn-success,\nfieldset[disabled] .btn-info,\nfieldset[disabled] .btn-warning,\nfieldset[disabled] .btn-danger {\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.btn-default .badge,\n.btn-primary .badge,\n.btn-success .badge,\n.btn-info .badge,\n.btn-warning .badge,\n.btn-danger .badge {\n text-shadow: none;\n}\n.btn:active,\n.btn.active {\n background-image: none;\n}\n.btn-default {\n background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%);\n background-image: -o-linear-gradient(top, #fff 0%, #e0e0e0 100%);\n background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #dbdbdb;\n text-shadow: 0 1px 0 #fff;\n border-color: #ccc;\n}\n.btn-default:hover,\n.btn-default:focus {\n background-color: #e0e0e0;\n background-position: 0 -15px;\n}\n.btn-default:active,\n.btn-default.active {\n background-color: #e0e0e0;\n border-color: #dbdbdb;\n}\n.btn-default.disabled,\n.btn-default[disabled],\nfieldset[disabled] .btn-default,\n.btn-default.disabled:hover,\n.btn-default[disabled]:hover,\nfieldset[disabled] .btn-default:hover,\n.btn-default.disabled:focus,\n.btn-default[disabled]:focus,\nfieldset[disabled] .btn-default:focus,\n.btn-default.disabled.focus,\n.btn-default[disabled].focus,\nfieldset[disabled] .btn-default.focus,\n.btn-default.disabled:active,\n.btn-default[disabled]:active,\nfieldset[disabled] .btn-default:active,\n.btn-default.disabled.active,\n.btn-default[disabled].active,\nfieldset[disabled] .btn-default.active {\n background-color: #e0e0e0;\n background-image: none;\n}\n.btn-primary {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #265a88 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #265a88 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #245580;\n}\n.btn-primary:hover,\n.btn-primary:focus {\n background-color: #265a88;\n background-position: 0 -15px;\n}\n.btn-primary:active,\n.btn-primary.active {\n background-color: #265a88;\n border-color: #245580;\n}\n.btn-primary.disabled,\n.btn-primary[disabled],\nfieldset[disabled] .btn-primary,\n.btn-primary.disabled:hover,\n.btn-primary[disabled]:hover,\nfieldset[disabled] .btn-primary:hover,\n.btn-primary.disabled:focus,\n.btn-primary[disabled]:focus,\nfieldset[disabled] .btn-primary:focus,\n.btn-primary.disabled.focus,\n.btn-primary[disabled].focus,\nfieldset[disabled] .btn-primary.focus,\n.btn-primary.disabled:active,\n.btn-primary[disabled]:active,\nfieldset[disabled] .btn-primary:active,\n.btn-primary.disabled.active,\n.btn-primary[disabled].active,\nfieldset[disabled] .btn-primary.active {\n background-color: #265a88;\n background-image: none;\n}\n.btn-success {\n background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);\n background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%);\n background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #3e8f3e;\n}\n.btn-success:hover,\n.btn-success:focus {\n background-color: #419641;\n background-position: 0 -15px;\n}\n.btn-success:active,\n.btn-success.active {\n background-color: #419641;\n border-color: #3e8f3e;\n}\n.btn-success.disabled,\n.btn-success[disabled],\nfieldset[disabled] .btn-success,\n.btn-success.disabled:hover,\n.btn-success[disabled]:hover,\nfieldset[disabled] .btn-success:hover,\n.btn-success.disabled:focus,\n.btn-success[disabled]:focus,\nfieldset[disabled] .btn-success:focus,\n.btn-success.disabled.focus,\n.btn-success[disabled].focus,\nfieldset[disabled] .btn-success.focus,\n.btn-success.disabled:active,\n.btn-success[disabled]:active,\nfieldset[disabled] .btn-success:active,\n.btn-success.disabled.active,\n.btn-success[disabled].active,\nfieldset[disabled] .btn-success.active {\n background-color: #419641;\n background-image: none;\n}\n.btn-info {\n background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #28a4c9;\n}\n.btn-info:hover,\n.btn-info:focus {\n background-color: #2aabd2;\n background-position: 0 -15px;\n}\n.btn-info:active,\n.btn-info.active {\n background-color: #2aabd2;\n border-color: #28a4c9;\n}\n.btn-info.disabled,\n.btn-info[disabled],\nfieldset[disabled] .btn-info,\n.btn-info.disabled:hover,\n.btn-info[disabled]:hover,\nfieldset[disabled] .btn-info:hover,\n.btn-info.disabled:focus,\n.btn-info[disabled]:focus,\nfieldset[disabled] .btn-info:focus,\n.btn-info.disabled.focus,\n.btn-info[disabled].focus,\nfieldset[disabled] .btn-info.focus,\n.btn-info.disabled:active,\n.btn-info[disabled]:active,\nfieldset[disabled] .btn-info:active,\n.btn-info.disabled.active,\n.btn-info[disabled].active,\nfieldset[disabled] .btn-info.active {\n background-color: #2aabd2;\n background-image: none;\n}\n.btn-warning {\n background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #e38d13;\n}\n.btn-warning:hover,\n.btn-warning:focus {\n background-color: #eb9316;\n background-position: 0 -15px;\n}\n.btn-warning:active,\n.btn-warning.active {\n background-color: #eb9316;\n border-color: #e38d13;\n}\n.btn-warning.disabled,\n.btn-warning[disabled],\nfieldset[disabled] .btn-warning,\n.btn-warning.disabled:hover,\n.btn-warning[disabled]:hover,\nfieldset[disabled] .btn-warning:hover,\n.btn-warning.disabled:focus,\n.btn-warning[disabled]:focus,\nfieldset[disabled] .btn-warning:focus,\n.btn-warning.disabled.focus,\n.btn-warning[disabled].focus,\nfieldset[disabled] .btn-warning.focus,\n.btn-warning.disabled:active,\n.btn-warning[disabled]:active,\nfieldset[disabled] .btn-warning:active,\n.btn-warning.disabled.active,\n.btn-warning[disabled].active,\nfieldset[disabled] .btn-warning.active {\n background-color: #eb9316;\n background-image: none;\n}\n.btn-danger {\n background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #b92c28;\n}\n.btn-danger:hover,\n.btn-danger:focus {\n background-color: #c12e2a;\n background-position: 0 -15px;\n}\n.btn-danger:active,\n.btn-danger.active {\n background-color: #c12e2a;\n border-color: #b92c28;\n}\n.btn-danger.disabled,\n.btn-danger[disabled],\nfieldset[disabled] .btn-danger,\n.btn-danger.disabled:hover,\n.btn-danger[disabled]:hover,\nfieldset[disabled] .btn-danger:hover,\n.btn-danger.disabled:focus,\n.btn-danger[disabled]:focus,\nfieldset[disabled] .btn-danger:focus,\n.btn-danger.disabled.focus,\n.btn-danger[disabled].focus,\nfieldset[disabled] .btn-danger.focus,\n.btn-danger.disabled:active,\n.btn-danger[disabled]:active,\nfieldset[disabled] .btn-danger:active,\n.btn-danger.disabled.active,\n.btn-danger[disabled].active,\nfieldset[disabled] .btn-danger.active {\n background-color: #c12e2a;\n background-image: none;\n}\n.thumbnail,\n.img-thumbnail {\n -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n background-repeat: repeat-x;\n background-color: #e8e8e8;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n background-repeat: repeat-x;\n background-color: #2e6da4;\n}\n.navbar-default {\n background-image: -webkit-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);\n background-image: -o-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);\n background-image: linear-gradient(to bottom, #ffffff 0%, #f8f8f8 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .active > a {\n background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n background-image: -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);\n background-repeat: repeat-x;\n -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);\n}\n.navbar-brand,\n.navbar-nav > li > a {\n text-shadow: 0 1px 0 rgba(255, 255, 255, 0.25);\n}\n.navbar-inverse {\n background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%);\n background-image: -o-linear-gradient(top, #3c3c3c 0%, #222 100%);\n background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n border-radius: 4px;\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .active > a {\n background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n background-image: -o-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);\n background-repeat: repeat-x;\n -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);\n box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);\n}\n.navbar-inverse .navbar-brand,\n.navbar-inverse .navbar-nav > li > a {\n text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);\n}\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n border-radius: 0;\n}\n@media (max-width: 767px) {\n .navbar .navbar-nav .open .dropdown-menu > .active > a,\n .navbar .navbar-nav .open .dropdown-menu > .active > a:hover,\n .navbar .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #fff;\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n background-repeat: repeat-x;\n }\n}\n.alert {\n text-shadow: 0 1px 0 rgba(255, 255, 255, 0.2);\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);\n}\n.alert-success {\n background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);\n background-repeat: repeat-x;\n border-color: #b2dba1;\n}\n.alert-info {\n background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);\n background-repeat: repeat-x;\n border-color: #9acfea;\n}\n.alert-warning {\n background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);\n background-repeat: repeat-x;\n border-color: #f5e79e;\n}\n.alert-danger {\n background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);\n background-repeat: repeat-x;\n border-color: #dca7a7;\n}\n.progress {\n background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);\n background-repeat: repeat-x;\n}\n.progress-bar {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #286090 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #286090 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);\n background-repeat: repeat-x;\n}\n.progress-bar-success {\n background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);\n background-repeat: repeat-x;\n}\n.progress-bar-info {\n background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);\n background-repeat: repeat-x;\n}\n.progress-bar-warning {\n background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);\n background-repeat: repeat-x;\n}\n.progress-bar-danger {\n background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);\n background-repeat: repeat-x;\n}\n.progress-bar-striped {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.list-group {\n border-radius: 4px;\n -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n text-shadow: 0 -1px 0 #286090;\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2b669a 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2b669a 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);\n background-repeat: repeat-x;\n border-color: #2b669a;\n}\n.list-group-item.active .badge,\n.list-group-item.active:hover .badge,\n.list-group-item.active:focus .badge {\n text-shadow: none;\n}\n.panel {\n -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n}\n.panel-default > .panel-heading {\n background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n background-repeat: repeat-x;\n}\n.panel-primary > .panel-heading {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n background-repeat: repeat-x;\n}\n.panel-success > .panel-heading {\n background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);\n background-repeat: repeat-x;\n}\n.panel-info > .panel-heading {\n background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);\n background-repeat: repeat-x;\n}\n.panel-warning > .panel-heading {\n background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);\n background-repeat: repeat-x;\n}\n.panel-danger > .panel-heading {\n background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);\n background-repeat: repeat-x;\n}\n.well {\n background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);\n background-repeat: repeat-x;\n border-color: #dcdcdc;\n -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);\n box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);\n}\n/*# sourceMappingURL=bootstrap-theme.css.map */","// stylelint-disable selector-no-qualifying-type, selector-max-compound-selectors\n\n/*!\n * Bootstrap v3.4.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n\n//\n// Load core variables and mixins\n// --------------------------------------------------\n\n@import \"variables.less\";\n@import \"mixins.less\";\n\n\n//\n// Buttons\n// --------------------------------------------------\n\n// Common styles\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n text-shadow: 0 -1px 0 rgba(0, 0, 0, .2);\n @shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);\n .box-shadow(@shadow);\n\n // Reset the shadow\n &:active,\n &.active {\n .box-shadow(inset 0 3px 5px rgba(0, 0, 0, .125));\n }\n\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n .box-shadow(none);\n }\n\n .badge {\n text-shadow: none;\n }\n}\n\n// Mixin for generating new styles\n.btn-styles(@btn-color: #555) {\n #gradient > .vertical(@start-color: @btn-color; @end-color: darken(@btn-color, 12%));\n .reset-filter(); // Disable gradients for IE9 because filter bleeds through rounded corners; see https://github.com/twbs/bootstrap/issues/10620\n background-repeat: repeat-x;\n border-color: darken(@btn-color, 14%);\n\n &:hover,\n &:focus {\n background-color: darken(@btn-color, 12%);\n background-position: 0 -15px;\n }\n\n &:active,\n &.active {\n background-color: darken(@btn-color, 12%);\n border-color: darken(@btn-color, 14%);\n }\n\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n &,\n &:hover,\n &:focus,\n &.focus,\n &:active,\n &.active {\n background-color: darken(@btn-color, 12%);\n background-image: none;\n }\n }\n}\n\n// Common styles\n.btn {\n // Remove the gradient for the pressed/active state\n &:active,\n &.active {\n background-image: none;\n }\n}\n\n// Apply the mixin to the buttons\n.btn-default {\n .btn-styles(@btn-default-bg);\n text-shadow: 0 1px 0 #fff;\n border-color: #ccc;\n}\n.btn-primary { .btn-styles(@btn-primary-bg); }\n.btn-success { .btn-styles(@btn-success-bg); }\n.btn-info { .btn-styles(@btn-info-bg); }\n.btn-warning { .btn-styles(@btn-warning-bg); }\n.btn-danger { .btn-styles(@btn-danger-bg); }\n\n\n//\n// Images\n// --------------------------------------------------\n\n.thumbnail,\n.img-thumbnail {\n .box-shadow(0 1px 2px rgba(0, 0, 0, .075));\n}\n\n\n//\n// Dropdowns\n// --------------------------------------------------\n\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-hover-bg; @end-color: darken(@dropdown-link-hover-bg, 5%));\n background-color: darken(@dropdown-link-hover-bg, 5%);\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n background-color: darken(@dropdown-link-active-bg, 5%);\n}\n\n\n//\n// Navbar\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n #gradient > .vertical(@start-color: lighten(@navbar-default-bg, 10%); @end-color: @navbar-default-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered\n border-radius: @navbar-border-radius;\n @shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);\n .box-shadow(@shadow);\n\n .navbar-nav > .open > a,\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: darken(@navbar-default-link-active-bg, 5%); @end-color: darken(@navbar-default-link-active-bg, 2%));\n .box-shadow(inset 0 3px 9px rgba(0, 0, 0, .075));\n }\n}\n.navbar-brand,\n.navbar-nav > li > a {\n text-shadow: 0 1px 0 rgba(255, 255, 255, .25);\n}\n\n// Inverted navbar\n.navbar-inverse {\n #gradient > .vertical(@start-color: lighten(@navbar-inverse-bg, 10%); @end-color: @navbar-inverse-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered; see https://github.com/twbs/bootstrap/issues/10257\n border-radius: @navbar-border-radius;\n .navbar-nav > .open > a,\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: @navbar-inverse-link-active-bg; @end-color: lighten(@navbar-inverse-link-active-bg, 2.5%));\n .box-shadow(inset 0 3px 9px rgba(0, 0, 0, .25));\n }\n\n .navbar-brand,\n .navbar-nav > li > a {\n text-shadow: 0 -1px 0 rgba(0, 0, 0, .25);\n }\n}\n\n// Undo rounded corners in static and fixed navbars\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n border-radius: 0;\n}\n\n// Fix active state of dropdown items in collapsed mode\n@media (max-width: @grid-float-breakpoint-max) {\n .navbar .navbar-nav .open .dropdown-menu > .active > a {\n &,\n &:hover,\n &:focus {\n color: #fff;\n #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n }\n }\n}\n\n\n//\n// Alerts\n// --------------------------------------------------\n\n// Common styles\n.alert {\n text-shadow: 0 1px 0 rgba(255, 255, 255, .2);\n @shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);\n .box-shadow(@shadow);\n}\n\n// Mixin for generating new styles\n.alert-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 7.5%));\n border-color: darken(@color, 15%);\n}\n\n// Apply the mixin to the alerts\n.alert-success { .alert-styles(@alert-success-bg); }\n.alert-info { .alert-styles(@alert-info-bg); }\n.alert-warning { .alert-styles(@alert-warning-bg); }\n.alert-danger { .alert-styles(@alert-danger-bg); }\n\n\n//\n// Progress bars\n// --------------------------------------------------\n\n// Give the progress background some depth\n.progress {\n #gradient > .vertical(@start-color: darken(@progress-bg, 4%); @end-color: @progress-bg)\n}\n\n// Mixin for generating new styles\n.progress-bar-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 10%));\n}\n\n// Apply the mixin to the progress bars\n.progress-bar { .progress-bar-styles(@progress-bar-bg); }\n.progress-bar-success { .progress-bar-styles(@progress-bar-success-bg); }\n.progress-bar-info { .progress-bar-styles(@progress-bar-info-bg); }\n.progress-bar-warning { .progress-bar-styles(@progress-bar-warning-bg); }\n.progress-bar-danger { .progress-bar-styles(@progress-bar-danger-bg); }\n\n// Reset the striped class because our mixins don't do multiple gradients and\n// the above custom styles override the new `.progress-bar-striped` in v3.2.0.\n.progress-bar-striped {\n #gradient > .striped();\n}\n\n\n//\n// List groups\n// --------------------------------------------------\n\n.list-group {\n border-radius: @border-radius-base;\n .box-shadow(0 1px 2px rgba(0, 0, 0, .075));\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n text-shadow: 0 -1px 0 darken(@list-group-active-bg, 10%);\n #gradient > .vertical(@start-color: @list-group-active-bg; @end-color: darken(@list-group-active-bg, 7.5%));\n border-color: darken(@list-group-active-border, 7.5%);\n\n .badge {\n text-shadow: none;\n }\n}\n\n\n//\n// Panels\n// --------------------------------------------------\n\n// Common styles\n.panel {\n .box-shadow(0 1px 2px rgba(0, 0, 0, .05));\n}\n\n// Mixin for generating new styles\n.panel-heading-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 5%));\n}\n\n// Apply the mixin to the panel headings only\n.panel-default > .panel-heading { .panel-heading-styles(@panel-default-heading-bg); }\n.panel-primary > .panel-heading { .panel-heading-styles(@panel-primary-heading-bg); }\n.panel-success > .panel-heading { .panel-heading-styles(@panel-success-heading-bg); }\n.panel-info > .panel-heading { .panel-heading-styles(@panel-info-heading-bg); }\n.panel-warning > .panel-heading { .panel-heading-styles(@panel-warning-heading-bg); }\n.panel-danger > .panel-heading { .panel-heading-styles(@panel-danger-heading-bg); }\n\n\n//\n// Wells\n// --------------------------------------------------\n\n.well {\n #gradient > .vertical(@start-color: darken(@well-bg, 5%); @end-color: @well-bg);\n border-color: darken(@well-bg, 10%);\n @shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);\n .box-shadow(@shadow);\n}\n","// stylelint-disable indentation, property-no-vendor-prefix, selector-no-vendor-prefix\n\n// Vendor Prefixes\n//\n// All vendor mixins are deprecated as of v3.2.0 due to the introduction of\n// Autoprefixer in our Gruntfile. They have been removed in v4.\n\n// - Animations\n// - Backface visibility\n// - Box shadow\n// - Box sizing\n// - Content columns\n// - Hyphens\n// - Placeholder text\n// - Transformations\n// - Transitions\n// - User Select\n\n\n// Animations\n.animation(@animation) {\n -webkit-animation: @animation;\n -o-animation: @animation;\n animation: @animation;\n}\n.animation-name(@name) {\n -webkit-animation-name: @name;\n animation-name: @name;\n}\n.animation-duration(@duration) {\n -webkit-animation-duration: @duration;\n animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n -webkit-animation-timing-function: @timing-function;\n animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n -webkit-animation-delay: @delay;\n animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n -webkit-animation-iteration-count: @iteration-count;\n animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n -webkit-animation-direction: @direction;\n animation-direction: @direction;\n}\n.animation-fill-mode(@fill-mode) {\n -webkit-animation-fill-mode: @fill-mode;\n animation-fill-mode: @fill-mode;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n\n.backface-visibility(@visibility) {\n -webkit-backface-visibility: @visibility;\n -moz-backface-visibility: @visibility;\n backface-visibility: @visibility;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support it.\n\n.box-shadow(@shadow) {\n -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n box-shadow: @shadow;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n -webkit-box-sizing: @boxmodel;\n -moz-box-sizing: @boxmodel;\n box-sizing: @boxmodel;\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n -webkit-column-count: @column-count;\n -moz-column-count: @column-count;\n column-count: @column-count;\n -webkit-column-gap: @column-gap;\n -moz-column-gap: @column-gap;\n column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n -webkit-hyphens: @mode;\n -moz-hyphens: @mode;\n -ms-hyphens: @mode; // IE10+\n -o-hyphens: @mode;\n hyphens: @mode;\n word-wrap: break-word;\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n // Firefox\n &::-moz-placeholder {\n color: @color;\n opacity: 1; // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526\n }\n &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+\n &::-webkit-input-placeholder { color: @color; } // Safari and Chrome\n}\n\n// Transformations\n.scale(@ratio) {\n -webkit-transform: scale(@ratio);\n -ms-transform: scale(@ratio); // IE9 only\n -o-transform: scale(@ratio);\n transform: scale(@ratio);\n}\n.scale(@ratioX; @ratioY) {\n -webkit-transform: scale(@ratioX, @ratioY);\n -ms-transform: scale(@ratioX, @ratioY); // IE9 only\n -o-transform: scale(@ratioX, @ratioY);\n transform: scale(@ratioX, @ratioY);\n}\n.scaleX(@ratio) {\n -webkit-transform: scaleX(@ratio);\n -ms-transform: scaleX(@ratio); // IE9 only\n -o-transform: scaleX(@ratio);\n transform: scaleX(@ratio);\n}\n.scaleY(@ratio) {\n -webkit-transform: scaleY(@ratio);\n -ms-transform: scaleY(@ratio); // IE9 only\n -o-transform: scaleY(@ratio);\n transform: scaleY(@ratio);\n}\n.skew(@x; @y) {\n -webkit-transform: skewX(@x) skewY(@y);\n -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n -o-transform: skewX(@x) skewY(@y);\n transform: skewX(@x) skewY(@y);\n}\n.translate(@x; @y) {\n -webkit-transform: translate(@x, @y);\n -ms-transform: translate(@x, @y); // IE9 only\n -o-transform: translate(@x, @y);\n transform: translate(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n -webkit-transform: translate3d(@x, @y, @z);\n transform: translate3d(@x, @y, @z);\n}\n.rotate(@degrees) {\n -webkit-transform: rotate(@degrees);\n -ms-transform: rotate(@degrees); // IE9 only\n -o-transform: rotate(@degrees);\n transform: rotate(@degrees);\n}\n.rotateX(@degrees) {\n -webkit-transform: rotateX(@degrees);\n -ms-transform: rotateX(@degrees); // IE9 only\n -o-transform: rotateX(@degrees);\n transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n -webkit-transform: rotateY(@degrees);\n -ms-transform: rotateY(@degrees); // IE9 only\n -o-transform: rotateY(@degrees);\n transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n -webkit-perspective: @perspective;\n -moz-perspective: @perspective;\n perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n -webkit-perspective-origin: @perspective;\n -moz-perspective-origin: @perspective;\n perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n -webkit-transform-origin: @origin;\n -moz-transform-origin: @origin;\n -ms-transform-origin: @origin; // IE9 only\n transform-origin: @origin;\n}\n\n\n// Transitions\n\n.transition(@transition) {\n -webkit-transition: @transition;\n -o-transition: @transition;\n transition: @transition;\n}\n.transition-property(@transition-property) {\n -webkit-transition-property: @transition-property;\n transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n -webkit-transition-delay: @transition-delay;\n transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n -webkit-transition-duration: @transition-duration;\n transition-duration: @transition-duration;\n}\n.transition-timing-function(@timing-function) {\n -webkit-transition-timing-function: @timing-function;\n transition-timing-function: @timing-function;\n}\n.transition-transform(@transition) {\n -webkit-transition: -webkit-transform @transition;\n -moz-transition: -moz-transform @transition;\n -o-transition: -o-transform @transition;\n transition: transform @transition;\n}\n\n\n// User select\n// For selecting text on the page\n\n.user-select(@select) {\n -webkit-user-select: @select;\n -moz-user-select: @select;\n -ms-user-select: @select; // IE10+\n user-select: @select;\n}\n","// stylelint-disable value-no-vendor-prefix, selector-max-id\n\n#gradient {\n\n // Horizontal gradient, from left to right\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\", argb(@start-color), argb(@end-color))); // IE9 and down\n background-repeat: repeat-x;\n }\n\n // Vertical gradient, from top to bottom\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\", argb(@start-color), argb(@end-color))); // IE9 and down\n background-repeat: repeat-x;\n }\n\n .directional(@start-color: #555; @end-color: #333; @deg: 45deg) {\n background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(@deg, @start-color, @end-color); // Opera 12\n background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n }\n .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\", argb(@start-color), argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n background-repeat: no-repeat;\n }\n .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\", argb(@start-color), argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n background-repeat: no-repeat;\n }\n .radial(@inner-color: #555; @outer-color: #333) {\n background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);\n background-image: radial-gradient(circle, @inner-color, @outer-color);\n background-repeat: no-repeat;\n }\n .striped(@color: rgba(255, 255, 255, .15); @angle: 45deg) {\n background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n }\n}\n","// Reset filters for IE\n//\n// When you need to remove a gradient background, do not forget to use this to reset\n// the IE filter for IE9 and below.\n\n.reset-filter() {\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(enabled = false)\"));\n}\n"]} \ No newline at end of file diff --git a/node_modules/bootstrap/dist/css/bootstrap-theme.min.css b/node_modules/bootstrap/dist/css/bootstrap-theme.min.css deleted file mode 100644 index 2a69f48..0000000 --- a/node_modules/bootstrap/dist/css/bootstrap-theme.min.css +++ /dev/null @@ -1,6 +0,0 @@ -/*! - * Bootstrap v3.4.1 (https://getbootstrap.com/) - * Copyright 2011-2019 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - */.btn-danger,.btn-default,.btn-info,.btn-primary,.btn-success,.btn-warning{text-shadow:0 -1px 0 rgba(0,0,0,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.btn-danger.active,.btn-danger:active,.btn-default.active,.btn-default:active,.btn-info.active,.btn-info:active,.btn-primary.active,.btn-primary:active,.btn-success.active,.btn-success:active,.btn-warning.active,.btn-warning:active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-danger.disabled,.btn-danger[disabled],.btn-default.disabled,.btn-default[disabled],.btn-info.disabled,.btn-info[disabled],.btn-primary.disabled,.btn-primary[disabled],.btn-success.disabled,.btn-success[disabled],.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-danger,fieldset[disabled] .btn-default,fieldset[disabled] .btn-info,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-success,fieldset[disabled] .btn-warning{-webkit-box-shadow:none;box-shadow:none}.btn-danger .badge,.btn-default .badge,.btn-info .badge,.btn-primary .badge,.btn-success .badge,.btn-warning .badge{text-shadow:none}.btn.active,.btn:active{background-image:none}.btn-default{background-image:-webkit-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-o-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e0e0e0));background-image:linear-gradient(to bottom,#fff 0,#e0e0e0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#dbdbdb;text-shadow:0 1px 0 #fff;border-color:#ccc}.btn-default:focus,.btn-default:hover{background-color:#e0e0e0;background-position:0 -15px}.btn-default.active,.btn-default:active{background-color:#e0e0e0;border-color:#dbdbdb}.btn-default.disabled,.btn-default.disabled.active,.btn-default.disabled.focus,.btn-default.disabled:active,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled],.btn-default[disabled].active,.btn-default[disabled].focus,.btn-default[disabled]:active,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default,fieldset[disabled] .btn-default.active,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:active,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#e0e0e0;background-image:none}.btn-primary{background-image:-webkit-linear-gradient(top,#337ab7 0,#265a88 100%);background-image:-o-linear-gradient(top,#337ab7 0,#265a88 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#265a88));background-image:linear-gradient(to bottom,#337ab7 0,#265a88 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#245580}.btn-primary:focus,.btn-primary:hover{background-color:#265a88;background-position:0 -15px}.btn-primary.active,.btn-primary:active{background-color:#265a88;border-color:#245580}.btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled.focus,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled].focus,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#265a88;background-image:none}.btn-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#419641));background-image:linear-gradient(to bottom,#5cb85c 0,#419641 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#3e8f3e}.btn-success:focus,.btn-success:hover{background-color:#419641;background-position:0 -15px}.btn-success.active,.btn-success:active{background-color:#419641;border-color:#3e8f3e}.btn-success.disabled,.btn-success.disabled.active,.btn-success.disabled.focus,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled],.btn-success[disabled].active,.btn-success[disabled].focus,.btn-success[disabled]:active,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success.active,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#419641;background-image:none}.btn-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#2aabd2));background-image:linear-gradient(to bottom,#5bc0de 0,#2aabd2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#28a4c9}.btn-info:focus,.btn-info:hover{background-color:#2aabd2;background-position:0 -15px}.btn-info.active,.btn-info:active{background-color:#2aabd2;border-color:#28a4c9}.btn-info.disabled,.btn-info.disabled.active,.btn-info.disabled.focus,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled],.btn-info[disabled].active,.btn-info[disabled].focus,.btn-info[disabled]:active,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info.active,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#2aabd2;background-image:none}.btn-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#eb9316));background-image:linear-gradient(to bottom,#f0ad4e 0,#eb9316 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#e38d13}.btn-warning:focus,.btn-warning:hover{background-color:#eb9316;background-position:0 -15px}.btn-warning.active,.btn-warning:active{background-color:#eb9316;border-color:#e38d13}.btn-warning.disabled,.btn-warning.disabled.active,.btn-warning.disabled.focus,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled],.btn-warning[disabled].active,.btn-warning[disabled].focus,.btn-warning[disabled]:active,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning.active,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#eb9316;background-image:none}.btn-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c12e2a));background-image:linear-gradient(to bottom,#d9534f 0,#c12e2a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#b92c28}.btn-danger:focus,.btn-danger:hover{background-color:#c12e2a;background-position:0 -15px}.btn-danger.active,.btn-danger:active{background-color:#c12e2a;border-color:#b92c28}.btn-danger.disabled,.btn-danger.disabled.active,.btn-danger.disabled.focus,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled].focus,.btn-danger[disabled]:active,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger.active,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#c12e2a;background-image:none}.img-thumbnail,.thumbnail{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x;background-color:#e8e8e8}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x;background-color:#2e6da4}.navbar-default{background-image:-webkit-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-o-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#f8f8f8));background-image:linear-gradient(to bottom,#fff 0,#f8f8f8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075)}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.open>a{background-image:-webkit-linear-gradient(top,#dbdbdb 0,#e2e2e2 100%);background-image:-o-linear-gradient(top,#dbdbdb 0,#e2e2e2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dbdbdb),to(#e2e2e2));background-image:linear-gradient(to bottom,#dbdbdb 0,#e2e2e2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.075);box-shadow:inset 0 3px 9px rgba(0,0,0,.075)}.navbar-brand,.navbar-nav>li>a{text-shadow:0 1px 0 rgba(255,255,255,.25)}.navbar-inverse{background-image:-webkit-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-o-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#3c3c3c),to(#222));background-image:linear-gradient(to bottom,#3c3c3c 0,#222 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);border-radius:4px}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.open>a{background-image:-webkit-linear-gradient(top,#080808 0,#0f0f0f 100%);background-image:-o-linear-gradient(top,#080808 0,#0f0f0f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#080808),to(#0f0f0f));background-image:linear-gradient(to bottom,#080808 0,#0f0f0f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.25);box-shadow:inset 0 3px 9px rgba(0,0,0,.25)}.navbar-inverse .navbar-brand,.navbar-inverse .navbar-nav>li>a{text-shadow:0 -1px 0 rgba(0,0,0,.25)}.navbar-fixed-bottom,.navbar-fixed-top,.navbar-static-top{border-radius:0}@media (max-width:767px){.navbar .navbar-nav .open .dropdown-menu>.active>a,.navbar .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}}.alert{text-shadow:0 1px 0 rgba(255,255,255,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05)}.alert-success{background-image:-webkit-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#c8e5bc));background-image:linear-gradient(to bottom,#dff0d8 0,#c8e5bc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);background-repeat:repeat-x;border-color:#b2dba1}.alert-info{background-image:-webkit-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#b9def0));background-image:linear-gradient(to bottom,#d9edf7 0,#b9def0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);background-repeat:repeat-x;border-color:#9acfea}.alert-warning{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#f8efc0));background-image:linear-gradient(to bottom,#fcf8e3 0,#f8efc0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);background-repeat:repeat-x;border-color:#f5e79e}.alert-danger{background-image:-webkit-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-o-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#e7c3c3));background-image:linear-gradient(to bottom,#f2dede 0,#e7c3c3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);background-repeat:repeat-x;border-color:#dca7a7}.progress{background-image:-webkit-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#f5f5f5));background-image:linear-gradient(to bottom,#ebebeb 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x}.progress-bar{background-image:-webkit-linear-gradient(top,#337ab7 0,#286090 100%);background-image:-o-linear-gradient(top,#337ab7 0,#286090 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#286090));background-image:linear-gradient(to bottom,#337ab7 0,#286090 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);background-repeat:repeat-x}.progress-bar-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#449d44));background-image:linear-gradient(to bottom,#5cb85c 0,#449d44 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);background-repeat:repeat-x}.progress-bar-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#31b0d5));background-image:linear-gradient(to bottom,#5bc0de 0,#31b0d5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);background-repeat:repeat-x}.progress-bar-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#ec971f));background-image:linear-gradient(to bottom,#f0ad4e 0,#ec971f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);background-repeat:repeat-x}.progress-bar-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c9302c));background-image:linear-gradient(to bottom,#d9534f 0,#c9302c 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);background-repeat:repeat-x}.progress-bar-striped{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.list-group{border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{text-shadow:0 -1px 0 #286090;background-image:-webkit-linear-gradient(top,#337ab7 0,#2b669a 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2b669a 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2b669a));background-image:linear-gradient(to bottom,#337ab7 0,#2b669a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);background-repeat:repeat-x;border-color:#2b669a}.list-group-item.active .badge,.list-group-item.active:focus .badge,.list-group-item.active:hover .badge{text-shadow:none}.panel{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.05);box-shadow:0 1px 2px rgba(0,0,0,.05)}.panel-default>.panel-heading{background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.panel-primary>.panel-heading{background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}.panel-success>.panel-heading{background-image:-webkit-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#d0e9c6));background-image:linear-gradient(to bottom,#dff0d8 0,#d0e9c6 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);background-repeat:repeat-x}.panel-info>.panel-heading{background-image:-webkit-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#c4e3f3));background-image:linear-gradient(to bottom,#d9edf7 0,#c4e3f3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);background-repeat:repeat-x}.panel-warning>.panel-heading{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#faf2cc));background-image:linear-gradient(to bottom,#fcf8e3 0,#faf2cc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);background-repeat:repeat-x}.panel-danger>.panel-heading{background-image:-webkit-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-o-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#ebcccc));background-image:linear-gradient(to bottom,#f2dede 0,#ebcccc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);background-repeat:repeat-x}.well{background-image:-webkit-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#e8e8e8),to(#f5f5f5));background-image:linear-gradient(to bottom,#e8e8e8 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x;border-color:#dcdcdc;-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1)} -/*# sourceMappingURL=bootstrap-theme.min.css.map */ \ No newline at end of file diff --git a/node_modules/bootstrap/dist/css/bootstrap-theme.min.css.map b/node_modules/bootstrap/dist/css/bootstrap-theme.min.css.map deleted file mode 100644 index 5d75106..0000000 --- a/node_modules/bootstrap/dist/css/bootstrap-theme.min.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["bootstrap-theme.css","dist/css/bootstrap-theme.css","less/theme.less","less/mixins/vendor-prefixes.less","less/mixins/gradients.less","less/mixins/reset-filter.less"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Bootstrap v3.4.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2);\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.btn-default:active,\n.btn-primary:active,\n.btn-success:active,\n.btn-info:active,\n.btn-warning:active,\n.btn-danger:active,\n.btn-default.active,\n.btn-primary.active,\n.btn-success.active,\n.btn-info.active,\n.btn-warning.active,\n.btn-danger.active {\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn-default.disabled,\n.btn-primary.disabled,\n.btn-success.disabled,\n.btn-info.disabled,\n.btn-warning.disabled,\n.btn-danger.disabled,\n.btn-default[disabled],\n.btn-primary[disabled],\n.btn-success[disabled],\n.btn-info[disabled],\n.btn-warning[disabled],\n.btn-danger[disabled],\nfieldset[disabled] .btn-default,\nfieldset[disabled] .btn-primary,\nfieldset[disabled] .btn-success,\nfieldset[disabled] .btn-info,\nfieldset[disabled] .btn-warning,\nfieldset[disabled] .btn-danger {\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.btn-default .badge,\n.btn-primary .badge,\n.btn-success .badge,\n.btn-info .badge,\n.btn-warning .badge,\n.btn-danger .badge {\n text-shadow: none;\n}\n.btn:active,\n.btn.active {\n background-image: none;\n}\n.btn-default {\n background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%);\n background-image: -o-linear-gradient(top, #fff 0%, #e0e0e0 100%);\n background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #dbdbdb;\n text-shadow: 0 1px 0 #fff;\n border-color: #ccc;\n}\n.btn-default:hover,\n.btn-default:focus {\n background-color: #e0e0e0;\n background-position: 0 -15px;\n}\n.btn-default:active,\n.btn-default.active {\n background-color: #e0e0e0;\n border-color: #dbdbdb;\n}\n.btn-default.disabled,\n.btn-default[disabled],\nfieldset[disabled] .btn-default,\n.btn-default.disabled:hover,\n.btn-default[disabled]:hover,\nfieldset[disabled] .btn-default:hover,\n.btn-default.disabled:focus,\n.btn-default[disabled]:focus,\nfieldset[disabled] .btn-default:focus,\n.btn-default.disabled.focus,\n.btn-default[disabled].focus,\nfieldset[disabled] .btn-default.focus,\n.btn-default.disabled:active,\n.btn-default[disabled]:active,\nfieldset[disabled] .btn-default:active,\n.btn-default.disabled.active,\n.btn-default[disabled].active,\nfieldset[disabled] .btn-default.active {\n background-color: #e0e0e0;\n background-image: none;\n}\n.btn-primary {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #265a88 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #265a88 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #245580;\n}\n.btn-primary:hover,\n.btn-primary:focus {\n background-color: #265a88;\n background-position: 0 -15px;\n}\n.btn-primary:active,\n.btn-primary.active {\n background-color: #265a88;\n border-color: #245580;\n}\n.btn-primary.disabled,\n.btn-primary[disabled],\nfieldset[disabled] .btn-primary,\n.btn-primary.disabled:hover,\n.btn-primary[disabled]:hover,\nfieldset[disabled] .btn-primary:hover,\n.btn-primary.disabled:focus,\n.btn-primary[disabled]:focus,\nfieldset[disabled] .btn-primary:focus,\n.btn-primary.disabled.focus,\n.btn-primary[disabled].focus,\nfieldset[disabled] .btn-primary.focus,\n.btn-primary.disabled:active,\n.btn-primary[disabled]:active,\nfieldset[disabled] .btn-primary:active,\n.btn-primary.disabled.active,\n.btn-primary[disabled].active,\nfieldset[disabled] .btn-primary.active {\n background-color: #265a88;\n background-image: none;\n}\n.btn-success {\n background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);\n background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%);\n background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #3e8f3e;\n}\n.btn-success:hover,\n.btn-success:focus {\n background-color: #419641;\n background-position: 0 -15px;\n}\n.btn-success:active,\n.btn-success.active {\n background-color: #419641;\n border-color: #3e8f3e;\n}\n.btn-success.disabled,\n.btn-success[disabled],\nfieldset[disabled] .btn-success,\n.btn-success.disabled:hover,\n.btn-success[disabled]:hover,\nfieldset[disabled] .btn-success:hover,\n.btn-success.disabled:focus,\n.btn-success[disabled]:focus,\nfieldset[disabled] .btn-success:focus,\n.btn-success.disabled.focus,\n.btn-success[disabled].focus,\nfieldset[disabled] .btn-success.focus,\n.btn-success.disabled:active,\n.btn-success[disabled]:active,\nfieldset[disabled] .btn-success:active,\n.btn-success.disabled.active,\n.btn-success[disabled].active,\nfieldset[disabled] .btn-success.active {\n background-color: #419641;\n background-image: none;\n}\n.btn-info {\n background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #28a4c9;\n}\n.btn-info:hover,\n.btn-info:focus {\n background-color: #2aabd2;\n background-position: 0 -15px;\n}\n.btn-info:active,\n.btn-info.active {\n background-color: #2aabd2;\n border-color: #28a4c9;\n}\n.btn-info.disabled,\n.btn-info[disabled],\nfieldset[disabled] .btn-info,\n.btn-info.disabled:hover,\n.btn-info[disabled]:hover,\nfieldset[disabled] .btn-info:hover,\n.btn-info.disabled:focus,\n.btn-info[disabled]:focus,\nfieldset[disabled] .btn-info:focus,\n.btn-info.disabled.focus,\n.btn-info[disabled].focus,\nfieldset[disabled] .btn-info.focus,\n.btn-info.disabled:active,\n.btn-info[disabled]:active,\nfieldset[disabled] .btn-info:active,\n.btn-info.disabled.active,\n.btn-info[disabled].active,\nfieldset[disabled] .btn-info.active {\n background-color: #2aabd2;\n background-image: none;\n}\n.btn-warning {\n background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #e38d13;\n}\n.btn-warning:hover,\n.btn-warning:focus {\n background-color: #eb9316;\n background-position: 0 -15px;\n}\n.btn-warning:active,\n.btn-warning.active {\n background-color: #eb9316;\n border-color: #e38d13;\n}\n.btn-warning.disabled,\n.btn-warning[disabled],\nfieldset[disabled] .btn-warning,\n.btn-warning.disabled:hover,\n.btn-warning[disabled]:hover,\nfieldset[disabled] .btn-warning:hover,\n.btn-warning.disabled:focus,\n.btn-warning[disabled]:focus,\nfieldset[disabled] .btn-warning:focus,\n.btn-warning.disabled.focus,\n.btn-warning[disabled].focus,\nfieldset[disabled] .btn-warning.focus,\n.btn-warning.disabled:active,\n.btn-warning[disabled]:active,\nfieldset[disabled] .btn-warning:active,\n.btn-warning.disabled.active,\n.btn-warning[disabled].active,\nfieldset[disabled] .btn-warning.active {\n background-color: #eb9316;\n background-image: none;\n}\n.btn-danger {\n background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #b92c28;\n}\n.btn-danger:hover,\n.btn-danger:focus {\n background-color: #c12e2a;\n background-position: 0 -15px;\n}\n.btn-danger:active,\n.btn-danger.active {\n background-color: #c12e2a;\n border-color: #b92c28;\n}\n.btn-danger.disabled,\n.btn-danger[disabled],\nfieldset[disabled] .btn-danger,\n.btn-danger.disabled:hover,\n.btn-danger[disabled]:hover,\nfieldset[disabled] .btn-danger:hover,\n.btn-danger.disabled:focus,\n.btn-danger[disabled]:focus,\nfieldset[disabled] .btn-danger:focus,\n.btn-danger.disabled.focus,\n.btn-danger[disabled].focus,\nfieldset[disabled] .btn-danger.focus,\n.btn-danger.disabled:active,\n.btn-danger[disabled]:active,\nfieldset[disabled] .btn-danger:active,\n.btn-danger.disabled.active,\n.btn-danger[disabled].active,\nfieldset[disabled] .btn-danger.active {\n background-color: #c12e2a;\n background-image: none;\n}\n.thumbnail,\n.img-thumbnail {\n -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n background-repeat: repeat-x;\n background-color: #e8e8e8;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n background-repeat: repeat-x;\n background-color: #2e6da4;\n}\n.navbar-default {\n background-image: -webkit-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);\n background-image: -o-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);\n background-image: linear-gradient(to bottom, #ffffff 0%, #f8f8f8 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .active > a {\n background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n background-image: -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);\n background-repeat: repeat-x;\n -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);\n}\n.navbar-brand,\n.navbar-nav > li > a {\n text-shadow: 0 1px 0 rgba(255, 255, 255, 0.25);\n}\n.navbar-inverse {\n background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%);\n background-image: -o-linear-gradient(top, #3c3c3c 0%, #222 100%);\n background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n border-radius: 4px;\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .active > a {\n background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n background-image: -o-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);\n background-repeat: repeat-x;\n -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);\n box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);\n}\n.navbar-inverse .navbar-brand,\n.navbar-inverse .navbar-nav > li > a {\n text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);\n}\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n border-radius: 0;\n}\n@media (max-width: 767px) {\n .navbar .navbar-nav .open .dropdown-menu > .active > a,\n .navbar .navbar-nav .open .dropdown-menu > .active > a:hover,\n .navbar .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #fff;\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n background-repeat: repeat-x;\n }\n}\n.alert {\n text-shadow: 0 1px 0 rgba(255, 255, 255, 0.2);\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);\n}\n.alert-success {\n background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);\n background-repeat: repeat-x;\n border-color: #b2dba1;\n}\n.alert-info {\n background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);\n background-repeat: repeat-x;\n border-color: #9acfea;\n}\n.alert-warning {\n background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);\n background-repeat: repeat-x;\n border-color: #f5e79e;\n}\n.alert-danger {\n background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);\n background-repeat: repeat-x;\n border-color: #dca7a7;\n}\n.progress {\n background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);\n background-repeat: repeat-x;\n}\n.progress-bar {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #286090 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #286090 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);\n background-repeat: repeat-x;\n}\n.progress-bar-success {\n background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);\n background-repeat: repeat-x;\n}\n.progress-bar-info {\n background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);\n background-repeat: repeat-x;\n}\n.progress-bar-warning {\n background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);\n background-repeat: repeat-x;\n}\n.progress-bar-danger {\n background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);\n background-repeat: repeat-x;\n}\n.progress-bar-striped {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.list-group {\n border-radius: 4px;\n -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n text-shadow: 0 -1px 0 #286090;\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2b669a 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2b669a 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);\n background-repeat: repeat-x;\n border-color: #2b669a;\n}\n.list-group-item.active .badge,\n.list-group-item.active:hover .badge,\n.list-group-item.active:focus .badge {\n text-shadow: none;\n}\n.panel {\n -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n}\n.panel-default > .panel-heading {\n background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n background-repeat: repeat-x;\n}\n.panel-primary > .panel-heading {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n background-repeat: repeat-x;\n}\n.panel-success > .panel-heading {\n background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);\n background-repeat: repeat-x;\n}\n.panel-info > .panel-heading {\n background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);\n background-repeat: repeat-x;\n}\n.panel-warning > .panel-heading {\n background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);\n background-repeat: repeat-x;\n}\n.panel-danger > .panel-heading {\n background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);\n background-repeat: repeat-x;\n}\n.well {\n background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);\n background-repeat: repeat-x;\n border-color: #dcdcdc;\n -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);\n box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);\n}\n/*# sourceMappingURL=bootstrap-theme.css.map */","/*!\n * Bootstrap v3.4.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2);\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.btn-default:active,\n.btn-primary:active,\n.btn-success:active,\n.btn-info:active,\n.btn-warning:active,\n.btn-danger:active,\n.btn-default.active,\n.btn-primary.active,\n.btn-success.active,\n.btn-info.active,\n.btn-warning.active,\n.btn-danger.active {\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn-default.disabled,\n.btn-primary.disabled,\n.btn-success.disabled,\n.btn-info.disabled,\n.btn-warning.disabled,\n.btn-danger.disabled,\n.btn-default[disabled],\n.btn-primary[disabled],\n.btn-success[disabled],\n.btn-info[disabled],\n.btn-warning[disabled],\n.btn-danger[disabled],\nfieldset[disabled] .btn-default,\nfieldset[disabled] .btn-primary,\nfieldset[disabled] .btn-success,\nfieldset[disabled] .btn-info,\nfieldset[disabled] .btn-warning,\nfieldset[disabled] .btn-danger {\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.btn-default .badge,\n.btn-primary .badge,\n.btn-success .badge,\n.btn-info .badge,\n.btn-warning .badge,\n.btn-danger .badge {\n text-shadow: none;\n}\n.btn:active,\n.btn.active {\n background-image: none;\n}\n.btn-default {\n background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%);\n background-image: -o-linear-gradient(top, #fff 0%, #e0e0e0 100%);\n background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#e0e0e0));\n background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #dbdbdb;\n text-shadow: 0 1px 0 #fff;\n border-color: #ccc;\n}\n.btn-default:hover,\n.btn-default:focus {\n background-color: #e0e0e0;\n background-position: 0 -15px;\n}\n.btn-default:active,\n.btn-default.active {\n background-color: #e0e0e0;\n border-color: #dbdbdb;\n}\n.btn-default.disabled,\n.btn-default[disabled],\nfieldset[disabled] .btn-default,\n.btn-default.disabled:hover,\n.btn-default[disabled]:hover,\nfieldset[disabled] .btn-default:hover,\n.btn-default.disabled:focus,\n.btn-default[disabled]:focus,\nfieldset[disabled] .btn-default:focus,\n.btn-default.disabled.focus,\n.btn-default[disabled].focus,\nfieldset[disabled] .btn-default.focus,\n.btn-default.disabled:active,\n.btn-default[disabled]:active,\nfieldset[disabled] .btn-default:active,\n.btn-default.disabled.active,\n.btn-default[disabled].active,\nfieldset[disabled] .btn-default.active {\n background-color: #e0e0e0;\n background-image: none;\n}\n.btn-primary {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #265a88 100%);\n background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#265a88));\n background-image: linear-gradient(to bottom, #337ab7 0%, #265a88 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #245580;\n}\n.btn-primary:hover,\n.btn-primary:focus {\n background-color: #265a88;\n background-position: 0 -15px;\n}\n.btn-primary:active,\n.btn-primary.active {\n background-color: #265a88;\n border-color: #245580;\n}\n.btn-primary.disabled,\n.btn-primary[disabled],\nfieldset[disabled] .btn-primary,\n.btn-primary.disabled:hover,\n.btn-primary[disabled]:hover,\nfieldset[disabled] .btn-primary:hover,\n.btn-primary.disabled:focus,\n.btn-primary[disabled]:focus,\nfieldset[disabled] .btn-primary:focus,\n.btn-primary.disabled.focus,\n.btn-primary[disabled].focus,\nfieldset[disabled] .btn-primary.focus,\n.btn-primary.disabled:active,\n.btn-primary[disabled]:active,\nfieldset[disabled] .btn-primary:active,\n.btn-primary.disabled.active,\n.btn-primary[disabled].active,\nfieldset[disabled] .btn-primary.active {\n background-color: #265a88;\n background-image: none;\n}\n.btn-success {\n background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);\n background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%);\n background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641));\n background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #3e8f3e;\n}\n.btn-success:hover,\n.btn-success:focus {\n background-color: #419641;\n background-position: 0 -15px;\n}\n.btn-success:active,\n.btn-success.active {\n background-color: #419641;\n border-color: #3e8f3e;\n}\n.btn-success.disabled,\n.btn-success[disabled],\nfieldset[disabled] .btn-success,\n.btn-success.disabled:hover,\n.btn-success[disabled]:hover,\nfieldset[disabled] .btn-success:hover,\n.btn-success.disabled:focus,\n.btn-success[disabled]:focus,\nfieldset[disabled] .btn-success:focus,\n.btn-success.disabled.focus,\n.btn-success[disabled].focus,\nfieldset[disabled] .btn-success.focus,\n.btn-success.disabled:active,\n.btn-success[disabled]:active,\nfieldset[disabled] .btn-success:active,\n.btn-success.disabled.active,\n.btn-success[disabled].active,\nfieldset[disabled] .btn-success.active {\n background-color: #419641;\n background-image: none;\n}\n.btn-info {\n background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2));\n background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #28a4c9;\n}\n.btn-info:hover,\n.btn-info:focus {\n background-color: #2aabd2;\n background-position: 0 -15px;\n}\n.btn-info:active,\n.btn-info.active {\n background-color: #2aabd2;\n border-color: #28a4c9;\n}\n.btn-info.disabled,\n.btn-info[disabled],\nfieldset[disabled] .btn-info,\n.btn-info.disabled:hover,\n.btn-info[disabled]:hover,\nfieldset[disabled] .btn-info:hover,\n.btn-info.disabled:focus,\n.btn-info[disabled]:focus,\nfieldset[disabled] .btn-info:focus,\n.btn-info.disabled.focus,\n.btn-info[disabled].focus,\nfieldset[disabled] .btn-info.focus,\n.btn-info.disabled:active,\n.btn-info[disabled]:active,\nfieldset[disabled] .btn-info:active,\n.btn-info.disabled.active,\n.btn-info[disabled].active,\nfieldset[disabled] .btn-info.active {\n background-color: #2aabd2;\n background-image: none;\n}\n.btn-warning {\n background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#eb9316));\n background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #e38d13;\n}\n.btn-warning:hover,\n.btn-warning:focus {\n background-color: #eb9316;\n background-position: 0 -15px;\n}\n.btn-warning:active,\n.btn-warning.active {\n background-color: #eb9316;\n border-color: #e38d13;\n}\n.btn-warning.disabled,\n.btn-warning[disabled],\nfieldset[disabled] .btn-warning,\n.btn-warning.disabled:hover,\n.btn-warning[disabled]:hover,\nfieldset[disabled] .btn-warning:hover,\n.btn-warning.disabled:focus,\n.btn-warning[disabled]:focus,\nfieldset[disabled] .btn-warning:focus,\n.btn-warning.disabled.focus,\n.btn-warning[disabled].focus,\nfieldset[disabled] .btn-warning.focus,\n.btn-warning.disabled:active,\n.btn-warning[disabled]:active,\nfieldset[disabled] .btn-warning:active,\n.btn-warning.disabled.active,\n.btn-warning[disabled].active,\nfieldset[disabled] .btn-warning.active {\n background-color: #eb9316;\n background-image: none;\n}\n.btn-danger {\n background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c12e2a));\n background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #b92c28;\n}\n.btn-danger:hover,\n.btn-danger:focus {\n background-color: #c12e2a;\n background-position: 0 -15px;\n}\n.btn-danger:active,\n.btn-danger.active {\n background-color: #c12e2a;\n border-color: #b92c28;\n}\n.btn-danger.disabled,\n.btn-danger[disabled],\nfieldset[disabled] .btn-danger,\n.btn-danger.disabled:hover,\n.btn-danger[disabled]:hover,\nfieldset[disabled] .btn-danger:hover,\n.btn-danger.disabled:focus,\n.btn-danger[disabled]:focus,\nfieldset[disabled] .btn-danger:focus,\n.btn-danger.disabled.focus,\n.btn-danger[disabled].focus,\nfieldset[disabled] .btn-danger.focus,\n.btn-danger.disabled:active,\n.btn-danger[disabled]:active,\nfieldset[disabled] .btn-danger:active,\n.btn-danger.disabled.active,\n.btn-danger[disabled].active,\nfieldset[disabled] .btn-danger.active {\n background-color: #c12e2a;\n background-image: none;\n}\n.thumbnail,\n.img-thumbnail {\n -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));\n background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n background-repeat: repeat-x;\n background-color: #e8e8e8;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));\n background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n background-repeat: repeat-x;\n background-color: #2e6da4;\n}\n.navbar-default {\n background-image: -webkit-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);\n background-image: -o-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);\n background-image: -webkit-gradient(linear, left top, left bottom, from(#ffffff), to(#f8f8f8));\n background-image: linear-gradient(to bottom, #ffffff 0%, #f8f8f8 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .active > a {\n background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n background-image: -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n background-image: -webkit-gradient(linear, left top, left bottom, from(#dbdbdb), to(#e2e2e2));\n background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);\n background-repeat: repeat-x;\n -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);\n}\n.navbar-brand,\n.navbar-nav > li > a {\n text-shadow: 0 1px 0 rgba(255, 255, 255, 0.25);\n}\n.navbar-inverse {\n background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%);\n background-image: -o-linear-gradient(top, #3c3c3c 0%, #222 100%);\n background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222));\n background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n border-radius: 4px;\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .active > a {\n background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n background-image: -o-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n background-image: -webkit-gradient(linear, left top, left bottom, from(#080808), to(#0f0f0f));\n background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);\n background-repeat: repeat-x;\n -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);\n box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);\n}\n.navbar-inverse .navbar-brand,\n.navbar-inverse .navbar-nav > li > a {\n text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);\n}\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n border-radius: 0;\n}\n@media (max-width: 767px) {\n .navbar .navbar-nav .open .dropdown-menu > .active > a,\n .navbar .navbar-nav .open .dropdown-menu > .active > a:hover,\n .navbar .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #fff;\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));\n background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n background-repeat: repeat-x;\n }\n}\n.alert {\n text-shadow: 0 1px 0 rgba(255, 255, 255, 0.2);\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);\n}\n.alert-success {\n background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc));\n background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);\n background-repeat: repeat-x;\n border-color: #b2dba1;\n}\n.alert-info {\n background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0));\n background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);\n background-repeat: repeat-x;\n border-color: #9acfea;\n}\n.alert-warning {\n background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0));\n background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);\n background-repeat: repeat-x;\n border-color: #f5e79e;\n}\n.alert-danger {\n background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3));\n background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);\n background-repeat: repeat-x;\n border-color: #dca7a7;\n}\n.progress {\n background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5));\n background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);\n background-repeat: repeat-x;\n}\n.progress-bar {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #286090 100%);\n background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#286090));\n background-image: linear-gradient(to bottom, #337ab7 0%, #286090 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);\n background-repeat: repeat-x;\n}\n.progress-bar-success {\n background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44));\n background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);\n background-repeat: repeat-x;\n}\n.progress-bar-info {\n background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#31b0d5));\n background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);\n background-repeat: repeat-x;\n}\n.progress-bar-warning {\n background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f));\n background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);\n background-repeat: repeat-x;\n}\n.progress-bar-danger {\n background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c));\n background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);\n background-repeat: repeat-x;\n}\n.progress-bar-striped {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.list-group {\n border-radius: 4px;\n -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n text-shadow: 0 -1px 0 #286090;\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2b669a 100%);\n background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2b669a));\n background-image: linear-gradient(to bottom, #337ab7 0%, #2b669a 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);\n background-repeat: repeat-x;\n border-color: #2b669a;\n}\n.list-group-item.active .badge,\n.list-group-item.active:hover .badge,\n.list-group-item.active:focus .badge {\n text-shadow: none;\n}\n.panel {\n -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n}\n.panel-default > .panel-heading {\n background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));\n background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n background-repeat: repeat-x;\n}\n.panel-primary > .panel-heading {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));\n background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n background-repeat: repeat-x;\n}\n.panel-success > .panel-heading {\n background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6));\n background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);\n background-repeat: repeat-x;\n}\n.panel-info > .panel-heading {\n background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3));\n background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);\n background-repeat: repeat-x;\n}\n.panel-warning > .panel-heading {\n background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc));\n background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);\n background-repeat: repeat-x;\n}\n.panel-danger > .panel-heading {\n background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc));\n background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);\n background-repeat: repeat-x;\n}\n.well {\n background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#f5f5f5));\n background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);\n background-repeat: repeat-x;\n border-color: #dcdcdc;\n -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);\n box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);\n}\n/*# sourceMappingURL=bootstrap-theme.css.map */","// stylelint-disable selector-no-qualifying-type, selector-max-compound-selectors\n\n/*!\n * Bootstrap v3.4.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n\n//\n// Load core variables and mixins\n// --------------------------------------------------\n\n@import \"variables.less\";\n@import \"mixins.less\";\n\n\n//\n// Buttons\n// --------------------------------------------------\n\n// Common styles\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n text-shadow: 0 -1px 0 rgba(0, 0, 0, .2);\n @shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);\n .box-shadow(@shadow);\n\n // Reset the shadow\n &:active,\n &.active {\n .box-shadow(inset 0 3px 5px rgba(0, 0, 0, .125));\n }\n\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n .box-shadow(none);\n }\n\n .badge {\n text-shadow: none;\n }\n}\n\n// Mixin for generating new styles\n.btn-styles(@btn-color: #555) {\n #gradient > .vertical(@start-color: @btn-color; @end-color: darken(@btn-color, 12%));\n .reset-filter(); // Disable gradients for IE9 because filter bleeds through rounded corners; see https://github.com/twbs/bootstrap/issues/10620\n background-repeat: repeat-x;\n border-color: darken(@btn-color, 14%);\n\n &:hover,\n &:focus {\n background-color: darken(@btn-color, 12%);\n background-position: 0 -15px;\n }\n\n &:active,\n &.active {\n background-color: darken(@btn-color, 12%);\n border-color: darken(@btn-color, 14%);\n }\n\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n &,\n &:hover,\n &:focus,\n &.focus,\n &:active,\n &.active {\n background-color: darken(@btn-color, 12%);\n background-image: none;\n }\n }\n}\n\n// Common styles\n.btn {\n // Remove the gradient for the pressed/active state\n &:active,\n &.active {\n background-image: none;\n }\n}\n\n// Apply the mixin to the buttons\n.btn-default {\n .btn-styles(@btn-default-bg);\n text-shadow: 0 1px 0 #fff;\n border-color: #ccc;\n}\n.btn-primary { .btn-styles(@btn-primary-bg); }\n.btn-success { .btn-styles(@btn-success-bg); }\n.btn-info { .btn-styles(@btn-info-bg); }\n.btn-warning { .btn-styles(@btn-warning-bg); }\n.btn-danger { .btn-styles(@btn-danger-bg); }\n\n\n//\n// Images\n// --------------------------------------------------\n\n.thumbnail,\n.img-thumbnail {\n .box-shadow(0 1px 2px rgba(0, 0, 0, .075));\n}\n\n\n//\n// Dropdowns\n// --------------------------------------------------\n\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-hover-bg; @end-color: darken(@dropdown-link-hover-bg, 5%));\n background-color: darken(@dropdown-link-hover-bg, 5%);\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n background-color: darken(@dropdown-link-active-bg, 5%);\n}\n\n\n//\n// Navbar\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n #gradient > .vertical(@start-color: lighten(@navbar-default-bg, 10%); @end-color: @navbar-default-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered\n border-radius: @navbar-border-radius;\n @shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);\n .box-shadow(@shadow);\n\n .navbar-nav > .open > a,\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: darken(@navbar-default-link-active-bg, 5%); @end-color: darken(@navbar-default-link-active-bg, 2%));\n .box-shadow(inset 0 3px 9px rgba(0, 0, 0, .075));\n }\n}\n.navbar-brand,\n.navbar-nav > li > a {\n text-shadow: 0 1px 0 rgba(255, 255, 255, .25);\n}\n\n// Inverted navbar\n.navbar-inverse {\n #gradient > .vertical(@start-color: lighten(@navbar-inverse-bg, 10%); @end-color: @navbar-inverse-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered; see https://github.com/twbs/bootstrap/issues/10257\n border-radius: @navbar-border-radius;\n .navbar-nav > .open > a,\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: @navbar-inverse-link-active-bg; @end-color: lighten(@navbar-inverse-link-active-bg, 2.5%));\n .box-shadow(inset 0 3px 9px rgba(0, 0, 0, .25));\n }\n\n .navbar-brand,\n .navbar-nav > li > a {\n text-shadow: 0 -1px 0 rgba(0, 0, 0, .25);\n }\n}\n\n// Undo rounded corners in static and fixed navbars\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n border-radius: 0;\n}\n\n// Fix active state of dropdown items in collapsed mode\n@media (max-width: @grid-float-breakpoint-max) {\n .navbar .navbar-nav .open .dropdown-menu > .active > a {\n &,\n &:hover,\n &:focus {\n color: #fff;\n #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n }\n }\n}\n\n\n//\n// Alerts\n// --------------------------------------------------\n\n// Common styles\n.alert {\n text-shadow: 0 1px 0 rgba(255, 255, 255, .2);\n @shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);\n .box-shadow(@shadow);\n}\n\n// Mixin for generating new styles\n.alert-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 7.5%));\n border-color: darken(@color, 15%);\n}\n\n// Apply the mixin to the alerts\n.alert-success { .alert-styles(@alert-success-bg); }\n.alert-info { .alert-styles(@alert-info-bg); }\n.alert-warning { .alert-styles(@alert-warning-bg); }\n.alert-danger { .alert-styles(@alert-danger-bg); }\n\n\n//\n// Progress bars\n// --------------------------------------------------\n\n// Give the progress background some depth\n.progress {\n #gradient > .vertical(@start-color: darken(@progress-bg, 4%); @end-color: @progress-bg)\n}\n\n// Mixin for generating new styles\n.progress-bar-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 10%));\n}\n\n// Apply the mixin to the progress bars\n.progress-bar { .progress-bar-styles(@progress-bar-bg); }\n.progress-bar-success { .progress-bar-styles(@progress-bar-success-bg); }\n.progress-bar-info { .progress-bar-styles(@progress-bar-info-bg); }\n.progress-bar-warning { .progress-bar-styles(@progress-bar-warning-bg); }\n.progress-bar-danger { .progress-bar-styles(@progress-bar-danger-bg); }\n\n// Reset the striped class because our mixins don't do multiple gradients and\n// the above custom styles override the new `.progress-bar-striped` in v3.2.0.\n.progress-bar-striped {\n #gradient > .striped();\n}\n\n\n//\n// List groups\n// --------------------------------------------------\n\n.list-group {\n border-radius: @border-radius-base;\n .box-shadow(0 1px 2px rgba(0, 0, 0, .075));\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n text-shadow: 0 -1px 0 darken(@list-group-active-bg, 10%);\n #gradient > .vertical(@start-color: @list-group-active-bg; @end-color: darken(@list-group-active-bg, 7.5%));\n border-color: darken(@list-group-active-border, 7.5%);\n\n .badge {\n text-shadow: none;\n }\n}\n\n\n//\n// Panels\n// --------------------------------------------------\n\n// Common styles\n.panel {\n .box-shadow(0 1px 2px rgba(0, 0, 0, .05));\n}\n\n// Mixin for generating new styles\n.panel-heading-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 5%));\n}\n\n// Apply the mixin to the panel headings only\n.panel-default > .panel-heading { .panel-heading-styles(@panel-default-heading-bg); }\n.panel-primary > .panel-heading { .panel-heading-styles(@panel-primary-heading-bg); }\n.panel-success > .panel-heading { .panel-heading-styles(@panel-success-heading-bg); }\n.panel-info > .panel-heading { .panel-heading-styles(@panel-info-heading-bg); }\n.panel-warning > .panel-heading { .panel-heading-styles(@panel-warning-heading-bg); }\n.panel-danger > .panel-heading { .panel-heading-styles(@panel-danger-heading-bg); }\n\n\n//\n// Wells\n// --------------------------------------------------\n\n.well {\n #gradient > .vertical(@start-color: darken(@well-bg, 5%); @end-color: @well-bg);\n border-color: darken(@well-bg, 10%);\n @shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);\n .box-shadow(@shadow);\n}\n","// stylelint-disable indentation, property-no-vendor-prefix, selector-no-vendor-prefix\n\n// Vendor Prefixes\n//\n// All vendor mixins are deprecated as of v3.2.0 due to the introduction of\n// Autoprefixer in our Gruntfile. They have been removed in v4.\n\n// - Animations\n// - Backface visibility\n// - Box shadow\n// - Box sizing\n// - Content columns\n// - Hyphens\n// - Placeholder text\n// - Transformations\n// - Transitions\n// - User Select\n\n\n// Animations\n.animation(@animation) {\n -webkit-animation: @animation;\n -o-animation: @animation;\n animation: @animation;\n}\n.animation-name(@name) {\n -webkit-animation-name: @name;\n animation-name: @name;\n}\n.animation-duration(@duration) {\n -webkit-animation-duration: @duration;\n animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n -webkit-animation-timing-function: @timing-function;\n animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n -webkit-animation-delay: @delay;\n animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n -webkit-animation-iteration-count: @iteration-count;\n animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n -webkit-animation-direction: @direction;\n animation-direction: @direction;\n}\n.animation-fill-mode(@fill-mode) {\n -webkit-animation-fill-mode: @fill-mode;\n animation-fill-mode: @fill-mode;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n\n.backface-visibility(@visibility) {\n -webkit-backface-visibility: @visibility;\n -moz-backface-visibility: @visibility;\n backface-visibility: @visibility;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support it.\n\n.box-shadow(@shadow) {\n -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n box-shadow: @shadow;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n -webkit-box-sizing: @boxmodel;\n -moz-box-sizing: @boxmodel;\n box-sizing: @boxmodel;\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n -webkit-column-count: @column-count;\n -moz-column-count: @column-count;\n column-count: @column-count;\n -webkit-column-gap: @column-gap;\n -moz-column-gap: @column-gap;\n column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n -webkit-hyphens: @mode;\n -moz-hyphens: @mode;\n -ms-hyphens: @mode; // IE10+\n -o-hyphens: @mode;\n hyphens: @mode;\n word-wrap: break-word;\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n // Firefox\n &::-moz-placeholder {\n color: @color;\n opacity: 1; // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526\n }\n &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+\n &::-webkit-input-placeholder { color: @color; } // Safari and Chrome\n}\n\n// Transformations\n.scale(@ratio) {\n -webkit-transform: scale(@ratio);\n -ms-transform: scale(@ratio); // IE9 only\n -o-transform: scale(@ratio);\n transform: scale(@ratio);\n}\n.scale(@ratioX; @ratioY) {\n -webkit-transform: scale(@ratioX, @ratioY);\n -ms-transform: scale(@ratioX, @ratioY); // IE9 only\n -o-transform: scale(@ratioX, @ratioY);\n transform: scale(@ratioX, @ratioY);\n}\n.scaleX(@ratio) {\n -webkit-transform: scaleX(@ratio);\n -ms-transform: scaleX(@ratio); // IE9 only\n -o-transform: scaleX(@ratio);\n transform: scaleX(@ratio);\n}\n.scaleY(@ratio) {\n -webkit-transform: scaleY(@ratio);\n -ms-transform: scaleY(@ratio); // IE9 only\n -o-transform: scaleY(@ratio);\n transform: scaleY(@ratio);\n}\n.skew(@x; @y) {\n -webkit-transform: skewX(@x) skewY(@y);\n -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n -o-transform: skewX(@x) skewY(@y);\n transform: skewX(@x) skewY(@y);\n}\n.translate(@x; @y) {\n -webkit-transform: translate(@x, @y);\n -ms-transform: translate(@x, @y); // IE9 only\n -o-transform: translate(@x, @y);\n transform: translate(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n -webkit-transform: translate3d(@x, @y, @z);\n transform: translate3d(@x, @y, @z);\n}\n.rotate(@degrees) {\n -webkit-transform: rotate(@degrees);\n -ms-transform: rotate(@degrees); // IE9 only\n -o-transform: rotate(@degrees);\n transform: rotate(@degrees);\n}\n.rotateX(@degrees) {\n -webkit-transform: rotateX(@degrees);\n -ms-transform: rotateX(@degrees); // IE9 only\n -o-transform: rotateX(@degrees);\n transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n -webkit-transform: rotateY(@degrees);\n -ms-transform: rotateY(@degrees); // IE9 only\n -o-transform: rotateY(@degrees);\n transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n -webkit-perspective: @perspective;\n -moz-perspective: @perspective;\n perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n -webkit-perspective-origin: @perspective;\n -moz-perspective-origin: @perspective;\n perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n -webkit-transform-origin: @origin;\n -moz-transform-origin: @origin;\n -ms-transform-origin: @origin; // IE9 only\n transform-origin: @origin;\n}\n\n\n// Transitions\n\n.transition(@transition) {\n -webkit-transition: @transition;\n -o-transition: @transition;\n transition: @transition;\n}\n.transition-property(@transition-property) {\n -webkit-transition-property: @transition-property;\n transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n -webkit-transition-delay: @transition-delay;\n transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n -webkit-transition-duration: @transition-duration;\n transition-duration: @transition-duration;\n}\n.transition-timing-function(@timing-function) {\n -webkit-transition-timing-function: @timing-function;\n transition-timing-function: @timing-function;\n}\n.transition-transform(@transition) {\n -webkit-transition: -webkit-transform @transition;\n -moz-transition: -moz-transform @transition;\n -o-transition: -o-transform @transition;\n transition: transform @transition;\n}\n\n\n// User select\n// For selecting text on the page\n\n.user-select(@select) {\n -webkit-user-select: @select;\n -moz-user-select: @select;\n -ms-user-select: @select; // IE10+\n user-select: @select;\n}\n","// stylelint-disable value-no-vendor-prefix, selector-max-id\n\n#gradient {\n\n // Horizontal gradient, from left to right\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\", argb(@start-color), argb(@end-color))); // IE9 and down\n background-repeat: repeat-x;\n }\n\n // Vertical gradient, from top to bottom\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\", argb(@start-color), argb(@end-color))); // IE9 and down\n background-repeat: repeat-x;\n }\n\n .directional(@start-color: #555; @end-color: #333; @deg: 45deg) {\n background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(@deg, @start-color, @end-color); // Opera 12\n background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n }\n .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\", argb(@start-color), argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n background-repeat: no-repeat;\n }\n .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\", argb(@start-color), argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n background-repeat: no-repeat;\n }\n .radial(@inner-color: #555; @outer-color: #333) {\n background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);\n background-image: radial-gradient(circle, @inner-color, @outer-color);\n background-repeat: no-repeat;\n }\n .striped(@color: rgba(255, 255, 255, .15); @angle: 45deg) {\n background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n }\n}\n","// Reset filters for IE\n//\n// When you need to remove a gradient background, do not forget to use this to reset\n// the IE filter for IE9 and below.\n\n.reset-filter() {\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(enabled = false)\"));\n}\n"]} \ No newline at end of file diff --git a/node_modules/bootstrap/dist/css/bootstrap.css b/node_modules/bootstrap/dist/css/bootstrap.css deleted file mode 100644 index fcab415..0000000 --- a/node_modules/bootstrap/dist/css/bootstrap.css +++ /dev/null @@ -1,6834 +0,0 @@ -/*! - * Bootstrap v3.4.1 (https://getbootstrap.com/) - * Copyright 2011-2019 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - */ -/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */ -html { - font-family: sans-serif; - -ms-text-size-adjust: 100%; - -webkit-text-size-adjust: 100%; -} -body { - margin: 0; -} -article, -aside, -details, -figcaption, -figure, -footer, -header, -hgroup, -main, -menu, -nav, -section, -summary { - display: block; -} -audio, -canvas, -progress, -video { - display: inline-block; - vertical-align: baseline; -} -audio:not([controls]) { - display: none; - height: 0; -} -[hidden], -template { - display: none; -} -a { - background-color: transparent; -} -a:active, -a:hover { - outline: 0; -} -abbr[title] { - border-bottom: none; - text-decoration: underline; - -webkit-text-decoration: underline dotted; - -moz-text-decoration: underline dotted; - text-decoration: underline dotted; -} -b, -strong { - font-weight: bold; -} -dfn { - font-style: italic; -} -h1 { - font-size: 2em; - margin: 0.67em 0; -} -mark { - background: #ff0; - color: #000; -} -small { - font-size: 80%; -} -sub, -sup { - font-size: 75%; - line-height: 0; - position: relative; - vertical-align: baseline; -} -sup { - top: -0.5em; -} -sub { - bottom: -0.25em; -} -img { - border: 0; -} -svg:not(:root) { - overflow: hidden; -} -figure { - margin: 1em 40px; -} -hr { - -webkit-box-sizing: content-box; - -moz-box-sizing: content-box; - box-sizing: content-box; - height: 0; -} -pre { - overflow: auto; -} -code, -kbd, -pre, -samp { - font-family: monospace, monospace; - font-size: 1em; -} -button, -input, -optgroup, -select, -textarea { - color: inherit; - font: inherit; - margin: 0; -} -button { - overflow: visible; -} -button, -select { - text-transform: none; -} -button, -html input[type="button"], -input[type="reset"], -input[type="submit"] { - -webkit-appearance: button; - cursor: pointer; -} -button[disabled], -html input[disabled] { - cursor: default; -} -button::-moz-focus-inner, -input::-moz-focus-inner { - border: 0; - padding: 0; -} -input { - line-height: normal; -} -input[type="checkbox"], -input[type="radio"] { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - padding: 0; -} -input[type="number"]::-webkit-inner-spin-button, -input[type="number"]::-webkit-outer-spin-button { - height: auto; -} -input[type="search"] { - -webkit-appearance: textfield; - -webkit-box-sizing: content-box; - -moz-box-sizing: content-box; - box-sizing: content-box; -} -input[type="search"]::-webkit-search-cancel-button, -input[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; -} -fieldset { - border: 1px solid #c0c0c0; - margin: 0 2px; - padding: 0.35em 0.625em 0.75em; -} -legend { - border: 0; - padding: 0; -} -textarea { - overflow: auto; -} -optgroup { - font-weight: bold; -} -table { - border-collapse: collapse; - border-spacing: 0; -} -td, -th { - padding: 0; -} -/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */ -@media print { - *, - *:before, - *:after { - color: #000 !important; - text-shadow: none !important; - background: transparent !important; - -webkit-box-shadow: none !important; - box-shadow: none !important; - } - a, - a:visited { - text-decoration: underline; - } - a[href]:after { - content: " (" attr(href) ")"; - } - abbr[title]:after { - content: " (" attr(title) ")"; - } - a[href^="#"]:after, - a[href^="javascript:"]:after { - content: ""; - } - pre, - blockquote { - border: 1px solid #999; - page-break-inside: avoid; - } - thead { - display: table-header-group; - } - tr, - img { - page-break-inside: avoid; - } - img { - max-width: 100% !important; - } - p, - h2, - h3 { - orphans: 3; - widows: 3; - } - h2, - h3 { - page-break-after: avoid; - } - .navbar { - display: none; - } - .btn > .caret, - .dropup > .btn > .caret { - border-top-color: #000 !important; - } - .label { - border: 1px solid #000; - } - .table { - border-collapse: collapse !important; - } - .table td, - .table th { - background-color: #fff !important; - } - .table-bordered th, - .table-bordered td { - border: 1px solid #ddd !important; - } -} -@font-face { - font-family: "Glyphicons Halflings"; - src: url("../fonts/glyphicons-halflings-regular.eot"); - src: url("../fonts/glyphicons-halflings-regular.eot?#iefix") format("embedded-opentype"), url("../fonts/glyphicons-halflings-regular.woff2") format("woff2"), url("../fonts/glyphicons-halflings-regular.woff") format("woff"), url("../fonts/glyphicons-halflings-regular.ttf") format("truetype"), url("../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular") format("svg"); -} -.glyphicon { - position: relative; - top: 1px; - display: inline-block; - font-family: "Glyphicons Halflings"; - font-style: normal; - font-weight: 400; - line-height: 1; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} -.glyphicon-asterisk:before { - content: "\002a"; -} -.glyphicon-plus:before { - content: "\002b"; -} -.glyphicon-euro:before, -.glyphicon-eur:before { - content: "\20ac"; -} -.glyphicon-minus:before { - content: "\2212"; -} -.glyphicon-cloud:before { - content: "\2601"; -} -.glyphicon-envelope:before { - content: "\2709"; -} -.glyphicon-pencil:before { - content: "\270f"; -} -.glyphicon-glass:before { - content: "\e001"; -} -.glyphicon-music:before { - content: "\e002"; -} -.glyphicon-search:before { - content: "\e003"; -} -.glyphicon-heart:before { - content: "\e005"; -} -.glyphicon-star:before { - content: "\e006"; -} -.glyphicon-star-empty:before { - content: "\e007"; -} -.glyphicon-user:before { - content: "\e008"; -} -.glyphicon-film:before { - content: "\e009"; -} -.glyphicon-th-large:before { - content: "\e010"; -} -.glyphicon-th:before { - content: "\e011"; -} -.glyphicon-th-list:before { - content: "\e012"; -} -.glyphicon-ok:before { - content: "\e013"; -} -.glyphicon-remove:before { - content: "\e014"; -} -.glyphicon-zoom-in:before { - content: "\e015"; -} -.glyphicon-zoom-out:before { - content: "\e016"; -} -.glyphicon-off:before { - content: "\e017"; -} -.glyphicon-signal:before { - content: "\e018"; -} -.glyphicon-cog:before { - content: "\e019"; -} -.glyphicon-trash:before { - content: "\e020"; -} -.glyphicon-home:before { - content: "\e021"; -} -.glyphicon-file:before { - content: "\e022"; -} -.glyphicon-time:before { - content: "\e023"; -} -.glyphicon-road:before { - content: "\e024"; -} -.glyphicon-download-alt:before { - content: "\e025"; -} -.glyphicon-download:before { - content: "\e026"; -} -.glyphicon-upload:before { - content: "\e027"; -} -.glyphicon-inbox:before { - content: "\e028"; -} -.glyphicon-play-circle:before { - content: "\e029"; -} -.glyphicon-repeat:before { - content: "\e030"; -} -.glyphicon-refresh:before { - content: "\e031"; -} -.glyphicon-list-alt:before { - content: "\e032"; -} -.glyphicon-lock:before { - content: "\e033"; -} -.glyphicon-flag:before { - content: "\e034"; -} -.glyphicon-headphones:before { - content: "\e035"; -} -.glyphicon-volume-off:before { - content: "\e036"; -} -.glyphicon-volume-down:before { - content: "\e037"; -} -.glyphicon-volume-up:before { - content: "\e038"; -} -.glyphicon-qrcode:before { - content: "\e039"; -} -.glyphicon-barcode:before { - content: "\e040"; -} -.glyphicon-tag:before { - content: "\e041"; -} -.glyphicon-tags:before { - content: "\e042"; -} -.glyphicon-book:before { - content: "\e043"; -} -.glyphicon-bookmark:before { - content: "\e044"; -} -.glyphicon-print:before { - content: "\e045"; -} -.glyphicon-camera:before { - content: "\e046"; -} -.glyphicon-font:before { - content: "\e047"; -} -.glyphicon-bold:before { - content: "\e048"; -} -.glyphicon-italic:before { - content: "\e049"; -} -.glyphicon-text-height:before { - content: "\e050"; -} -.glyphicon-text-width:before { - content: "\e051"; -} -.glyphicon-align-left:before { - content: "\e052"; -} -.glyphicon-align-center:before { - content: "\e053"; -} -.glyphicon-align-right:before { - content: "\e054"; -} -.glyphicon-align-justify:before { - content: "\e055"; -} -.glyphicon-list:before { - content: "\e056"; -} -.glyphicon-indent-left:before { - content: "\e057"; -} -.glyphicon-indent-right:before { - content: "\e058"; -} -.glyphicon-facetime-video:before { - content: "\e059"; -} -.glyphicon-picture:before { - content: "\e060"; -} -.glyphicon-map-marker:before { - content: "\e062"; -} -.glyphicon-adjust:before { - content: "\e063"; -} -.glyphicon-tint:before { - content: "\e064"; -} -.glyphicon-edit:before { - content: "\e065"; -} -.glyphicon-share:before { - content: "\e066"; -} -.glyphicon-check:before { - content: "\e067"; -} -.glyphicon-move:before { - content: "\e068"; -} -.glyphicon-step-backward:before { - content: "\e069"; -} -.glyphicon-fast-backward:before { - content: "\e070"; -} -.glyphicon-backward:before { - content: "\e071"; -} -.glyphicon-play:before { - content: "\e072"; -} -.glyphicon-pause:before { - content: "\e073"; -} -.glyphicon-stop:before { - content: "\e074"; -} -.glyphicon-forward:before { - content: "\e075"; -} -.glyphicon-fast-forward:before { - content: "\e076"; -} -.glyphicon-step-forward:before { - content: "\e077"; -} -.glyphicon-eject:before { - content: "\e078"; -} -.glyphicon-chevron-left:before { - content: "\e079"; -} -.glyphicon-chevron-right:before { - content: "\e080"; -} -.glyphicon-plus-sign:before { - content: "\e081"; -} -.glyphicon-minus-sign:before { - content: "\e082"; -} -.glyphicon-remove-sign:before { - content: "\e083"; -} -.glyphicon-ok-sign:before { - content: "\e084"; -} -.glyphicon-question-sign:before { - content: "\e085"; -} -.glyphicon-info-sign:before { - content: "\e086"; -} -.glyphicon-screenshot:before { - content: "\e087"; -} -.glyphicon-remove-circle:before { - content: "\e088"; -} -.glyphicon-ok-circle:before { - content: "\e089"; -} -.glyphicon-ban-circle:before { - content: "\e090"; -} -.glyphicon-arrow-left:before { - content: "\e091"; -} -.glyphicon-arrow-right:before { - content: "\e092"; -} -.glyphicon-arrow-up:before { - content: "\e093"; -} -.glyphicon-arrow-down:before { - content: "\e094"; -} -.glyphicon-share-alt:before { - content: "\e095"; -} -.glyphicon-resize-full:before { - content: "\e096"; -} -.glyphicon-resize-small:before { - content: "\e097"; -} -.glyphicon-exclamation-sign:before { - content: "\e101"; -} -.glyphicon-gift:before { - content: "\e102"; -} -.glyphicon-leaf:before { - content: "\e103"; -} -.glyphicon-fire:before { - content: "\e104"; -} -.glyphicon-eye-open:before { - content: "\e105"; -} -.glyphicon-eye-close:before { - content: "\e106"; -} -.glyphicon-warning-sign:before { - content: "\e107"; -} -.glyphicon-plane:before { - content: "\e108"; -} -.glyphicon-calendar:before { - content: "\e109"; -} -.glyphicon-random:before { - content: "\e110"; -} -.glyphicon-comment:before { - content: "\e111"; -} -.glyphicon-magnet:before { - content: "\e112"; -} -.glyphicon-chevron-up:before { - content: "\e113"; -} -.glyphicon-chevron-down:before { - content: "\e114"; -} -.glyphicon-retweet:before { - content: "\e115"; -} -.glyphicon-shopping-cart:before { - content: "\e116"; -} -.glyphicon-folder-close:before { - content: "\e117"; -} -.glyphicon-folder-open:before { - content: "\e118"; -} -.glyphicon-resize-vertical:before { - content: "\e119"; -} -.glyphicon-resize-horizontal:before { - content: "\e120"; -} -.glyphicon-hdd:before { - content: "\e121"; -} -.glyphicon-bullhorn:before { - content: "\e122"; -} -.glyphicon-bell:before { - content: "\e123"; -} -.glyphicon-certificate:before { - content: "\e124"; -} -.glyphicon-thumbs-up:before { - content: "\e125"; -} -.glyphicon-thumbs-down:before { - content: "\e126"; -} -.glyphicon-hand-right:before { - content: "\e127"; -} -.glyphicon-hand-left:before { - content: "\e128"; -} -.glyphicon-hand-up:before { - content: "\e129"; -} -.glyphicon-hand-down:before { - content: "\e130"; -} -.glyphicon-circle-arrow-right:before { - content: "\e131"; -} -.glyphicon-circle-arrow-left:before { - content: "\e132"; -} -.glyphicon-circle-arrow-up:before { - content: "\e133"; -} -.glyphicon-circle-arrow-down:before { - content: "\e134"; -} -.glyphicon-globe:before { - content: "\e135"; -} -.glyphicon-wrench:before { - content: "\e136"; -} -.glyphicon-tasks:before { - content: "\e137"; -} -.glyphicon-filter:before { - content: "\e138"; -} -.glyphicon-briefcase:before { - content: "\e139"; -} -.glyphicon-fullscreen:before { - content: "\e140"; -} -.glyphicon-dashboard:before { - content: "\e141"; -} -.glyphicon-paperclip:before { - content: "\e142"; -} -.glyphicon-heart-empty:before { - content: "\e143"; -} -.glyphicon-link:before { - content: "\e144"; -} -.glyphicon-phone:before { - content: "\e145"; -} -.glyphicon-pushpin:before { - content: "\e146"; -} -.glyphicon-usd:before { - content: "\e148"; -} -.glyphicon-gbp:before { - content: "\e149"; -} -.glyphicon-sort:before { - content: "\e150"; -} -.glyphicon-sort-by-alphabet:before { - content: "\e151"; -} -.glyphicon-sort-by-alphabet-alt:before { - content: "\e152"; -} -.glyphicon-sort-by-order:before { - content: "\e153"; -} -.glyphicon-sort-by-order-alt:before { - content: "\e154"; -} -.glyphicon-sort-by-attributes:before { - content: "\e155"; -} -.glyphicon-sort-by-attributes-alt:before { - content: "\e156"; -} -.glyphicon-unchecked:before { - content: "\e157"; -} -.glyphicon-expand:before { - content: "\e158"; -} -.glyphicon-collapse-down:before { - content: "\e159"; -} -.glyphicon-collapse-up:before { - content: "\e160"; -} -.glyphicon-log-in:before { - content: "\e161"; -} -.glyphicon-flash:before { - content: "\e162"; -} -.glyphicon-log-out:before { - content: "\e163"; -} -.glyphicon-new-window:before { - content: "\e164"; -} -.glyphicon-record:before { - content: "\e165"; -} -.glyphicon-save:before { - content: "\e166"; -} -.glyphicon-open:before { - content: "\e167"; -} -.glyphicon-saved:before { - content: "\e168"; -} -.glyphicon-import:before { - content: "\e169"; -} -.glyphicon-export:before { - content: "\e170"; -} -.glyphicon-send:before { - content: "\e171"; -} -.glyphicon-floppy-disk:before { - content: "\e172"; -} -.glyphicon-floppy-saved:before { - content: "\e173"; -} -.glyphicon-floppy-remove:before { - content: "\e174"; -} -.glyphicon-floppy-save:before { - content: "\e175"; -} -.glyphicon-floppy-open:before { - content: "\e176"; -} -.glyphicon-credit-card:before { - content: "\e177"; -} -.glyphicon-transfer:before { - content: "\e178"; -} -.glyphicon-cutlery:before { - content: "\e179"; -} -.glyphicon-header:before { - content: "\e180"; -} -.glyphicon-compressed:before { - content: "\e181"; -} -.glyphicon-earphone:before { - content: "\e182"; -} -.glyphicon-phone-alt:before { - content: "\e183"; -} -.glyphicon-tower:before { - content: "\e184"; -} -.glyphicon-stats:before { - content: "\e185"; -} -.glyphicon-sd-video:before { - content: "\e186"; -} -.glyphicon-hd-video:before { - content: "\e187"; -} -.glyphicon-subtitles:before { - content: "\e188"; -} -.glyphicon-sound-stereo:before { - content: "\e189"; -} -.glyphicon-sound-dolby:before { - content: "\e190"; -} -.glyphicon-sound-5-1:before { - content: "\e191"; -} -.glyphicon-sound-6-1:before { - content: "\e192"; -} -.glyphicon-sound-7-1:before { - content: "\e193"; -} -.glyphicon-copyright-mark:before { - content: "\e194"; -} -.glyphicon-registration-mark:before { - content: "\e195"; -} -.glyphicon-cloud-download:before { - content: "\e197"; -} -.glyphicon-cloud-upload:before { - content: "\e198"; -} -.glyphicon-tree-conifer:before { - content: "\e199"; -} -.glyphicon-tree-deciduous:before { - content: "\e200"; -} -.glyphicon-cd:before { - content: "\e201"; -} -.glyphicon-save-file:before { - content: "\e202"; -} -.glyphicon-open-file:before { - content: "\e203"; -} -.glyphicon-level-up:before { - content: "\e204"; -} -.glyphicon-copy:before { - content: "\e205"; -} -.glyphicon-paste:before { - content: "\e206"; -} -.glyphicon-alert:before { - content: "\e209"; -} -.glyphicon-equalizer:before { - content: "\e210"; -} -.glyphicon-king:before { - content: "\e211"; -} -.glyphicon-queen:before { - content: "\e212"; -} -.glyphicon-pawn:before { - content: "\e213"; -} -.glyphicon-bishop:before { - content: "\e214"; -} -.glyphicon-knight:before { - content: "\e215"; -} -.glyphicon-baby-formula:before { - content: "\e216"; -} -.glyphicon-tent:before { - content: "\26fa"; -} -.glyphicon-blackboard:before { - content: "\e218"; -} -.glyphicon-bed:before { - content: "\e219"; -} -.glyphicon-apple:before { - content: "\f8ff"; -} -.glyphicon-erase:before { - content: "\e221"; -} -.glyphicon-hourglass:before { - content: "\231b"; -} -.glyphicon-lamp:before { - content: "\e223"; -} -.glyphicon-duplicate:before { - content: "\e224"; -} -.glyphicon-piggy-bank:before { - content: "\e225"; -} -.glyphicon-scissors:before { - content: "\e226"; -} -.glyphicon-bitcoin:before { - content: "\e227"; -} -.glyphicon-btc:before { - content: "\e227"; -} -.glyphicon-xbt:before { - content: "\e227"; -} -.glyphicon-yen:before { - content: "\00a5"; -} -.glyphicon-jpy:before { - content: "\00a5"; -} -.glyphicon-ruble:before { - content: "\20bd"; -} -.glyphicon-rub:before { - content: "\20bd"; -} -.glyphicon-scale:before { - content: "\e230"; -} -.glyphicon-ice-lolly:before { - content: "\e231"; -} -.glyphicon-ice-lolly-tasted:before { - content: "\e232"; -} -.glyphicon-education:before { - content: "\e233"; -} -.glyphicon-option-horizontal:before { - content: "\e234"; -} -.glyphicon-option-vertical:before { - content: "\e235"; -} -.glyphicon-menu-hamburger:before { - content: "\e236"; -} -.glyphicon-modal-window:before { - content: "\e237"; -} -.glyphicon-oil:before { - content: "\e238"; -} -.glyphicon-grain:before { - content: "\e239"; -} -.glyphicon-sunglasses:before { - content: "\e240"; -} -.glyphicon-text-size:before { - content: "\e241"; -} -.glyphicon-text-color:before { - content: "\e242"; -} -.glyphicon-text-background:before { - content: "\e243"; -} -.glyphicon-object-align-top:before { - content: "\e244"; -} -.glyphicon-object-align-bottom:before { - content: "\e245"; -} -.glyphicon-object-align-horizontal:before { - content: "\e246"; -} -.glyphicon-object-align-left:before { - content: "\e247"; -} -.glyphicon-object-align-vertical:before { - content: "\e248"; -} -.glyphicon-object-align-right:before { - content: "\e249"; -} -.glyphicon-triangle-right:before { - content: "\e250"; -} -.glyphicon-triangle-left:before { - content: "\e251"; -} -.glyphicon-triangle-bottom:before { - content: "\e252"; -} -.glyphicon-triangle-top:before { - content: "\e253"; -} -.glyphicon-console:before { - content: "\e254"; -} -.glyphicon-superscript:before { - content: "\e255"; -} -.glyphicon-subscript:before { - content: "\e256"; -} -.glyphicon-menu-left:before { - content: "\e257"; -} -.glyphicon-menu-right:before { - content: "\e258"; -} -.glyphicon-menu-down:before { - content: "\e259"; -} -.glyphicon-menu-up:before { - content: "\e260"; -} -* { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -*:before, -*:after { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -html { - font-size: 10px; - -webkit-tap-highlight-color: rgba(0, 0, 0, 0); -} -body { - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 14px; - line-height: 1.42857143; - color: #333333; - background-color: #fff; -} -input, -button, -select, -textarea { - font-family: inherit; - font-size: inherit; - line-height: inherit; -} -a { - color: #337ab7; - text-decoration: none; -} -a:hover, -a:focus { - color: #23527c; - text-decoration: underline; -} -a:focus { - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} -figure { - margin: 0; -} -img { - vertical-align: middle; -} -.img-responsive, -.thumbnail > img, -.thumbnail a > img, -.carousel-inner > .item > img, -.carousel-inner > .item > a > img { - display: block; - max-width: 100%; - height: auto; -} -.img-rounded { - border-radius: 6px; -} -.img-thumbnail { - padding: 4px; - line-height: 1.42857143; - background-color: #fff; - border: 1px solid #ddd; - border-radius: 4px; - -webkit-transition: all 0.2s ease-in-out; - -o-transition: all 0.2s ease-in-out; - transition: all 0.2s ease-in-out; - display: inline-block; - max-width: 100%; - height: auto; -} -.img-circle { - border-radius: 50%; -} -hr { - margin-top: 20px; - margin-bottom: 20px; - border: 0; - border-top: 1px solid #eeeeee; -} -.sr-only { - position: absolute; - width: 1px; - height: 1px; - padding: 0; - margin: -1px; - overflow: hidden; - clip: rect(0, 0, 0, 0); - border: 0; -} -.sr-only-focusable:active, -.sr-only-focusable:focus { - position: static; - width: auto; - height: auto; - margin: 0; - overflow: visible; - clip: auto; -} -[role="button"] { - cursor: pointer; -} -h1, -h2, -h3, -h4, -h5, -h6, -.h1, -.h2, -.h3, -.h4, -.h5, -.h6 { - font-family: inherit; - font-weight: 500; - line-height: 1.1; - color: inherit; -} -h1 small, -h2 small, -h3 small, -h4 small, -h5 small, -h6 small, -.h1 small, -.h2 small, -.h3 small, -.h4 small, -.h5 small, -.h6 small, -h1 .small, -h2 .small, -h3 .small, -h4 .small, -h5 .small, -h6 .small, -.h1 .small, -.h2 .small, -.h3 .small, -.h4 .small, -.h5 .small, -.h6 .small { - font-weight: 400; - line-height: 1; - color: #777777; -} -h1, -.h1, -h2, -.h2, -h3, -.h3 { - margin-top: 20px; - margin-bottom: 10px; -} -h1 small, -.h1 small, -h2 small, -.h2 small, -h3 small, -.h3 small, -h1 .small, -.h1 .small, -h2 .small, -.h2 .small, -h3 .small, -.h3 .small { - font-size: 65%; -} -h4, -.h4, -h5, -.h5, -h6, -.h6 { - margin-top: 10px; - margin-bottom: 10px; -} -h4 small, -.h4 small, -h5 small, -.h5 small, -h6 small, -.h6 small, -h4 .small, -.h4 .small, -h5 .small, -.h5 .small, -h6 .small, -.h6 .small { - font-size: 75%; -} -h1, -.h1 { - font-size: 36px; -} -h2, -.h2 { - font-size: 30px; -} -h3, -.h3 { - font-size: 24px; -} -h4, -.h4 { - font-size: 18px; -} -h5, -.h5 { - font-size: 14px; -} -h6, -.h6 { - font-size: 12px; -} -p { - margin: 0 0 10px; -} -.lead { - margin-bottom: 20px; - font-size: 16px; - font-weight: 300; - line-height: 1.4; -} -@media (min-width: 768px) { - .lead { - font-size: 21px; - } -} -small, -.small { - font-size: 85%; -} -mark, -.mark { - padding: 0.2em; - background-color: #fcf8e3; -} -.text-left { - text-align: left; -} -.text-right { - text-align: right; -} -.text-center { - text-align: center; -} -.text-justify { - text-align: justify; -} -.text-nowrap { - white-space: nowrap; -} -.text-lowercase { - text-transform: lowercase; -} -.text-uppercase { - text-transform: uppercase; -} -.text-capitalize { - text-transform: capitalize; -} -.text-muted { - color: #777777; -} -.text-primary { - color: #337ab7; -} -a.text-primary:hover, -a.text-primary:focus { - color: #286090; -} -.text-success { - color: #3c763d; -} -a.text-success:hover, -a.text-success:focus { - color: #2b542c; -} -.text-info { - color: #31708f; -} -a.text-info:hover, -a.text-info:focus { - color: #245269; -} -.text-warning { - color: #8a6d3b; -} -a.text-warning:hover, -a.text-warning:focus { - color: #66512c; -} -.text-danger { - color: #a94442; -} -a.text-danger:hover, -a.text-danger:focus { - color: #843534; -} -.bg-primary { - color: #fff; - background-color: #337ab7; -} -a.bg-primary:hover, -a.bg-primary:focus { - background-color: #286090; -} -.bg-success { - background-color: #dff0d8; -} -a.bg-success:hover, -a.bg-success:focus { - background-color: #c1e2b3; -} -.bg-info { - background-color: #d9edf7; -} -a.bg-info:hover, -a.bg-info:focus { - background-color: #afd9ee; -} -.bg-warning { - background-color: #fcf8e3; -} -a.bg-warning:hover, -a.bg-warning:focus { - background-color: #f7ecb5; -} -.bg-danger { - background-color: #f2dede; -} -a.bg-danger:hover, -a.bg-danger:focus { - background-color: #e4b9b9; -} -.page-header { - padding-bottom: 9px; - margin: 40px 0 20px; - border-bottom: 1px solid #eeeeee; -} -ul, -ol { - margin-top: 0; - margin-bottom: 10px; -} -ul ul, -ol ul, -ul ol, -ol ol { - margin-bottom: 0; -} -.list-unstyled { - padding-left: 0; - list-style: none; -} -.list-inline { - padding-left: 0; - list-style: none; - margin-left: -5px; -} -.list-inline > li { - display: inline-block; - padding-right: 5px; - padding-left: 5px; -} -dl { - margin-top: 0; - margin-bottom: 20px; -} -dt, -dd { - line-height: 1.42857143; -} -dt { - font-weight: 700; -} -dd { - margin-left: 0; -} -@media (min-width: 768px) { - .dl-horizontal dt { - float: left; - width: 160px; - clear: left; - text-align: right; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - } - .dl-horizontal dd { - margin-left: 180px; - } -} -abbr[title], -abbr[data-original-title] { - cursor: help; -} -.initialism { - font-size: 90%; - text-transform: uppercase; -} -blockquote { - padding: 10px 20px; - margin: 0 0 20px; - font-size: 17.5px; - border-left: 5px solid #eeeeee; -} -blockquote p:last-child, -blockquote ul:last-child, -blockquote ol:last-child { - margin-bottom: 0; -} -blockquote footer, -blockquote small, -blockquote .small { - display: block; - font-size: 80%; - line-height: 1.42857143; - color: #777777; -} -blockquote footer:before, -blockquote small:before, -blockquote .small:before { - content: "\2014 \00A0"; -} -.blockquote-reverse, -blockquote.pull-right { - padding-right: 15px; - padding-left: 0; - text-align: right; - border-right: 5px solid #eeeeee; - border-left: 0; -} -.blockquote-reverse footer:before, -blockquote.pull-right footer:before, -.blockquote-reverse small:before, -blockquote.pull-right small:before, -.blockquote-reverse .small:before, -blockquote.pull-right .small:before { - content: ""; -} -.blockquote-reverse footer:after, -blockquote.pull-right footer:after, -.blockquote-reverse small:after, -blockquote.pull-right small:after, -.blockquote-reverse .small:after, -blockquote.pull-right .small:after { - content: "\00A0 \2014"; -} -address { - margin-bottom: 20px; - font-style: normal; - line-height: 1.42857143; -} -code, -kbd, -pre, -samp { - font-family: Menlo, Monaco, Consolas, "Courier New", monospace; -} -code { - padding: 2px 4px; - font-size: 90%; - color: #c7254e; - background-color: #f9f2f4; - border-radius: 4px; -} -kbd { - padding: 2px 4px; - font-size: 90%; - color: #fff; - background-color: #333; - border-radius: 3px; - -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25); - box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25); -} -kbd kbd { - padding: 0; - font-size: 100%; - font-weight: 700; - -webkit-box-shadow: none; - box-shadow: none; -} -pre { - display: block; - padding: 9.5px; - margin: 0 0 10px; - font-size: 13px; - line-height: 1.42857143; - color: #333333; - word-break: break-all; - word-wrap: break-word; - background-color: #f5f5f5; - border: 1px solid #ccc; - border-radius: 4px; -} -pre code { - padding: 0; - font-size: inherit; - color: inherit; - white-space: pre-wrap; - background-color: transparent; - border-radius: 0; -} -.pre-scrollable { - max-height: 340px; - overflow-y: scroll; -} -.container { - padding-right: 15px; - padding-left: 15px; - margin-right: auto; - margin-left: auto; -} -@media (min-width: 768px) { - .container { - width: 750px; - } -} -@media (min-width: 992px) { - .container { - width: 970px; - } -} -@media (min-width: 1200px) { - .container { - width: 1170px; - } -} -.container-fluid { - padding-right: 15px; - padding-left: 15px; - margin-right: auto; - margin-left: auto; -} -.row { - margin-right: -15px; - margin-left: -15px; -} -.row-no-gutters { - margin-right: 0; - margin-left: 0; -} -.row-no-gutters [class*="col-"] { - padding-right: 0; - padding-left: 0; -} -.col-xs-1, -.col-sm-1, -.col-md-1, -.col-lg-1, -.col-xs-2, -.col-sm-2, -.col-md-2, -.col-lg-2, -.col-xs-3, -.col-sm-3, -.col-md-3, -.col-lg-3, -.col-xs-4, -.col-sm-4, -.col-md-4, -.col-lg-4, -.col-xs-5, -.col-sm-5, -.col-md-5, -.col-lg-5, -.col-xs-6, -.col-sm-6, -.col-md-6, -.col-lg-6, -.col-xs-7, -.col-sm-7, -.col-md-7, -.col-lg-7, -.col-xs-8, -.col-sm-8, -.col-md-8, -.col-lg-8, -.col-xs-9, -.col-sm-9, -.col-md-9, -.col-lg-9, -.col-xs-10, -.col-sm-10, -.col-md-10, -.col-lg-10, -.col-xs-11, -.col-sm-11, -.col-md-11, -.col-lg-11, -.col-xs-12, -.col-sm-12, -.col-md-12, -.col-lg-12 { - position: relative; - min-height: 1px; - padding-right: 15px; - padding-left: 15px; -} -.col-xs-1, -.col-xs-2, -.col-xs-3, -.col-xs-4, -.col-xs-5, -.col-xs-6, -.col-xs-7, -.col-xs-8, -.col-xs-9, -.col-xs-10, -.col-xs-11, -.col-xs-12 { - float: left; -} -.col-xs-12 { - width: 100%; -} -.col-xs-11 { - width: 91.66666667%; -} -.col-xs-10 { - width: 83.33333333%; -} -.col-xs-9 { - width: 75%; -} -.col-xs-8 { - width: 66.66666667%; -} -.col-xs-7 { - width: 58.33333333%; -} -.col-xs-6 { - width: 50%; -} -.col-xs-5 { - width: 41.66666667%; -} -.col-xs-4 { - width: 33.33333333%; -} -.col-xs-3 { - width: 25%; -} -.col-xs-2 { - width: 16.66666667%; -} -.col-xs-1 { - width: 8.33333333%; -} -.col-xs-pull-12 { - right: 100%; -} -.col-xs-pull-11 { - right: 91.66666667%; -} -.col-xs-pull-10 { - right: 83.33333333%; -} -.col-xs-pull-9 { - right: 75%; -} -.col-xs-pull-8 { - right: 66.66666667%; -} -.col-xs-pull-7 { - right: 58.33333333%; -} -.col-xs-pull-6 { - right: 50%; -} -.col-xs-pull-5 { - right: 41.66666667%; -} -.col-xs-pull-4 { - right: 33.33333333%; -} -.col-xs-pull-3 { - right: 25%; -} -.col-xs-pull-2 { - right: 16.66666667%; -} -.col-xs-pull-1 { - right: 8.33333333%; -} -.col-xs-pull-0 { - right: auto; -} -.col-xs-push-12 { - left: 100%; -} -.col-xs-push-11 { - left: 91.66666667%; -} -.col-xs-push-10 { - left: 83.33333333%; -} -.col-xs-push-9 { - left: 75%; -} -.col-xs-push-8 { - left: 66.66666667%; -} -.col-xs-push-7 { - left: 58.33333333%; -} -.col-xs-push-6 { - left: 50%; -} -.col-xs-push-5 { - left: 41.66666667%; -} -.col-xs-push-4 { - left: 33.33333333%; -} -.col-xs-push-3 { - left: 25%; -} -.col-xs-push-2 { - left: 16.66666667%; -} -.col-xs-push-1 { - left: 8.33333333%; -} -.col-xs-push-0 { - left: auto; -} -.col-xs-offset-12 { - margin-left: 100%; -} -.col-xs-offset-11 { - margin-left: 91.66666667%; -} -.col-xs-offset-10 { - margin-left: 83.33333333%; -} -.col-xs-offset-9 { - margin-left: 75%; -} -.col-xs-offset-8 { - margin-left: 66.66666667%; -} -.col-xs-offset-7 { - margin-left: 58.33333333%; -} -.col-xs-offset-6 { - margin-left: 50%; -} -.col-xs-offset-5 { - margin-left: 41.66666667%; -} -.col-xs-offset-4 { - margin-left: 33.33333333%; -} -.col-xs-offset-3 { - margin-left: 25%; -} -.col-xs-offset-2 { - margin-left: 16.66666667%; -} -.col-xs-offset-1 { - margin-left: 8.33333333%; -} -.col-xs-offset-0 { - margin-left: 0%; -} -@media (min-width: 768px) { - .col-sm-1, - .col-sm-2, - .col-sm-3, - .col-sm-4, - .col-sm-5, - .col-sm-6, - .col-sm-7, - .col-sm-8, - .col-sm-9, - .col-sm-10, - .col-sm-11, - .col-sm-12 { - float: left; - } - .col-sm-12 { - width: 100%; - } - .col-sm-11 { - width: 91.66666667%; - } - .col-sm-10 { - width: 83.33333333%; - } - .col-sm-9 { - width: 75%; - } - .col-sm-8 { - width: 66.66666667%; - } - .col-sm-7 { - width: 58.33333333%; - } - .col-sm-6 { - width: 50%; - } - .col-sm-5 { - width: 41.66666667%; - } - .col-sm-4 { - width: 33.33333333%; - } - .col-sm-3 { - width: 25%; - } - .col-sm-2 { - width: 16.66666667%; - } - .col-sm-1 { - width: 8.33333333%; - } - .col-sm-pull-12 { - right: 100%; - } - .col-sm-pull-11 { - right: 91.66666667%; - } - .col-sm-pull-10 { - right: 83.33333333%; - } - .col-sm-pull-9 { - right: 75%; - } - .col-sm-pull-8 { - right: 66.66666667%; - } - .col-sm-pull-7 { - right: 58.33333333%; - } - .col-sm-pull-6 { - right: 50%; - } - .col-sm-pull-5 { - right: 41.66666667%; - } - .col-sm-pull-4 { - right: 33.33333333%; - } - .col-sm-pull-3 { - right: 25%; - } - .col-sm-pull-2 { - right: 16.66666667%; - } - .col-sm-pull-1 { - right: 8.33333333%; - } - .col-sm-pull-0 { - right: auto; - } - .col-sm-push-12 { - left: 100%; - } - .col-sm-push-11 { - left: 91.66666667%; - } - .col-sm-push-10 { - left: 83.33333333%; - } - .col-sm-push-9 { - left: 75%; - } - .col-sm-push-8 { - left: 66.66666667%; - } - .col-sm-push-7 { - left: 58.33333333%; - } - .col-sm-push-6 { - left: 50%; - } - .col-sm-push-5 { - left: 41.66666667%; - } - .col-sm-push-4 { - left: 33.33333333%; - } - .col-sm-push-3 { - left: 25%; - } - .col-sm-push-2 { - left: 16.66666667%; - } - .col-sm-push-1 { - left: 8.33333333%; - } - .col-sm-push-0 { - left: auto; - } - .col-sm-offset-12 { - margin-left: 100%; - } - .col-sm-offset-11 { - margin-left: 91.66666667%; - } - .col-sm-offset-10 { - margin-left: 83.33333333%; - } - .col-sm-offset-9 { - margin-left: 75%; - } - .col-sm-offset-8 { - margin-left: 66.66666667%; - } - .col-sm-offset-7 { - margin-left: 58.33333333%; - } - .col-sm-offset-6 { - margin-left: 50%; - } - .col-sm-offset-5 { - margin-left: 41.66666667%; - } - .col-sm-offset-4 { - margin-left: 33.33333333%; - } - .col-sm-offset-3 { - margin-left: 25%; - } - .col-sm-offset-2 { - margin-left: 16.66666667%; - } - .col-sm-offset-1 { - margin-left: 8.33333333%; - } - .col-sm-offset-0 { - margin-left: 0%; - } -} -@media (min-width: 992px) { - .col-md-1, - .col-md-2, - .col-md-3, - .col-md-4, - .col-md-5, - .col-md-6, - .col-md-7, - .col-md-8, - .col-md-9, - .col-md-10, - .col-md-11, - .col-md-12 { - float: left; - } - .col-md-12 { - width: 100%; - } - .col-md-11 { - width: 91.66666667%; - } - .col-md-10 { - width: 83.33333333%; - } - .col-md-9 { - width: 75%; - } - .col-md-8 { - width: 66.66666667%; - } - .col-md-7 { - width: 58.33333333%; - } - .col-md-6 { - width: 50%; - } - .col-md-5 { - width: 41.66666667%; - } - .col-md-4 { - width: 33.33333333%; - } - .col-md-3 { - width: 25%; - } - .col-md-2 { - width: 16.66666667%; - } - .col-md-1 { - width: 8.33333333%; - } - .col-md-pull-12 { - right: 100%; - } - .col-md-pull-11 { - right: 91.66666667%; - } - .col-md-pull-10 { - right: 83.33333333%; - } - .col-md-pull-9 { - right: 75%; - } - .col-md-pull-8 { - right: 66.66666667%; - } - .col-md-pull-7 { - right: 58.33333333%; - } - .col-md-pull-6 { - right: 50%; - } - .col-md-pull-5 { - right: 41.66666667%; - } - .col-md-pull-4 { - right: 33.33333333%; - } - .col-md-pull-3 { - right: 25%; - } - .col-md-pull-2 { - right: 16.66666667%; - } - .col-md-pull-1 { - right: 8.33333333%; - } - .col-md-pull-0 { - right: auto; - } - .col-md-push-12 { - left: 100%; - } - .col-md-push-11 { - left: 91.66666667%; - } - .col-md-push-10 { - left: 83.33333333%; - } - .col-md-push-9 { - left: 75%; - } - .col-md-push-8 { - left: 66.66666667%; - } - .col-md-push-7 { - left: 58.33333333%; - } - .col-md-push-6 { - left: 50%; - } - .col-md-push-5 { - left: 41.66666667%; - } - .col-md-push-4 { - left: 33.33333333%; - } - .col-md-push-3 { - left: 25%; - } - .col-md-push-2 { - left: 16.66666667%; - } - .col-md-push-1 { - left: 8.33333333%; - } - .col-md-push-0 { - left: auto; - } - .col-md-offset-12 { - margin-left: 100%; - } - .col-md-offset-11 { - margin-left: 91.66666667%; - } - .col-md-offset-10 { - margin-left: 83.33333333%; - } - .col-md-offset-9 { - margin-left: 75%; - } - .col-md-offset-8 { - margin-left: 66.66666667%; - } - .col-md-offset-7 { - margin-left: 58.33333333%; - } - .col-md-offset-6 { - margin-left: 50%; - } - .col-md-offset-5 { - margin-left: 41.66666667%; - } - .col-md-offset-4 { - margin-left: 33.33333333%; - } - .col-md-offset-3 { - margin-left: 25%; - } - .col-md-offset-2 { - margin-left: 16.66666667%; - } - .col-md-offset-1 { - margin-left: 8.33333333%; - } - .col-md-offset-0 { - margin-left: 0%; - } -} -@media (min-width: 1200px) { - .col-lg-1, - .col-lg-2, - .col-lg-3, - .col-lg-4, - .col-lg-5, - .col-lg-6, - .col-lg-7, - .col-lg-8, - .col-lg-9, - .col-lg-10, - .col-lg-11, - .col-lg-12 { - float: left; - } - .col-lg-12 { - width: 100%; - } - .col-lg-11 { - width: 91.66666667%; - } - .col-lg-10 { - width: 83.33333333%; - } - .col-lg-9 { - width: 75%; - } - .col-lg-8 { - width: 66.66666667%; - } - .col-lg-7 { - width: 58.33333333%; - } - .col-lg-6 { - width: 50%; - } - .col-lg-5 { - width: 41.66666667%; - } - .col-lg-4 { - width: 33.33333333%; - } - .col-lg-3 { - width: 25%; - } - .col-lg-2 { - width: 16.66666667%; - } - .col-lg-1 { - width: 8.33333333%; - } - .col-lg-pull-12 { - right: 100%; - } - .col-lg-pull-11 { - right: 91.66666667%; - } - .col-lg-pull-10 { - right: 83.33333333%; - } - .col-lg-pull-9 { - right: 75%; - } - .col-lg-pull-8 { - right: 66.66666667%; - } - .col-lg-pull-7 { - right: 58.33333333%; - } - .col-lg-pull-6 { - right: 50%; - } - .col-lg-pull-5 { - right: 41.66666667%; - } - .col-lg-pull-4 { - right: 33.33333333%; - } - .col-lg-pull-3 { - right: 25%; - } - .col-lg-pull-2 { - right: 16.66666667%; - } - .col-lg-pull-1 { - right: 8.33333333%; - } - .col-lg-pull-0 { - right: auto; - } - .col-lg-push-12 { - left: 100%; - } - .col-lg-push-11 { - left: 91.66666667%; - } - .col-lg-push-10 { - left: 83.33333333%; - } - .col-lg-push-9 { - left: 75%; - } - .col-lg-push-8 { - left: 66.66666667%; - } - .col-lg-push-7 { - left: 58.33333333%; - } - .col-lg-push-6 { - left: 50%; - } - .col-lg-push-5 { - left: 41.66666667%; - } - .col-lg-push-4 { - left: 33.33333333%; - } - .col-lg-push-3 { - left: 25%; - } - .col-lg-push-2 { - left: 16.66666667%; - } - .col-lg-push-1 { - left: 8.33333333%; - } - .col-lg-push-0 { - left: auto; - } - .col-lg-offset-12 { - margin-left: 100%; - } - .col-lg-offset-11 { - margin-left: 91.66666667%; - } - .col-lg-offset-10 { - margin-left: 83.33333333%; - } - .col-lg-offset-9 { - margin-left: 75%; - } - .col-lg-offset-8 { - margin-left: 66.66666667%; - } - .col-lg-offset-7 { - margin-left: 58.33333333%; - } - .col-lg-offset-6 { - margin-left: 50%; - } - .col-lg-offset-5 { - margin-left: 41.66666667%; - } - .col-lg-offset-4 { - margin-left: 33.33333333%; - } - .col-lg-offset-3 { - margin-left: 25%; - } - .col-lg-offset-2 { - margin-left: 16.66666667%; - } - .col-lg-offset-1 { - margin-left: 8.33333333%; - } - .col-lg-offset-0 { - margin-left: 0%; - } -} -table { - background-color: transparent; -} -table col[class*="col-"] { - position: static; - display: table-column; - float: none; -} -table td[class*="col-"], -table th[class*="col-"] { - position: static; - display: table-cell; - float: none; -} -caption { - padding-top: 8px; - padding-bottom: 8px; - color: #777777; - text-align: left; -} -th { - text-align: left; -} -.table { - width: 100%; - max-width: 100%; - margin-bottom: 20px; -} -.table > thead > tr > th, -.table > tbody > tr > th, -.table > tfoot > tr > th, -.table > thead > tr > td, -.table > tbody > tr > td, -.table > tfoot > tr > td { - padding: 8px; - line-height: 1.42857143; - vertical-align: top; - border-top: 1px solid #ddd; -} -.table > thead > tr > th { - vertical-align: bottom; - border-bottom: 2px solid #ddd; -} -.table > caption + thead > tr:first-child > th, -.table > colgroup + thead > tr:first-child > th, -.table > thead:first-child > tr:first-child > th, -.table > caption + thead > tr:first-child > td, -.table > colgroup + thead > tr:first-child > td, -.table > thead:first-child > tr:first-child > td { - border-top: 0; -} -.table > tbody + tbody { - border-top: 2px solid #ddd; -} -.table .table { - background-color: #fff; -} -.table-condensed > thead > tr > th, -.table-condensed > tbody > tr > th, -.table-condensed > tfoot > tr > th, -.table-condensed > thead > tr > td, -.table-condensed > tbody > tr > td, -.table-condensed > tfoot > tr > td { - padding: 5px; -} -.table-bordered { - border: 1px solid #ddd; -} -.table-bordered > thead > tr > th, -.table-bordered > tbody > tr > th, -.table-bordered > tfoot > tr > th, -.table-bordered > thead > tr > td, -.table-bordered > tbody > tr > td, -.table-bordered > tfoot > tr > td { - border: 1px solid #ddd; -} -.table-bordered > thead > tr > th, -.table-bordered > thead > tr > td { - border-bottom-width: 2px; -} -.table-striped > tbody > tr:nth-of-type(odd) { - background-color: #f9f9f9; -} -.table-hover > tbody > tr:hover { - background-color: #f5f5f5; -} -.table > thead > tr > td.active, -.table > tbody > tr > td.active, -.table > tfoot > tr > td.active, -.table > thead > tr > th.active, -.table > tbody > tr > th.active, -.table > tfoot > tr > th.active, -.table > thead > tr.active > td, -.table > tbody > tr.active > td, -.table > tfoot > tr.active > td, -.table > thead > tr.active > th, -.table > tbody > tr.active > th, -.table > tfoot > tr.active > th { - background-color: #f5f5f5; -} -.table-hover > tbody > tr > td.active:hover, -.table-hover > tbody > tr > th.active:hover, -.table-hover > tbody > tr.active:hover > td, -.table-hover > tbody > tr:hover > .active, -.table-hover > tbody > tr.active:hover > th { - background-color: #e8e8e8; -} -.table > thead > tr > td.success, -.table > tbody > tr > td.success, -.table > tfoot > tr > td.success, -.table > thead > tr > th.success, -.table > tbody > tr > th.success, -.table > tfoot > tr > th.success, -.table > thead > tr.success > td, -.table > tbody > tr.success > td, -.table > tfoot > tr.success > td, -.table > thead > tr.success > th, -.table > tbody > tr.success > th, -.table > tfoot > tr.success > th { - background-color: #dff0d8; -} -.table-hover > tbody > tr > td.success:hover, -.table-hover > tbody > tr > th.success:hover, -.table-hover > tbody > tr.success:hover > td, -.table-hover > tbody > tr:hover > .success, -.table-hover > tbody > tr.success:hover > th { - background-color: #d0e9c6; -} -.table > thead > tr > td.info, -.table > tbody > tr > td.info, -.table > tfoot > tr > td.info, -.table > thead > tr > th.info, -.table > tbody > tr > th.info, -.table > tfoot > tr > th.info, -.table > thead > tr.info > td, -.table > tbody > tr.info > td, -.table > tfoot > tr.info > td, -.table > thead > tr.info > th, -.table > tbody > tr.info > th, -.table > tfoot > tr.info > th { - background-color: #d9edf7; -} -.table-hover > tbody > tr > td.info:hover, -.table-hover > tbody > tr > th.info:hover, -.table-hover > tbody > tr.info:hover > td, -.table-hover > tbody > tr:hover > .info, -.table-hover > tbody > tr.info:hover > th { - background-color: #c4e3f3; -} -.table > thead > tr > td.warning, -.table > tbody > tr > td.warning, -.table > tfoot > tr > td.warning, -.table > thead > tr > th.warning, -.table > tbody > tr > th.warning, -.table > tfoot > tr > th.warning, -.table > thead > tr.warning > td, -.table > tbody > tr.warning > td, -.table > tfoot > tr.warning > td, -.table > thead > tr.warning > th, -.table > tbody > tr.warning > th, -.table > tfoot > tr.warning > th { - background-color: #fcf8e3; -} -.table-hover > tbody > tr > td.warning:hover, -.table-hover > tbody > tr > th.warning:hover, -.table-hover > tbody > tr.warning:hover > td, -.table-hover > tbody > tr:hover > .warning, -.table-hover > tbody > tr.warning:hover > th { - background-color: #faf2cc; -} -.table > thead > tr > td.danger, -.table > tbody > tr > td.danger, -.table > tfoot > tr > td.danger, -.table > thead > tr > th.danger, -.table > tbody > tr > th.danger, -.table > tfoot > tr > th.danger, -.table > thead > tr.danger > td, -.table > tbody > tr.danger > td, -.table > tfoot > tr.danger > td, -.table > thead > tr.danger > th, -.table > tbody > tr.danger > th, -.table > tfoot > tr.danger > th { - background-color: #f2dede; -} -.table-hover > tbody > tr > td.danger:hover, -.table-hover > tbody > tr > th.danger:hover, -.table-hover > tbody > tr.danger:hover > td, -.table-hover > tbody > tr:hover > .danger, -.table-hover > tbody > tr.danger:hover > th { - background-color: #ebcccc; -} -.table-responsive { - min-height: 0.01%; - overflow-x: auto; -} -@media screen and (max-width: 767px) { - .table-responsive { - width: 100%; - margin-bottom: 15px; - overflow-y: hidden; - -ms-overflow-style: -ms-autohiding-scrollbar; - border: 1px solid #ddd; - } - .table-responsive > .table { - margin-bottom: 0; - } - .table-responsive > .table > thead > tr > th, - .table-responsive > .table > tbody > tr > th, - .table-responsive > .table > tfoot > tr > th, - .table-responsive > .table > thead > tr > td, - .table-responsive > .table > tbody > tr > td, - .table-responsive > .table > tfoot > tr > td { - white-space: nowrap; - } - .table-responsive > .table-bordered { - border: 0; - } - .table-responsive > .table-bordered > thead > tr > th:first-child, - .table-responsive > .table-bordered > tbody > tr > th:first-child, - .table-responsive > .table-bordered > tfoot > tr > th:first-child, - .table-responsive > .table-bordered > thead > tr > td:first-child, - .table-responsive > .table-bordered > tbody > tr > td:first-child, - .table-responsive > .table-bordered > tfoot > tr > td:first-child { - border-left: 0; - } - .table-responsive > .table-bordered > thead > tr > th:last-child, - .table-responsive > .table-bordered > tbody > tr > th:last-child, - .table-responsive > .table-bordered > tfoot > tr > th:last-child, - .table-responsive > .table-bordered > thead > tr > td:last-child, - .table-responsive > .table-bordered > tbody > tr > td:last-child, - .table-responsive > .table-bordered > tfoot > tr > td:last-child { - border-right: 0; - } - .table-responsive > .table-bordered > tbody > tr:last-child > th, - .table-responsive > .table-bordered > tfoot > tr:last-child > th, - .table-responsive > .table-bordered > tbody > tr:last-child > td, - .table-responsive > .table-bordered > tfoot > tr:last-child > td { - border-bottom: 0; - } -} -fieldset { - min-width: 0; - padding: 0; - margin: 0; - border: 0; -} -legend { - display: block; - width: 100%; - padding: 0; - margin-bottom: 20px; - font-size: 21px; - line-height: inherit; - color: #333333; - border: 0; - border-bottom: 1px solid #e5e5e5; -} -label { - display: inline-block; - max-width: 100%; - margin-bottom: 5px; - font-weight: 700; -} -input[type="search"] { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; -} -input[type="radio"], -input[type="checkbox"] { - margin: 4px 0 0; - margin-top: 1px \9; - line-height: normal; -} -input[type="radio"][disabled], -input[type="checkbox"][disabled], -input[type="radio"].disabled, -input[type="checkbox"].disabled, -fieldset[disabled] input[type="radio"], -fieldset[disabled] input[type="checkbox"] { - cursor: not-allowed; -} -input[type="file"] { - display: block; -} -input[type="range"] { - display: block; - width: 100%; -} -select[multiple], -select[size] { - height: auto; -} -input[type="file"]:focus, -input[type="radio"]:focus, -input[type="checkbox"]:focus { - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} -output { - display: block; - padding-top: 7px; - font-size: 14px; - line-height: 1.42857143; - color: #555555; -} -.form-control { - display: block; - width: 100%; - height: 34px; - padding: 6px 12px; - font-size: 14px; - line-height: 1.42857143; - color: #555555; - background-color: #fff; - background-image: none; - border: 1px solid #ccc; - border-radius: 4px; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; - -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; - -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s; - transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s; - transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; - transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s, -webkit-box-shadow ease-in-out .15s; -} -.form-control:focus { - border-color: #66afe9; - outline: 0; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, 0.6); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, 0.6); -} -.form-control::-moz-placeholder { - color: #999; - opacity: 1; -} -.form-control:-ms-input-placeholder { - color: #999; -} -.form-control::-webkit-input-placeholder { - color: #999; -} -.form-control::-ms-expand { - background-color: transparent; - border: 0; -} -.form-control[disabled], -.form-control[readonly], -fieldset[disabled] .form-control { - background-color: #eeeeee; - opacity: 1; -} -.form-control[disabled], -fieldset[disabled] .form-control { - cursor: not-allowed; -} -textarea.form-control { - height: auto; -} -@media screen and (-webkit-min-device-pixel-ratio: 0) { - input[type="date"].form-control, - input[type="time"].form-control, - input[type="datetime-local"].form-control, - input[type="month"].form-control { - line-height: 34px; - } - input[type="date"].input-sm, - input[type="time"].input-sm, - input[type="datetime-local"].input-sm, - input[type="month"].input-sm, - .input-group-sm input[type="date"], - .input-group-sm input[type="time"], - .input-group-sm input[type="datetime-local"], - .input-group-sm input[type="month"] { - line-height: 30px; - } - input[type="date"].input-lg, - input[type="time"].input-lg, - input[type="datetime-local"].input-lg, - input[type="month"].input-lg, - .input-group-lg input[type="date"], - .input-group-lg input[type="time"], - .input-group-lg input[type="datetime-local"], - .input-group-lg input[type="month"] { - line-height: 46px; - } -} -.form-group { - margin-bottom: 15px; -} -.radio, -.checkbox { - position: relative; - display: block; - margin-top: 10px; - margin-bottom: 10px; -} -.radio.disabled label, -.checkbox.disabled label, -fieldset[disabled] .radio label, -fieldset[disabled] .checkbox label { - cursor: not-allowed; -} -.radio label, -.checkbox label { - min-height: 20px; - padding-left: 20px; - margin-bottom: 0; - font-weight: 400; - cursor: pointer; -} -.radio input[type="radio"], -.radio-inline input[type="radio"], -.checkbox input[type="checkbox"], -.checkbox-inline input[type="checkbox"] { - position: absolute; - margin-top: 4px \9; - margin-left: -20px; -} -.radio + .radio, -.checkbox + .checkbox { - margin-top: -5px; -} -.radio-inline, -.checkbox-inline { - position: relative; - display: inline-block; - padding-left: 20px; - margin-bottom: 0; - font-weight: 400; - vertical-align: middle; - cursor: pointer; -} -.radio-inline.disabled, -.checkbox-inline.disabled, -fieldset[disabled] .radio-inline, -fieldset[disabled] .checkbox-inline { - cursor: not-allowed; -} -.radio-inline + .radio-inline, -.checkbox-inline + .checkbox-inline { - margin-top: 0; - margin-left: 10px; -} -.form-control-static { - min-height: 34px; - padding-top: 7px; - padding-bottom: 7px; - margin-bottom: 0; -} -.form-control-static.input-lg, -.form-control-static.input-sm { - padding-right: 0; - padding-left: 0; -} -.input-sm { - height: 30px; - padding: 5px 10px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px; -} -select.input-sm { - height: 30px; - line-height: 30px; -} -textarea.input-sm, -select[multiple].input-sm { - height: auto; -} -.form-group-sm .form-control { - height: 30px; - padding: 5px 10px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px; -} -.form-group-sm select.form-control { - height: 30px; - line-height: 30px; -} -.form-group-sm textarea.form-control, -.form-group-sm select[multiple].form-control { - height: auto; -} -.form-group-sm .form-control-static { - height: 30px; - min-height: 32px; - padding: 6px 10px; - font-size: 12px; - line-height: 1.5; -} -.input-lg { - height: 46px; - padding: 10px 16px; - font-size: 18px; - line-height: 1.3333333; - border-radius: 6px; -} -select.input-lg { - height: 46px; - line-height: 46px; -} -textarea.input-lg, -select[multiple].input-lg { - height: auto; -} -.form-group-lg .form-control { - height: 46px; - padding: 10px 16px; - font-size: 18px; - line-height: 1.3333333; - border-radius: 6px; -} -.form-group-lg select.form-control { - height: 46px; - line-height: 46px; -} -.form-group-lg textarea.form-control, -.form-group-lg select[multiple].form-control { - height: auto; -} -.form-group-lg .form-control-static { - height: 46px; - min-height: 38px; - padding: 11px 16px; - font-size: 18px; - line-height: 1.3333333; -} -.has-feedback { - position: relative; -} -.has-feedback .form-control { - padding-right: 42.5px; -} -.form-control-feedback { - position: absolute; - top: 0; - right: 0; - z-index: 2; - display: block; - width: 34px; - height: 34px; - line-height: 34px; - text-align: center; - pointer-events: none; -} -.input-lg + .form-control-feedback, -.input-group-lg + .form-control-feedback, -.form-group-lg .form-control + .form-control-feedback { - width: 46px; - height: 46px; - line-height: 46px; -} -.input-sm + .form-control-feedback, -.input-group-sm + .form-control-feedback, -.form-group-sm .form-control + .form-control-feedback { - width: 30px; - height: 30px; - line-height: 30px; -} -.has-success .help-block, -.has-success .control-label, -.has-success .radio, -.has-success .checkbox, -.has-success .radio-inline, -.has-success .checkbox-inline, -.has-success.radio label, -.has-success.checkbox label, -.has-success.radio-inline label, -.has-success.checkbox-inline label { - color: #3c763d; -} -.has-success .form-control { - border-color: #3c763d; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} -.has-success .form-control:focus { - border-color: #2b542c; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168; -} -.has-success .input-group-addon { - color: #3c763d; - background-color: #dff0d8; - border-color: #3c763d; -} -.has-success .form-control-feedback { - color: #3c763d; -} -.has-warning .help-block, -.has-warning .control-label, -.has-warning .radio, -.has-warning .checkbox, -.has-warning .radio-inline, -.has-warning .checkbox-inline, -.has-warning.radio label, -.has-warning.checkbox label, -.has-warning.radio-inline label, -.has-warning.checkbox-inline label { - color: #8a6d3b; -} -.has-warning .form-control { - border-color: #8a6d3b; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} -.has-warning .form-control:focus { - border-color: #66512c; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b; -} -.has-warning .input-group-addon { - color: #8a6d3b; - background-color: #fcf8e3; - border-color: #8a6d3b; -} -.has-warning .form-control-feedback { - color: #8a6d3b; -} -.has-error .help-block, -.has-error .control-label, -.has-error .radio, -.has-error .checkbox, -.has-error .radio-inline, -.has-error .checkbox-inline, -.has-error.radio label, -.has-error.checkbox label, -.has-error.radio-inline label, -.has-error.checkbox-inline label { - color: #a94442; -} -.has-error .form-control { - border-color: #a94442; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} -.has-error .form-control:focus { - border-color: #843534; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483; -} -.has-error .input-group-addon { - color: #a94442; - background-color: #f2dede; - border-color: #a94442; -} -.has-error .form-control-feedback { - color: #a94442; -} -.has-feedback label ~ .form-control-feedback { - top: 25px; -} -.has-feedback label.sr-only ~ .form-control-feedback { - top: 0; -} -.help-block { - display: block; - margin-top: 5px; - margin-bottom: 10px; - color: #737373; -} -@media (min-width: 768px) { - .form-inline .form-group { - display: inline-block; - margin-bottom: 0; - vertical-align: middle; - } - .form-inline .form-control { - display: inline-block; - width: auto; - vertical-align: middle; - } - .form-inline .form-control-static { - display: inline-block; - } - .form-inline .input-group { - display: inline-table; - vertical-align: middle; - } - .form-inline .input-group .input-group-addon, - .form-inline .input-group .input-group-btn, - .form-inline .input-group .form-control { - width: auto; - } - .form-inline .input-group > .form-control { - width: 100%; - } - .form-inline .control-label { - margin-bottom: 0; - vertical-align: middle; - } - .form-inline .radio, - .form-inline .checkbox { - display: inline-block; - margin-top: 0; - margin-bottom: 0; - vertical-align: middle; - } - .form-inline .radio label, - .form-inline .checkbox label { - padding-left: 0; - } - .form-inline .radio input[type="radio"], - .form-inline .checkbox input[type="checkbox"] { - position: relative; - margin-left: 0; - } - .form-inline .has-feedback .form-control-feedback { - top: 0; - } -} -.form-horizontal .radio, -.form-horizontal .checkbox, -.form-horizontal .radio-inline, -.form-horizontal .checkbox-inline { - padding-top: 7px; - margin-top: 0; - margin-bottom: 0; -} -.form-horizontal .radio, -.form-horizontal .checkbox { - min-height: 27px; -} -.form-horizontal .form-group { - margin-right: -15px; - margin-left: -15px; -} -@media (min-width: 768px) { - .form-horizontal .control-label { - padding-top: 7px; - margin-bottom: 0; - text-align: right; - } -} -.form-horizontal .has-feedback .form-control-feedback { - right: 15px; -} -@media (min-width: 768px) { - .form-horizontal .form-group-lg .control-label { - padding-top: 11px; - font-size: 18px; - } -} -@media (min-width: 768px) { - .form-horizontal .form-group-sm .control-label { - padding-top: 6px; - font-size: 12px; - } -} -.btn { - display: inline-block; - margin-bottom: 0; - font-weight: normal; - text-align: center; - white-space: nowrap; - vertical-align: middle; - -ms-touch-action: manipulation; - touch-action: manipulation; - cursor: pointer; - background-image: none; - border: 1px solid transparent; - padding: 6px 12px; - font-size: 14px; - line-height: 1.42857143; - border-radius: 4px; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} -.btn:focus, -.btn:active:focus, -.btn.active:focus, -.btn.focus, -.btn:active.focus, -.btn.active.focus { - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} -.btn:hover, -.btn:focus, -.btn.focus { - color: #333; - text-decoration: none; -} -.btn:active, -.btn.active { - background-image: none; - outline: 0; - -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); - box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); -} -.btn.disabled, -.btn[disabled], -fieldset[disabled] .btn { - cursor: not-allowed; - filter: alpha(opacity=65); - opacity: 0.65; - -webkit-box-shadow: none; - box-shadow: none; -} -a.btn.disabled, -fieldset[disabled] a.btn { - pointer-events: none; -} -.btn-default { - color: #333; - background-color: #fff; - border-color: #ccc; -} -.btn-default:focus, -.btn-default.focus { - color: #333; - background-color: #e6e6e6; - border-color: #8c8c8c; -} -.btn-default:hover { - color: #333; - background-color: #e6e6e6; - border-color: #adadad; -} -.btn-default:active, -.btn-default.active, -.open > .dropdown-toggle.btn-default { - color: #333; - background-color: #e6e6e6; - background-image: none; - border-color: #adadad; -} -.btn-default:active:hover, -.btn-default.active:hover, -.open > .dropdown-toggle.btn-default:hover, -.btn-default:active:focus, -.btn-default.active:focus, -.open > .dropdown-toggle.btn-default:focus, -.btn-default:active.focus, -.btn-default.active.focus, -.open > .dropdown-toggle.btn-default.focus { - color: #333; - background-color: #d4d4d4; - border-color: #8c8c8c; -} -.btn-default.disabled:hover, -.btn-default[disabled]:hover, -fieldset[disabled] .btn-default:hover, -.btn-default.disabled:focus, -.btn-default[disabled]:focus, -fieldset[disabled] .btn-default:focus, -.btn-default.disabled.focus, -.btn-default[disabled].focus, -fieldset[disabled] .btn-default.focus { - background-color: #fff; - border-color: #ccc; -} -.btn-default .badge { - color: #fff; - background-color: #333; -} -.btn-primary { - color: #fff; - background-color: #337ab7; - border-color: #2e6da4; -} -.btn-primary:focus, -.btn-primary.focus { - color: #fff; - background-color: #286090; - border-color: #122b40; -} -.btn-primary:hover { - color: #fff; - background-color: #286090; - border-color: #204d74; -} -.btn-primary:active, -.btn-primary.active, -.open > .dropdown-toggle.btn-primary { - color: #fff; - background-color: #286090; - background-image: none; - border-color: #204d74; -} -.btn-primary:active:hover, -.btn-primary.active:hover, -.open > .dropdown-toggle.btn-primary:hover, -.btn-primary:active:focus, -.btn-primary.active:focus, -.open > .dropdown-toggle.btn-primary:focus, -.btn-primary:active.focus, -.btn-primary.active.focus, -.open > .dropdown-toggle.btn-primary.focus { - color: #fff; - background-color: #204d74; - border-color: #122b40; -} -.btn-primary.disabled:hover, -.btn-primary[disabled]:hover, -fieldset[disabled] .btn-primary:hover, -.btn-primary.disabled:focus, -.btn-primary[disabled]:focus, -fieldset[disabled] .btn-primary:focus, -.btn-primary.disabled.focus, -.btn-primary[disabled].focus, -fieldset[disabled] .btn-primary.focus { - background-color: #337ab7; - border-color: #2e6da4; -} -.btn-primary .badge { - color: #337ab7; - background-color: #fff; -} -.btn-success { - color: #fff; - background-color: #5cb85c; - border-color: #4cae4c; -} -.btn-success:focus, -.btn-success.focus { - color: #fff; - background-color: #449d44; - border-color: #255625; -} -.btn-success:hover { - color: #fff; - background-color: #449d44; - border-color: #398439; -} -.btn-success:active, -.btn-success.active, -.open > .dropdown-toggle.btn-success { - color: #fff; - background-color: #449d44; - background-image: none; - border-color: #398439; -} -.btn-success:active:hover, -.btn-success.active:hover, -.open > .dropdown-toggle.btn-success:hover, -.btn-success:active:focus, -.btn-success.active:focus, -.open > .dropdown-toggle.btn-success:focus, -.btn-success:active.focus, -.btn-success.active.focus, -.open > .dropdown-toggle.btn-success.focus { - color: #fff; - background-color: #398439; - border-color: #255625; -} -.btn-success.disabled:hover, -.btn-success[disabled]:hover, -fieldset[disabled] .btn-success:hover, -.btn-success.disabled:focus, -.btn-success[disabled]:focus, -fieldset[disabled] .btn-success:focus, -.btn-success.disabled.focus, -.btn-success[disabled].focus, -fieldset[disabled] .btn-success.focus { - background-color: #5cb85c; - border-color: #4cae4c; -} -.btn-success .badge { - color: #5cb85c; - background-color: #fff; -} -.btn-info { - color: #fff; - background-color: #5bc0de; - border-color: #46b8da; -} -.btn-info:focus, -.btn-info.focus { - color: #fff; - background-color: #31b0d5; - border-color: #1b6d85; -} -.btn-info:hover { - color: #fff; - background-color: #31b0d5; - border-color: #269abc; -} -.btn-info:active, -.btn-info.active, -.open > .dropdown-toggle.btn-info { - color: #fff; - background-color: #31b0d5; - background-image: none; - border-color: #269abc; -} -.btn-info:active:hover, -.btn-info.active:hover, -.open > .dropdown-toggle.btn-info:hover, -.btn-info:active:focus, -.btn-info.active:focus, -.open > .dropdown-toggle.btn-info:focus, -.btn-info:active.focus, -.btn-info.active.focus, -.open > .dropdown-toggle.btn-info.focus { - color: #fff; - background-color: #269abc; - border-color: #1b6d85; -} -.btn-info.disabled:hover, -.btn-info[disabled]:hover, -fieldset[disabled] .btn-info:hover, -.btn-info.disabled:focus, -.btn-info[disabled]:focus, -fieldset[disabled] .btn-info:focus, -.btn-info.disabled.focus, -.btn-info[disabled].focus, -fieldset[disabled] .btn-info.focus { - background-color: #5bc0de; - border-color: #46b8da; -} -.btn-info .badge { - color: #5bc0de; - background-color: #fff; -} -.btn-warning { - color: #fff; - background-color: #f0ad4e; - border-color: #eea236; -} -.btn-warning:focus, -.btn-warning.focus { - color: #fff; - background-color: #ec971f; - border-color: #985f0d; -} -.btn-warning:hover { - color: #fff; - background-color: #ec971f; - border-color: #d58512; -} -.btn-warning:active, -.btn-warning.active, -.open > .dropdown-toggle.btn-warning { - color: #fff; - background-color: #ec971f; - background-image: none; - border-color: #d58512; -} -.btn-warning:active:hover, -.btn-warning.active:hover, -.open > .dropdown-toggle.btn-warning:hover, -.btn-warning:active:focus, -.btn-warning.active:focus, -.open > .dropdown-toggle.btn-warning:focus, -.btn-warning:active.focus, -.btn-warning.active.focus, -.open > .dropdown-toggle.btn-warning.focus { - color: #fff; - background-color: #d58512; - border-color: #985f0d; -} -.btn-warning.disabled:hover, -.btn-warning[disabled]:hover, -fieldset[disabled] .btn-warning:hover, -.btn-warning.disabled:focus, -.btn-warning[disabled]:focus, -fieldset[disabled] .btn-warning:focus, -.btn-warning.disabled.focus, -.btn-warning[disabled].focus, -fieldset[disabled] .btn-warning.focus { - background-color: #f0ad4e; - border-color: #eea236; -} -.btn-warning .badge { - color: #f0ad4e; - background-color: #fff; -} -.btn-danger { - color: #fff; - background-color: #d9534f; - border-color: #d43f3a; -} -.btn-danger:focus, -.btn-danger.focus { - color: #fff; - background-color: #c9302c; - border-color: #761c19; -} -.btn-danger:hover { - color: #fff; - background-color: #c9302c; - border-color: #ac2925; -} -.btn-danger:active, -.btn-danger.active, -.open > .dropdown-toggle.btn-danger { - color: #fff; - background-color: #c9302c; - background-image: none; - border-color: #ac2925; -} -.btn-danger:active:hover, -.btn-danger.active:hover, -.open > .dropdown-toggle.btn-danger:hover, -.btn-danger:active:focus, -.btn-danger.active:focus, -.open > .dropdown-toggle.btn-danger:focus, -.btn-danger:active.focus, -.btn-danger.active.focus, -.open > .dropdown-toggle.btn-danger.focus { - color: #fff; - background-color: #ac2925; - border-color: #761c19; -} -.btn-danger.disabled:hover, -.btn-danger[disabled]:hover, -fieldset[disabled] .btn-danger:hover, -.btn-danger.disabled:focus, -.btn-danger[disabled]:focus, -fieldset[disabled] .btn-danger:focus, -.btn-danger.disabled.focus, -.btn-danger[disabled].focus, -fieldset[disabled] .btn-danger.focus { - background-color: #d9534f; - border-color: #d43f3a; -} -.btn-danger .badge { - color: #d9534f; - background-color: #fff; -} -.btn-link { - font-weight: 400; - color: #337ab7; - border-radius: 0; -} -.btn-link, -.btn-link:active, -.btn-link.active, -.btn-link[disabled], -fieldset[disabled] .btn-link { - background-color: transparent; - -webkit-box-shadow: none; - box-shadow: none; -} -.btn-link, -.btn-link:hover, -.btn-link:focus, -.btn-link:active { - border-color: transparent; -} -.btn-link:hover, -.btn-link:focus { - color: #23527c; - text-decoration: underline; - background-color: transparent; -} -.btn-link[disabled]:hover, -fieldset[disabled] .btn-link:hover, -.btn-link[disabled]:focus, -fieldset[disabled] .btn-link:focus { - color: #777777; - text-decoration: none; -} -.btn-lg, -.btn-group-lg > .btn { - padding: 10px 16px; - font-size: 18px; - line-height: 1.3333333; - border-radius: 6px; -} -.btn-sm, -.btn-group-sm > .btn { - padding: 5px 10px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px; -} -.btn-xs, -.btn-group-xs > .btn { - padding: 1px 5px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px; -} -.btn-block { - display: block; - width: 100%; -} -.btn-block + .btn-block { - margin-top: 5px; -} -input[type="submit"].btn-block, -input[type="reset"].btn-block, -input[type="button"].btn-block { - width: 100%; -} -.fade { - opacity: 0; - -webkit-transition: opacity 0.15s linear; - -o-transition: opacity 0.15s linear; - transition: opacity 0.15s linear; -} -.fade.in { - opacity: 1; -} -.collapse { - display: none; -} -.collapse.in { - display: block; -} -tr.collapse.in { - display: table-row; -} -tbody.collapse.in { - display: table-row-group; -} -.collapsing { - position: relative; - height: 0; - overflow: hidden; - -webkit-transition-property: height, visibility; - -o-transition-property: height, visibility; - transition-property: height, visibility; - -webkit-transition-duration: 0.35s; - -o-transition-duration: 0.35s; - transition-duration: 0.35s; - -webkit-transition-timing-function: ease; - -o-transition-timing-function: ease; - transition-timing-function: ease; -} -.caret { - display: inline-block; - width: 0; - height: 0; - margin-left: 2px; - vertical-align: middle; - border-top: 4px dashed; - border-top: 4px solid \9; - border-right: 4px solid transparent; - border-left: 4px solid transparent; -} -.dropup, -.dropdown { - position: relative; -} -.dropdown-toggle:focus { - outline: 0; -} -.dropdown-menu { - position: absolute; - top: 100%; - left: 0; - z-index: 1000; - display: none; - float: left; - min-width: 160px; - padding: 5px 0; - margin: 2px 0 0; - font-size: 14px; - text-align: left; - list-style: none; - background-color: #fff; - background-clip: padding-box; - border: 1px solid #ccc; - border: 1px solid rgba(0, 0, 0, 0.15); - border-radius: 4px; - -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); - box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); -} -.dropdown-menu.pull-right { - right: 0; - left: auto; -} -.dropdown-menu .divider { - height: 1px; - margin: 9px 0; - overflow: hidden; - background-color: #e5e5e5; -} -.dropdown-menu > li > a { - display: block; - padding: 3px 20px; - clear: both; - font-weight: 400; - line-height: 1.42857143; - color: #333333; - white-space: nowrap; -} -.dropdown-menu > li > a:hover, -.dropdown-menu > li > a:focus { - color: #262626; - text-decoration: none; - background-color: #f5f5f5; -} -.dropdown-menu > .active > a, -.dropdown-menu > .active > a:hover, -.dropdown-menu > .active > a:focus { - color: #fff; - text-decoration: none; - background-color: #337ab7; - outline: 0; -} -.dropdown-menu > .disabled > a, -.dropdown-menu > .disabled > a:hover, -.dropdown-menu > .disabled > a:focus { - color: #777777; -} -.dropdown-menu > .disabled > a:hover, -.dropdown-menu > .disabled > a:focus { - text-decoration: none; - cursor: not-allowed; - background-color: transparent; - background-image: none; - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); -} -.open > .dropdown-menu { - display: block; -} -.open > a { - outline: 0; -} -.dropdown-menu-right { - right: 0; - left: auto; -} -.dropdown-menu-left { - right: auto; - left: 0; -} -.dropdown-header { - display: block; - padding: 3px 20px; - font-size: 12px; - line-height: 1.42857143; - color: #777777; - white-space: nowrap; -} -.dropdown-backdrop { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 990; -} -.pull-right > .dropdown-menu { - right: 0; - left: auto; -} -.dropup .caret, -.navbar-fixed-bottom .dropdown .caret { - content: ""; - border-top: 0; - border-bottom: 4px dashed; - border-bottom: 4px solid \9; -} -.dropup .dropdown-menu, -.navbar-fixed-bottom .dropdown .dropdown-menu { - top: auto; - bottom: 100%; - margin-bottom: 2px; -} -@media (min-width: 768px) { - .navbar-right .dropdown-menu { - right: 0; - left: auto; - } - .navbar-right .dropdown-menu-left { - right: auto; - left: 0; - } -} -.btn-group, -.btn-group-vertical { - position: relative; - display: inline-block; - vertical-align: middle; -} -.btn-group > .btn, -.btn-group-vertical > .btn { - position: relative; - float: left; -} -.btn-group > .btn:hover, -.btn-group-vertical > .btn:hover, -.btn-group > .btn:focus, -.btn-group-vertical > .btn:focus, -.btn-group > .btn:active, -.btn-group-vertical > .btn:active, -.btn-group > .btn.active, -.btn-group-vertical > .btn.active { - z-index: 2; -} -.btn-group .btn + .btn, -.btn-group .btn + .btn-group, -.btn-group .btn-group + .btn, -.btn-group .btn-group + .btn-group { - margin-left: -1px; -} -.btn-toolbar { - margin-left: -5px; -} -.btn-toolbar .btn, -.btn-toolbar .btn-group, -.btn-toolbar .input-group { - float: left; -} -.btn-toolbar > .btn, -.btn-toolbar > .btn-group, -.btn-toolbar > .input-group { - margin-left: 5px; -} -.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { - border-radius: 0; -} -.btn-group > .btn:first-child { - margin-left: 0; -} -.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) { - border-top-right-radius: 0; - border-bottom-right-radius: 0; -} -.btn-group > .btn:last-child:not(:first-child), -.btn-group > .dropdown-toggle:not(:first-child) { - border-top-left-radius: 0; - border-bottom-left-radius: 0; -} -.btn-group > .btn-group { - float: left; -} -.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { - border-radius: 0; -} -.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child, -.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle { - border-top-right-radius: 0; - border-bottom-right-radius: 0; -} -.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child { - border-top-left-radius: 0; - border-bottom-left-radius: 0; -} -.btn-group .dropdown-toggle:active, -.btn-group.open .dropdown-toggle { - outline: 0; -} -.btn-group > .btn + .dropdown-toggle { - padding-right: 8px; - padding-left: 8px; -} -.btn-group > .btn-lg + .dropdown-toggle { - padding-right: 12px; - padding-left: 12px; -} -.btn-group.open .dropdown-toggle { - -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); - box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); -} -.btn-group.open .dropdown-toggle.btn-link { - -webkit-box-shadow: none; - box-shadow: none; -} -.btn .caret { - margin-left: 0; -} -.btn-lg .caret { - border-width: 5px 5px 0; - border-bottom-width: 0; -} -.dropup .btn-lg .caret { - border-width: 0 5px 5px; -} -.btn-group-vertical > .btn, -.btn-group-vertical > .btn-group, -.btn-group-vertical > .btn-group > .btn { - display: block; - float: none; - width: 100%; - max-width: 100%; -} -.btn-group-vertical > .btn-group > .btn { - float: none; -} -.btn-group-vertical > .btn + .btn, -.btn-group-vertical > .btn + .btn-group, -.btn-group-vertical > .btn-group + .btn, -.btn-group-vertical > .btn-group + .btn-group { - margin-top: -1px; - margin-left: 0; -} -.btn-group-vertical > .btn:not(:first-child):not(:last-child) { - border-radius: 0; -} -.btn-group-vertical > .btn:first-child:not(:last-child) { - border-top-left-radius: 4px; - border-top-right-radius: 4px; - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; -} -.btn-group-vertical > .btn:last-child:not(:first-child) { - border-top-left-radius: 0; - border-top-right-radius: 0; - border-bottom-right-radius: 4px; - border-bottom-left-radius: 4px; -} -.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { - border-radius: 0; -} -.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child, -.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle { - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; -} -.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child { - border-top-left-radius: 0; - border-top-right-radius: 0; -} -.btn-group-justified { - display: table; - width: 100%; - table-layout: fixed; - border-collapse: separate; -} -.btn-group-justified > .btn, -.btn-group-justified > .btn-group { - display: table-cell; - float: none; - width: 1%; -} -.btn-group-justified > .btn-group .btn { - width: 100%; -} -.btn-group-justified > .btn-group .dropdown-menu { - left: auto; -} -[data-toggle="buttons"] > .btn input[type="radio"], -[data-toggle="buttons"] > .btn-group > .btn input[type="radio"], -[data-toggle="buttons"] > .btn input[type="checkbox"], -[data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] { - position: absolute; - clip: rect(0, 0, 0, 0); - pointer-events: none; -} -.input-group { - position: relative; - display: table; - border-collapse: separate; -} -.input-group[class*="col-"] { - float: none; - padding-right: 0; - padding-left: 0; -} -.input-group .form-control { - position: relative; - z-index: 2; - float: left; - width: 100%; - margin-bottom: 0; -} -.input-group .form-control:focus { - z-index: 3; -} -.input-group-lg > .form-control, -.input-group-lg > .input-group-addon, -.input-group-lg > .input-group-btn > .btn { - height: 46px; - padding: 10px 16px; - font-size: 18px; - line-height: 1.3333333; - border-radius: 6px; -} -select.input-group-lg > .form-control, -select.input-group-lg > .input-group-addon, -select.input-group-lg > .input-group-btn > .btn { - height: 46px; - line-height: 46px; -} -textarea.input-group-lg > .form-control, -textarea.input-group-lg > .input-group-addon, -textarea.input-group-lg > .input-group-btn > .btn, -select[multiple].input-group-lg > .form-control, -select[multiple].input-group-lg > .input-group-addon, -select[multiple].input-group-lg > .input-group-btn > .btn { - height: auto; -} -.input-group-sm > .form-control, -.input-group-sm > .input-group-addon, -.input-group-sm > .input-group-btn > .btn { - height: 30px; - padding: 5px 10px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px; -} -select.input-group-sm > .form-control, -select.input-group-sm > .input-group-addon, -select.input-group-sm > .input-group-btn > .btn { - height: 30px; - line-height: 30px; -} -textarea.input-group-sm > .form-control, -textarea.input-group-sm > .input-group-addon, -textarea.input-group-sm > .input-group-btn > .btn, -select[multiple].input-group-sm > .form-control, -select[multiple].input-group-sm > .input-group-addon, -select[multiple].input-group-sm > .input-group-btn > .btn { - height: auto; -} -.input-group-addon, -.input-group-btn, -.input-group .form-control { - display: table-cell; -} -.input-group-addon:not(:first-child):not(:last-child), -.input-group-btn:not(:first-child):not(:last-child), -.input-group .form-control:not(:first-child):not(:last-child) { - border-radius: 0; -} -.input-group-addon, -.input-group-btn { - width: 1%; - white-space: nowrap; - vertical-align: middle; -} -.input-group-addon { - padding: 6px 12px; - font-size: 14px; - font-weight: 400; - line-height: 1; - color: #555555; - text-align: center; - background-color: #eeeeee; - border: 1px solid #ccc; - border-radius: 4px; -} -.input-group-addon.input-sm { - padding: 5px 10px; - font-size: 12px; - border-radius: 3px; -} -.input-group-addon.input-lg { - padding: 10px 16px; - font-size: 18px; - border-radius: 6px; -} -.input-group-addon input[type="radio"], -.input-group-addon input[type="checkbox"] { - margin-top: 0; -} -.input-group .form-control:first-child, -.input-group-addon:first-child, -.input-group-btn:first-child > .btn, -.input-group-btn:first-child > .btn-group > .btn, -.input-group-btn:first-child > .dropdown-toggle, -.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle), -.input-group-btn:last-child > .btn-group:not(:last-child) > .btn { - border-top-right-radius: 0; - border-bottom-right-radius: 0; -} -.input-group-addon:first-child { - border-right: 0; -} -.input-group .form-control:last-child, -.input-group-addon:last-child, -.input-group-btn:last-child > .btn, -.input-group-btn:last-child > .btn-group > .btn, -.input-group-btn:last-child > .dropdown-toggle, -.input-group-btn:first-child > .btn:not(:first-child), -.input-group-btn:first-child > .btn-group:not(:first-child) > .btn { - border-top-left-radius: 0; - border-bottom-left-radius: 0; -} -.input-group-addon:last-child { - border-left: 0; -} -.input-group-btn { - position: relative; - font-size: 0; - white-space: nowrap; -} -.input-group-btn > .btn { - position: relative; -} -.input-group-btn > .btn + .btn { - margin-left: -1px; -} -.input-group-btn > .btn:hover, -.input-group-btn > .btn:focus, -.input-group-btn > .btn:active { - z-index: 2; -} -.input-group-btn:first-child > .btn, -.input-group-btn:first-child > .btn-group { - margin-right: -1px; -} -.input-group-btn:last-child > .btn, -.input-group-btn:last-child > .btn-group { - z-index: 2; - margin-left: -1px; -} -.nav { - padding-left: 0; - margin-bottom: 0; - list-style: none; -} -.nav > li { - position: relative; - display: block; -} -.nav > li > a { - position: relative; - display: block; - padding: 10px 15px; -} -.nav > li > a:hover, -.nav > li > a:focus { - text-decoration: none; - background-color: #eeeeee; -} -.nav > li.disabled > a { - color: #777777; -} -.nav > li.disabled > a:hover, -.nav > li.disabled > a:focus { - color: #777777; - text-decoration: none; - cursor: not-allowed; - background-color: transparent; -} -.nav .open > a, -.nav .open > a:hover, -.nav .open > a:focus { - background-color: #eeeeee; - border-color: #337ab7; -} -.nav .nav-divider { - height: 1px; - margin: 9px 0; - overflow: hidden; - background-color: #e5e5e5; -} -.nav > li > a > img { - max-width: none; -} -.nav-tabs { - border-bottom: 1px solid #ddd; -} -.nav-tabs > li { - float: left; - margin-bottom: -1px; -} -.nav-tabs > li > a { - margin-right: 2px; - line-height: 1.42857143; - border: 1px solid transparent; - border-radius: 4px 4px 0 0; -} -.nav-tabs > li > a:hover { - border-color: #eeeeee #eeeeee #ddd; -} -.nav-tabs > li.active > a, -.nav-tabs > li.active > a:hover, -.nav-tabs > li.active > a:focus { - color: #555555; - cursor: default; - background-color: #fff; - border: 1px solid #ddd; - border-bottom-color: transparent; -} -.nav-tabs.nav-justified { - width: 100%; - border-bottom: 0; -} -.nav-tabs.nav-justified > li { - float: none; -} -.nav-tabs.nav-justified > li > a { - margin-bottom: 5px; - text-align: center; -} -.nav-tabs.nav-justified > .dropdown .dropdown-menu { - top: auto; - left: auto; -} -@media (min-width: 768px) { - .nav-tabs.nav-justified > li { - display: table-cell; - width: 1%; - } - .nav-tabs.nav-justified > li > a { - margin-bottom: 0; - } -} -.nav-tabs.nav-justified > li > a { - margin-right: 0; - border-radius: 4px; -} -.nav-tabs.nav-justified > .active > a, -.nav-tabs.nav-justified > .active > a:hover, -.nav-tabs.nav-justified > .active > a:focus { - border: 1px solid #ddd; -} -@media (min-width: 768px) { - .nav-tabs.nav-justified > li > a { - border-bottom: 1px solid #ddd; - border-radius: 4px 4px 0 0; - } - .nav-tabs.nav-justified > .active > a, - .nav-tabs.nav-justified > .active > a:hover, - .nav-tabs.nav-justified > .active > a:focus { - border-bottom-color: #fff; - } -} -.nav-pills > li { - float: left; -} -.nav-pills > li > a { - border-radius: 4px; -} -.nav-pills > li + li { - margin-left: 2px; -} -.nav-pills > li.active > a, -.nav-pills > li.active > a:hover, -.nav-pills > li.active > a:focus { - color: #fff; - background-color: #337ab7; -} -.nav-stacked > li { - float: none; -} -.nav-stacked > li + li { - margin-top: 2px; - margin-left: 0; -} -.nav-justified { - width: 100%; -} -.nav-justified > li { - float: none; -} -.nav-justified > li > a { - margin-bottom: 5px; - text-align: center; -} -.nav-justified > .dropdown .dropdown-menu { - top: auto; - left: auto; -} -@media (min-width: 768px) { - .nav-justified > li { - display: table-cell; - width: 1%; - } - .nav-justified > li > a { - margin-bottom: 0; - } -} -.nav-tabs-justified { - border-bottom: 0; -} -.nav-tabs-justified > li > a { - margin-right: 0; - border-radius: 4px; -} -.nav-tabs-justified > .active > a, -.nav-tabs-justified > .active > a:hover, -.nav-tabs-justified > .active > a:focus { - border: 1px solid #ddd; -} -@media (min-width: 768px) { - .nav-tabs-justified > li > a { - border-bottom: 1px solid #ddd; - border-radius: 4px 4px 0 0; - } - .nav-tabs-justified > .active > a, - .nav-tabs-justified > .active > a:hover, - .nav-tabs-justified > .active > a:focus { - border-bottom-color: #fff; - } -} -.tab-content > .tab-pane { - display: none; -} -.tab-content > .active { - display: block; -} -.nav-tabs .dropdown-menu { - margin-top: -1px; - border-top-left-radius: 0; - border-top-right-radius: 0; -} -.navbar { - position: relative; - min-height: 50px; - margin-bottom: 20px; - border: 1px solid transparent; -} -@media (min-width: 768px) { - .navbar { - border-radius: 4px; - } -} -@media (min-width: 768px) { - .navbar-header { - float: left; - } -} -.navbar-collapse { - padding-right: 15px; - padding-left: 15px; - overflow-x: visible; - border-top: 1px solid transparent; - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1); - -webkit-overflow-scrolling: touch; -} -.navbar-collapse.in { - overflow-y: auto; -} -@media (min-width: 768px) { - .navbar-collapse { - width: auto; - border-top: 0; - -webkit-box-shadow: none; - box-shadow: none; - } - .navbar-collapse.collapse { - display: block !important; - height: auto !important; - padding-bottom: 0; - overflow: visible !important; - } - .navbar-collapse.in { - overflow-y: visible; - } - .navbar-fixed-top .navbar-collapse, - .navbar-static-top .navbar-collapse, - .navbar-fixed-bottom .navbar-collapse { - padding-right: 0; - padding-left: 0; - } -} -.navbar-fixed-top, -.navbar-fixed-bottom { - position: fixed; - right: 0; - left: 0; - z-index: 1030; -} -.navbar-fixed-top .navbar-collapse, -.navbar-fixed-bottom .navbar-collapse { - max-height: 340px; -} -@media (max-device-width: 480px) and (orientation: landscape) { - .navbar-fixed-top .navbar-collapse, - .navbar-fixed-bottom .navbar-collapse { - max-height: 200px; - } -} -@media (min-width: 768px) { - .navbar-fixed-top, - .navbar-fixed-bottom { - border-radius: 0; - } -} -.navbar-fixed-top { - top: 0; - border-width: 0 0 1px; -} -.navbar-fixed-bottom { - bottom: 0; - margin-bottom: 0; - border-width: 1px 0 0; -} -.container > .navbar-header, -.container-fluid > .navbar-header, -.container > .navbar-collapse, -.container-fluid > .navbar-collapse { - margin-right: -15px; - margin-left: -15px; -} -@media (min-width: 768px) { - .container > .navbar-header, - .container-fluid > .navbar-header, - .container > .navbar-collapse, - .container-fluid > .navbar-collapse { - margin-right: 0; - margin-left: 0; - } -} -.navbar-static-top { - z-index: 1000; - border-width: 0 0 1px; -} -@media (min-width: 768px) { - .navbar-static-top { - border-radius: 0; - } -} -.navbar-brand { - float: left; - height: 50px; - padding: 15px 15px; - font-size: 18px; - line-height: 20px; -} -.navbar-brand:hover, -.navbar-brand:focus { - text-decoration: none; -} -.navbar-brand > img { - display: block; -} -@media (min-width: 768px) { - .navbar > .container .navbar-brand, - .navbar > .container-fluid .navbar-brand { - margin-left: -15px; - } -} -.navbar-toggle { - position: relative; - float: right; - padding: 9px 10px; - margin-right: 15px; - margin-top: 8px; - margin-bottom: 8px; - background-color: transparent; - background-image: none; - border: 1px solid transparent; - border-radius: 4px; -} -.navbar-toggle:focus { - outline: 0; -} -.navbar-toggle .icon-bar { - display: block; - width: 22px; - height: 2px; - border-radius: 1px; -} -.navbar-toggle .icon-bar + .icon-bar { - margin-top: 4px; -} -@media (min-width: 768px) { - .navbar-toggle { - display: none; - } -} -.navbar-nav { - margin: 7.5px -15px; -} -.navbar-nav > li > a { - padding-top: 10px; - padding-bottom: 10px; - line-height: 20px; -} -@media (max-width: 767px) { - .navbar-nav .open .dropdown-menu { - position: static; - float: none; - width: auto; - margin-top: 0; - background-color: transparent; - border: 0; - -webkit-box-shadow: none; - box-shadow: none; - } - .navbar-nav .open .dropdown-menu > li > a, - .navbar-nav .open .dropdown-menu .dropdown-header { - padding: 5px 15px 5px 25px; - } - .navbar-nav .open .dropdown-menu > li > a { - line-height: 20px; - } - .navbar-nav .open .dropdown-menu > li > a:hover, - .navbar-nav .open .dropdown-menu > li > a:focus { - background-image: none; - } -} -@media (min-width: 768px) { - .navbar-nav { - float: left; - margin: 0; - } - .navbar-nav > li { - float: left; - } - .navbar-nav > li > a { - padding-top: 15px; - padding-bottom: 15px; - } -} -.navbar-form { - padding: 10px 15px; - margin-right: -15px; - margin-left: -15px; - border-top: 1px solid transparent; - border-bottom: 1px solid transparent; - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); - margin-top: 8px; - margin-bottom: 8px; -} -@media (min-width: 768px) { - .navbar-form .form-group { - display: inline-block; - margin-bottom: 0; - vertical-align: middle; - } - .navbar-form .form-control { - display: inline-block; - width: auto; - vertical-align: middle; - } - .navbar-form .form-control-static { - display: inline-block; - } - .navbar-form .input-group { - display: inline-table; - vertical-align: middle; - } - .navbar-form .input-group .input-group-addon, - .navbar-form .input-group .input-group-btn, - .navbar-form .input-group .form-control { - width: auto; - } - .navbar-form .input-group > .form-control { - width: 100%; - } - .navbar-form .control-label { - margin-bottom: 0; - vertical-align: middle; - } - .navbar-form .radio, - .navbar-form .checkbox { - display: inline-block; - margin-top: 0; - margin-bottom: 0; - vertical-align: middle; - } - .navbar-form .radio label, - .navbar-form .checkbox label { - padding-left: 0; - } - .navbar-form .radio input[type="radio"], - .navbar-form .checkbox input[type="checkbox"] { - position: relative; - margin-left: 0; - } - .navbar-form .has-feedback .form-control-feedback { - top: 0; - } -} -@media (max-width: 767px) { - .navbar-form .form-group { - margin-bottom: 5px; - } - .navbar-form .form-group:last-child { - margin-bottom: 0; - } -} -@media (min-width: 768px) { - .navbar-form { - width: auto; - padding-top: 0; - padding-bottom: 0; - margin-right: 0; - margin-left: 0; - border: 0; - -webkit-box-shadow: none; - box-shadow: none; - } -} -.navbar-nav > li > .dropdown-menu { - margin-top: 0; - border-top-left-radius: 0; - border-top-right-radius: 0; -} -.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu { - margin-bottom: 0; - border-top-left-radius: 4px; - border-top-right-radius: 4px; - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; -} -.navbar-btn { - margin-top: 8px; - margin-bottom: 8px; -} -.navbar-btn.btn-sm { - margin-top: 10px; - margin-bottom: 10px; -} -.navbar-btn.btn-xs { - margin-top: 14px; - margin-bottom: 14px; -} -.navbar-text { - margin-top: 15px; - margin-bottom: 15px; -} -@media (min-width: 768px) { - .navbar-text { - float: left; - margin-right: 15px; - margin-left: 15px; - } -} -@media (min-width: 768px) { - .navbar-left { - float: left !important; - } - .navbar-right { - float: right !important; - margin-right: -15px; - } - .navbar-right ~ .navbar-right { - margin-right: 0; - } -} -.navbar-default { - background-color: #f8f8f8; - border-color: #e7e7e7; -} -.navbar-default .navbar-brand { - color: #777; -} -.navbar-default .navbar-brand:hover, -.navbar-default .navbar-brand:focus { - color: #5e5e5e; - background-color: transparent; -} -.navbar-default .navbar-text { - color: #777; -} -.navbar-default .navbar-nav > li > a { - color: #777; -} -.navbar-default .navbar-nav > li > a:hover, -.navbar-default .navbar-nav > li > a:focus { - color: #333; - background-color: transparent; -} -.navbar-default .navbar-nav > .active > a, -.navbar-default .navbar-nav > .active > a:hover, -.navbar-default .navbar-nav > .active > a:focus { - color: #555; - background-color: #e7e7e7; -} -.navbar-default .navbar-nav > .disabled > a, -.navbar-default .navbar-nav > .disabled > a:hover, -.navbar-default .navbar-nav > .disabled > a:focus { - color: #ccc; - background-color: transparent; -} -.navbar-default .navbar-nav > .open > a, -.navbar-default .navbar-nav > .open > a:hover, -.navbar-default .navbar-nav > .open > a:focus { - color: #555; - background-color: #e7e7e7; -} -@media (max-width: 767px) { - .navbar-default .navbar-nav .open .dropdown-menu > li > a { - color: #777; - } - .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, - .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus { - color: #333; - background-color: transparent; - } - .navbar-default .navbar-nav .open .dropdown-menu > .active > a, - .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover, - .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus { - color: #555; - background-color: #e7e7e7; - } - .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a, - .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover, - .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus { - color: #ccc; - background-color: transparent; - } -} -.navbar-default .navbar-toggle { - border-color: #ddd; -} -.navbar-default .navbar-toggle:hover, -.navbar-default .navbar-toggle:focus { - background-color: #ddd; -} -.navbar-default .navbar-toggle .icon-bar { - background-color: #888; -} -.navbar-default .navbar-collapse, -.navbar-default .navbar-form { - border-color: #e7e7e7; -} -.navbar-default .navbar-link { - color: #777; -} -.navbar-default .navbar-link:hover { - color: #333; -} -.navbar-default .btn-link { - color: #777; -} -.navbar-default .btn-link:hover, -.navbar-default .btn-link:focus { - color: #333; -} -.navbar-default .btn-link[disabled]:hover, -fieldset[disabled] .navbar-default .btn-link:hover, -.navbar-default .btn-link[disabled]:focus, -fieldset[disabled] .navbar-default .btn-link:focus { - color: #ccc; -} -.navbar-inverse { - background-color: #222; - border-color: #080808; -} -.navbar-inverse .navbar-brand { - color: #9d9d9d; -} -.navbar-inverse .navbar-brand:hover, -.navbar-inverse .navbar-brand:focus { - color: #fff; - background-color: transparent; -} -.navbar-inverse .navbar-text { - color: #9d9d9d; -} -.navbar-inverse .navbar-nav > li > a { - color: #9d9d9d; -} -.navbar-inverse .navbar-nav > li > a:hover, -.navbar-inverse .navbar-nav > li > a:focus { - color: #fff; - background-color: transparent; -} -.navbar-inverse .navbar-nav > .active > a, -.navbar-inverse .navbar-nav > .active > a:hover, -.navbar-inverse .navbar-nav > .active > a:focus { - color: #fff; - background-color: #080808; -} -.navbar-inverse .navbar-nav > .disabled > a, -.navbar-inverse .navbar-nav > .disabled > a:hover, -.navbar-inverse .navbar-nav > .disabled > a:focus { - color: #444; - background-color: transparent; -} -.navbar-inverse .navbar-nav > .open > a, -.navbar-inverse .navbar-nav > .open > a:hover, -.navbar-inverse .navbar-nav > .open > a:focus { - color: #fff; - background-color: #080808; -} -@media (max-width: 767px) { - .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header { - border-color: #080808; - } - .navbar-inverse .navbar-nav .open .dropdown-menu .divider { - background-color: #080808; - } - .navbar-inverse .navbar-nav .open .dropdown-menu > li > a { - color: #9d9d9d; - } - .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover, - .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus { - color: #fff; - background-color: transparent; - } - .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a, - .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover, - .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus { - color: #fff; - background-color: #080808; - } - .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a, - .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover, - .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus { - color: #444; - background-color: transparent; - } -} -.navbar-inverse .navbar-toggle { - border-color: #333; -} -.navbar-inverse .navbar-toggle:hover, -.navbar-inverse .navbar-toggle:focus { - background-color: #333; -} -.navbar-inverse .navbar-toggle .icon-bar { - background-color: #fff; -} -.navbar-inverse .navbar-collapse, -.navbar-inverse .navbar-form { - border-color: #101010; -} -.navbar-inverse .navbar-link { - color: #9d9d9d; -} -.navbar-inverse .navbar-link:hover { - color: #fff; -} -.navbar-inverse .btn-link { - color: #9d9d9d; -} -.navbar-inverse .btn-link:hover, -.navbar-inverse .btn-link:focus { - color: #fff; -} -.navbar-inverse .btn-link[disabled]:hover, -fieldset[disabled] .navbar-inverse .btn-link:hover, -.navbar-inverse .btn-link[disabled]:focus, -fieldset[disabled] .navbar-inverse .btn-link:focus { - color: #444; -} -.breadcrumb { - padding: 8px 15px; - margin-bottom: 20px; - list-style: none; - background-color: #f5f5f5; - border-radius: 4px; -} -.breadcrumb > li { - display: inline-block; -} -.breadcrumb > li + li:before { - padding: 0 5px; - color: #ccc; - content: "/\00a0"; -} -.breadcrumb > .active { - color: #777777; -} -.pagination { - display: inline-block; - padding-left: 0; - margin: 20px 0; - border-radius: 4px; -} -.pagination > li { - display: inline; -} -.pagination > li > a, -.pagination > li > span { - position: relative; - float: left; - padding: 6px 12px; - margin-left: -1px; - line-height: 1.42857143; - color: #337ab7; - text-decoration: none; - background-color: #fff; - border: 1px solid #ddd; -} -.pagination > li > a:hover, -.pagination > li > span:hover, -.pagination > li > a:focus, -.pagination > li > span:focus { - z-index: 2; - color: #23527c; - background-color: #eeeeee; - border-color: #ddd; -} -.pagination > li:first-child > a, -.pagination > li:first-child > span { - margin-left: 0; - border-top-left-radius: 4px; - border-bottom-left-radius: 4px; -} -.pagination > li:last-child > a, -.pagination > li:last-child > span { - border-top-right-radius: 4px; - border-bottom-right-radius: 4px; -} -.pagination > .active > a, -.pagination > .active > span, -.pagination > .active > a:hover, -.pagination > .active > span:hover, -.pagination > .active > a:focus, -.pagination > .active > span:focus { - z-index: 3; - color: #fff; - cursor: default; - background-color: #337ab7; - border-color: #337ab7; -} -.pagination > .disabled > span, -.pagination > .disabled > span:hover, -.pagination > .disabled > span:focus, -.pagination > .disabled > a, -.pagination > .disabled > a:hover, -.pagination > .disabled > a:focus { - color: #777777; - cursor: not-allowed; - background-color: #fff; - border-color: #ddd; -} -.pagination-lg > li > a, -.pagination-lg > li > span { - padding: 10px 16px; - font-size: 18px; - line-height: 1.3333333; -} -.pagination-lg > li:first-child > a, -.pagination-lg > li:first-child > span { - border-top-left-radius: 6px; - border-bottom-left-radius: 6px; -} -.pagination-lg > li:last-child > a, -.pagination-lg > li:last-child > span { - border-top-right-radius: 6px; - border-bottom-right-radius: 6px; -} -.pagination-sm > li > a, -.pagination-sm > li > span { - padding: 5px 10px; - font-size: 12px; - line-height: 1.5; -} -.pagination-sm > li:first-child > a, -.pagination-sm > li:first-child > span { - border-top-left-radius: 3px; - border-bottom-left-radius: 3px; -} -.pagination-sm > li:last-child > a, -.pagination-sm > li:last-child > span { - border-top-right-radius: 3px; - border-bottom-right-radius: 3px; -} -.pager { - padding-left: 0; - margin: 20px 0; - text-align: center; - list-style: none; -} -.pager li { - display: inline; -} -.pager li > a, -.pager li > span { - display: inline-block; - padding: 5px 14px; - background-color: #fff; - border: 1px solid #ddd; - border-radius: 15px; -} -.pager li > a:hover, -.pager li > a:focus { - text-decoration: none; - background-color: #eeeeee; -} -.pager .next > a, -.pager .next > span { - float: right; -} -.pager .previous > a, -.pager .previous > span { - float: left; -} -.pager .disabled > a, -.pager .disabled > a:hover, -.pager .disabled > a:focus, -.pager .disabled > span { - color: #777777; - cursor: not-allowed; - background-color: #fff; -} -.label { - display: inline; - padding: 0.2em 0.6em 0.3em; - font-size: 75%; - font-weight: 700; - line-height: 1; - color: #fff; - text-align: center; - white-space: nowrap; - vertical-align: baseline; - border-radius: 0.25em; -} -a.label:hover, -a.label:focus { - color: #fff; - text-decoration: none; - cursor: pointer; -} -.label:empty { - display: none; -} -.btn .label { - position: relative; - top: -1px; -} -.label-default { - background-color: #777777; -} -.label-default[href]:hover, -.label-default[href]:focus { - background-color: #5e5e5e; -} -.label-primary { - background-color: #337ab7; -} -.label-primary[href]:hover, -.label-primary[href]:focus { - background-color: #286090; -} -.label-success { - background-color: #5cb85c; -} -.label-success[href]:hover, -.label-success[href]:focus { - background-color: #449d44; -} -.label-info { - background-color: #5bc0de; -} -.label-info[href]:hover, -.label-info[href]:focus { - background-color: #31b0d5; -} -.label-warning { - background-color: #f0ad4e; -} -.label-warning[href]:hover, -.label-warning[href]:focus { - background-color: #ec971f; -} -.label-danger { - background-color: #d9534f; -} -.label-danger[href]:hover, -.label-danger[href]:focus { - background-color: #c9302c; -} -.badge { - display: inline-block; - min-width: 10px; - padding: 3px 7px; - font-size: 12px; - font-weight: bold; - line-height: 1; - color: #fff; - text-align: center; - white-space: nowrap; - vertical-align: middle; - background-color: #777777; - border-radius: 10px; -} -.badge:empty { - display: none; -} -.btn .badge { - position: relative; - top: -1px; -} -.btn-xs .badge, -.btn-group-xs > .btn .badge { - top: 0; - padding: 1px 5px; -} -a.badge:hover, -a.badge:focus { - color: #fff; - text-decoration: none; - cursor: pointer; -} -.list-group-item.active > .badge, -.nav-pills > .active > a > .badge { - color: #337ab7; - background-color: #fff; -} -.list-group-item > .badge { - float: right; -} -.list-group-item > .badge + .badge { - margin-right: 5px; -} -.nav-pills > li > a > .badge { - margin-left: 3px; -} -.jumbotron { - padding-top: 30px; - padding-bottom: 30px; - margin-bottom: 30px; - color: inherit; - background-color: #eeeeee; -} -.jumbotron h1, -.jumbotron .h1 { - color: inherit; -} -.jumbotron p { - margin-bottom: 15px; - font-size: 21px; - font-weight: 200; -} -.jumbotron > hr { - border-top-color: #d5d5d5; -} -.container .jumbotron, -.container-fluid .jumbotron { - padding-right: 15px; - padding-left: 15px; - border-radius: 6px; -} -.jumbotron .container { - max-width: 100%; -} -@media screen and (min-width: 768px) { - .jumbotron { - padding-top: 48px; - padding-bottom: 48px; - } - .container .jumbotron, - .container-fluid .jumbotron { - padding-right: 60px; - padding-left: 60px; - } - .jumbotron h1, - .jumbotron .h1 { - font-size: 63px; - } -} -.thumbnail { - display: block; - padding: 4px; - margin-bottom: 20px; - line-height: 1.42857143; - background-color: #fff; - border: 1px solid #ddd; - border-radius: 4px; - -webkit-transition: border 0.2s ease-in-out; - -o-transition: border 0.2s ease-in-out; - transition: border 0.2s ease-in-out; -} -.thumbnail > img, -.thumbnail a > img { - margin-right: auto; - margin-left: auto; -} -a.thumbnail:hover, -a.thumbnail:focus, -a.thumbnail.active { - border-color: #337ab7; -} -.thumbnail .caption { - padding: 9px; - color: #333333; -} -.alert { - padding: 15px; - margin-bottom: 20px; - border: 1px solid transparent; - border-radius: 4px; -} -.alert h4 { - margin-top: 0; - color: inherit; -} -.alert .alert-link { - font-weight: bold; -} -.alert > p, -.alert > ul { - margin-bottom: 0; -} -.alert > p + p { - margin-top: 5px; -} -.alert-dismissable, -.alert-dismissible { - padding-right: 35px; -} -.alert-dismissable .close, -.alert-dismissible .close { - position: relative; - top: -2px; - right: -21px; - color: inherit; -} -.alert-success { - color: #3c763d; - background-color: #dff0d8; - border-color: #d6e9c6; -} -.alert-success hr { - border-top-color: #c9e2b3; -} -.alert-success .alert-link { - color: #2b542c; -} -.alert-info { - color: #31708f; - background-color: #d9edf7; - border-color: #bce8f1; -} -.alert-info hr { - border-top-color: #a6e1ec; -} -.alert-info .alert-link { - color: #245269; -} -.alert-warning { - color: #8a6d3b; - background-color: #fcf8e3; - border-color: #faebcc; -} -.alert-warning hr { - border-top-color: #f7e1b5; -} -.alert-warning .alert-link { - color: #66512c; -} -.alert-danger { - color: #a94442; - background-color: #f2dede; - border-color: #ebccd1; -} -.alert-danger hr { - border-top-color: #e4b9c0; -} -.alert-danger .alert-link { - color: #843534; -} -@-webkit-keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} -@-o-keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} -@keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} -.progress { - height: 20px; - margin-bottom: 20px; - overflow: hidden; - background-color: #f5f5f5; - border-radius: 4px; - -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); - box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); -} -.progress-bar { - float: left; - width: 0%; - height: 100%; - font-size: 12px; - line-height: 20px; - color: #fff; - text-align: center; - background-color: #337ab7; - -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); - box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); - -webkit-transition: width 0.6s ease; - -o-transition: width 0.6s ease; - transition: width 0.6s ease; -} -.progress-striped .progress-bar, -.progress-bar-striped { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - -webkit-background-size: 40px 40px; - background-size: 40px 40px; -} -.progress.active .progress-bar, -.progress-bar.active { - -webkit-animation: progress-bar-stripes 2s linear infinite; - -o-animation: progress-bar-stripes 2s linear infinite; - animation: progress-bar-stripes 2s linear infinite; -} -.progress-bar-success { - background-color: #5cb85c; -} -.progress-striped .progress-bar-success { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} -.progress-bar-info { - background-color: #5bc0de; -} -.progress-striped .progress-bar-info { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} -.progress-bar-warning { - background-color: #f0ad4e; -} -.progress-striped .progress-bar-warning { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} -.progress-bar-danger { - background-color: #d9534f; -} -.progress-striped .progress-bar-danger { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} -.media { - margin-top: 15px; -} -.media:first-child { - margin-top: 0; -} -.media, -.media-body { - overflow: hidden; - zoom: 1; -} -.media-body { - width: 10000px; -} -.media-object { - display: block; -} -.media-object.img-thumbnail { - max-width: none; -} -.media-right, -.media > .pull-right { - padding-left: 10px; -} -.media-left, -.media > .pull-left { - padding-right: 10px; -} -.media-left, -.media-right, -.media-body { - display: table-cell; - vertical-align: top; -} -.media-middle { - vertical-align: middle; -} -.media-bottom { - vertical-align: bottom; -} -.media-heading { - margin-top: 0; - margin-bottom: 5px; -} -.media-list { - padding-left: 0; - list-style: none; -} -.list-group { - padding-left: 0; - margin-bottom: 20px; -} -.list-group-item { - position: relative; - display: block; - padding: 10px 15px; - margin-bottom: -1px; - background-color: #fff; - border: 1px solid #ddd; -} -.list-group-item:first-child { - border-top-left-radius: 4px; - border-top-right-radius: 4px; -} -.list-group-item:last-child { - margin-bottom: 0; - border-bottom-right-radius: 4px; - border-bottom-left-radius: 4px; -} -.list-group-item.disabled, -.list-group-item.disabled:hover, -.list-group-item.disabled:focus { - color: #777777; - cursor: not-allowed; - background-color: #eeeeee; -} -.list-group-item.disabled .list-group-item-heading, -.list-group-item.disabled:hover .list-group-item-heading, -.list-group-item.disabled:focus .list-group-item-heading { - color: inherit; -} -.list-group-item.disabled .list-group-item-text, -.list-group-item.disabled:hover .list-group-item-text, -.list-group-item.disabled:focus .list-group-item-text { - color: #777777; -} -.list-group-item.active, -.list-group-item.active:hover, -.list-group-item.active:focus { - z-index: 2; - color: #fff; - background-color: #337ab7; - border-color: #337ab7; -} -.list-group-item.active .list-group-item-heading, -.list-group-item.active:hover .list-group-item-heading, -.list-group-item.active:focus .list-group-item-heading, -.list-group-item.active .list-group-item-heading > small, -.list-group-item.active:hover .list-group-item-heading > small, -.list-group-item.active:focus .list-group-item-heading > small, -.list-group-item.active .list-group-item-heading > .small, -.list-group-item.active:hover .list-group-item-heading > .small, -.list-group-item.active:focus .list-group-item-heading > .small { - color: inherit; -} -.list-group-item.active .list-group-item-text, -.list-group-item.active:hover .list-group-item-text, -.list-group-item.active:focus .list-group-item-text { - color: #c7ddef; -} -a.list-group-item, -button.list-group-item { - color: #555; -} -a.list-group-item .list-group-item-heading, -button.list-group-item .list-group-item-heading { - color: #333; -} -a.list-group-item:hover, -button.list-group-item:hover, -a.list-group-item:focus, -button.list-group-item:focus { - color: #555; - text-decoration: none; - background-color: #f5f5f5; -} -button.list-group-item { - width: 100%; - text-align: left; -} -.list-group-item-success { - color: #3c763d; - background-color: #dff0d8; -} -a.list-group-item-success, -button.list-group-item-success { - color: #3c763d; -} -a.list-group-item-success .list-group-item-heading, -button.list-group-item-success .list-group-item-heading { - color: inherit; -} -a.list-group-item-success:hover, -button.list-group-item-success:hover, -a.list-group-item-success:focus, -button.list-group-item-success:focus { - color: #3c763d; - background-color: #d0e9c6; -} -a.list-group-item-success.active, -button.list-group-item-success.active, -a.list-group-item-success.active:hover, -button.list-group-item-success.active:hover, -a.list-group-item-success.active:focus, -button.list-group-item-success.active:focus { - color: #fff; - background-color: #3c763d; - border-color: #3c763d; -} -.list-group-item-info { - color: #31708f; - background-color: #d9edf7; -} -a.list-group-item-info, -button.list-group-item-info { - color: #31708f; -} -a.list-group-item-info .list-group-item-heading, -button.list-group-item-info .list-group-item-heading { - color: inherit; -} -a.list-group-item-info:hover, -button.list-group-item-info:hover, -a.list-group-item-info:focus, -button.list-group-item-info:focus { - color: #31708f; - background-color: #c4e3f3; -} -a.list-group-item-info.active, -button.list-group-item-info.active, -a.list-group-item-info.active:hover, -button.list-group-item-info.active:hover, -a.list-group-item-info.active:focus, -button.list-group-item-info.active:focus { - color: #fff; - background-color: #31708f; - border-color: #31708f; -} -.list-group-item-warning { - color: #8a6d3b; - background-color: #fcf8e3; -} -a.list-group-item-warning, -button.list-group-item-warning { - color: #8a6d3b; -} -a.list-group-item-warning .list-group-item-heading, -button.list-group-item-warning .list-group-item-heading { - color: inherit; -} -a.list-group-item-warning:hover, -button.list-group-item-warning:hover, -a.list-group-item-warning:focus, -button.list-group-item-warning:focus { - color: #8a6d3b; - background-color: #faf2cc; -} -a.list-group-item-warning.active, -button.list-group-item-warning.active, -a.list-group-item-warning.active:hover, -button.list-group-item-warning.active:hover, -a.list-group-item-warning.active:focus, -button.list-group-item-warning.active:focus { - color: #fff; - background-color: #8a6d3b; - border-color: #8a6d3b; -} -.list-group-item-danger { - color: #a94442; - background-color: #f2dede; -} -a.list-group-item-danger, -button.list-group-item-danger { - color: #a94442; -} -a.list-group-item-danger .list-group-item-heading, -button.list-group-item-danger .list-group-item-heading { - color: inherit; -} -a.list-group-item-danger:hover, -button.list-group-item-danger:hover, -a.list-group-item-danger:focus, -button.list-group-item-danger:focus { - color: #a94442; - background-color: #ebcccc; -} -a.list-group-item-danger.active, -button.list-group-item-danger.active, -a.list-group-item-danger.active:hover, -button.list-group-item-danger.active:hover, -a.list-group-item-danger.active:focus, -button.list-group-item-danger.active:focus { - color: #fff; - background-color: #a94442; - border-color: #a94442; -} -.list-group-item-heading { - margin-top: 0; - margin-bottom: 5px; -} -.list-group-item-text { - margin-bottom: 0; - line-height: 1.3; -} -.panel { - margin-bottom: 20px; - background-color: #fff; - border: 1px solid transparent; - border-radius: 4px; - -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); - box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); -} -.panel-body { - padding: 15px; -} -.panel-heading { - padding: 10px 15px; - border-bottom: 1px solid transparent; - border-top-left-radius: 3px; - border-top-right-radius: 3px; -} -.panel-heading > .dropdown .dropdown-toggle { - color: inherit; -} -.panel-title { - margin-top: 0; - margin-bottom: 0; - font-size: 16px; - color: inherit; -} -.panel-title > a, -.panel-title > small, -.panel-title > .small, -.panel-title > small > a, -.panel-title > .small > a { - color: inherit; -} -.panel-footer { - padding: 10px 15px; - background-color: #f5f5f5; - border-top: 1px solid #ddd; - border-bottom-right-radius: 3px; - border-bottom-left-radius: 3px; -} -.panel > .list-group, -.panel > .panel-collapse > .list-group { - margin-bottom: 0; -} -.panel > .list-group .list-group-item, -.panel > .panel-collapse > .list-group .list-group-item { - border-width: 1px 0; - border-radius: 0; -} -.panel > .list-group:first-child .list-group-item:first-child, -.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child { - border-top: 0; - border-top-left-radius: 3px; - border-top-right-radius: 3px; -} -.panel > .list-group:last-child .list-group-item:last-child, -.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child { - border-bottom: 0; - border-bottom-right-radius: 3px; - border-bottom-left-radius: 3px; -} -.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child { - border-top-left-radius: 0; - border-top-right-radius: 0; -} -.panel-heading + .list-group .list-group-item:first-child { - border-top-width: 0; -} -.list-group + .panel-footer { - border-top-width: 0; -} -.panel > .table, -.panel > .table-responsive > .table, -.panel > .panel-collapse > .table { - margin-bottom: 0; -} -.panel > .table caption, -.panel > .table-responsive > .table caption, -.panel > .panel-collapse > .table caption { - padding-right: 15px; - padding-left: 15px; -} -.panel > .table:first-child, -.panel > .table-responsive:first-child > .table:first-child { - border-top-left-radius: 3px; - border-top-right-radius: 3px; -} -.panel > .table:first-child > thead:first-child > tr:first-child, -.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child, -.panel > .table:first-child > tbody:first-child > tr:first-child, -.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child { - border-top-left-radius: 3px; - border-top-right-radius: 3px; -} -.panel > .table:first-child > thead:first-child > tr:first-child td:first-child, -.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child, -.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child, -.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child, -.panel > .table:first-child > thead:first-child > tr:first-child th:first-child, -.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child, -.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child, -.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child { - border-top-left-radius: 3px; -} -.panel > .table:first-child > thead:first-child > tr:first-child td:last-child, -.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child, -.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child, -.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child, -.panel > .table:first-child > thead:first-child > tr:first-child th:last-child, -.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child, -.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child, -.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child { - border-top-right-radius: 3px; -} -.panel > .table:last-child, -.panel > .table-responsive:last-child > .table:last-child { - border-bottom-right-radius: 3px; - border-bottom-left-radius: 3px; -} -.panel > .table:last-child > tbody:last-child > tr:last-child, -.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child, -.panel > .table:last-child > tfoot:last-child > tr:last-child, -.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child { - border-bottom-right-radius: 3px; - border-bottom-left-radius: 3px; -} -.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child, -.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child, -.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child, -.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child, -.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child, -.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child, -.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child, -.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child { - border-bottom-left-radius: 3px; -} -.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child, -.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child, -.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child, -.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child, -.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child, -.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child, -.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child, -.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child { - border-bottom-right-radius: 3px; -} -.panel > .panel-body + .table, -.panel > .panel-body + .table-responsive, -.panel > .table + .panel-body, -.panel > .table-responsive + .panel-body { - border-top: 1px solid #ddd; -} -.panel > .table > tbody:first-child > tr:first-child th, -.panel > .table > tbody:first-child > tr:first-child td { - border-top: 0; -} -.panel > .table-bordered, -.panel > .table-responsive > .table-bordered { - border: 0; -} -.panel > .table-bordered > thead > tr > th:first-child, -.panel > .table-responsive > .table-bordered > thead > tr > th:first-child, -.panel > .table-bordered > tbody > tr > th:first-child, -.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child, -.panel > .table-bordered > tfoot > tr > th:first-child, -.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child, -.panel > .table-bordered > thead > tr > td:first-child, -.panel > .table-responsive > .table-bordered > thead > tr > td:first-child, -.panel > .table-bordered > tbody > tr > td:first-child, -.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child, -.panel > .table-bordered > tfoot > tr > td:first-child, -.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child { - border-left: 0; -} -.panel > .table-bordered > thead > tr > th:last-child, -.panel > .table-responsive > .table-bordered > thead > tr > th:last-child, -.panel > .table-bordered > tbody > tr > th:last-child, -.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child, -.panel > .table-bordered > tfoot > tr > th:last-child, -.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child, -.panel > .table-bordered > thead > tr > td:last-child, -.panel > .table-responsive > .table-bordered > thead > tr > td:last-child, -.panel > .table-bordered > tbody > tr > td:last-child, -.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child, -.panel > .table-bordered > tfoot > tr > td:last-child, -.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child { - border-right: 0; -} -.panel > .table-bordered > thead > tr:first-child > td, -.panel > .table-responsive > .table-bordered > thead > tr:first-child > td, -.panel > .table-bordered > tbody > tr:first-child > td, -.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td, -.panel > .table-bordered > thead > tr:first-child > th, -.panel > .table-responsive > .table-bordered > thead > tr:first-child > th, -.panel > .table-bordered > tbody > tr:first-child > th, -.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th { - border-bottom: 0; -} -.panel > .table-bordered > tbody > tr:last-child > td, -.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td, -.panel > .table-bordered > tfoot > tr:last-child > td, -.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td, -.panel > .table-bordered > tbody > tr:last-child > th, -.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th, -.panel > .table-bordered > tfoot > tr:last-child > th, -.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th { - border-bottom: 0; -} -.panel > .table-responsive { - margin-bottom: 0; - border: 0; -} -.panel-group { - margin-bottom: 20px; -} -.panel-group .panel { - margin-bottom: 0; - border-radius: 4px; -} -.panel-group .panel + .panel { - margin-top: 5px; -} -.panel-group .panel-heading { - border-bottom: 0; -} -.panel-group .panel-heading + .panel-collapse > .panel-body, -.panel-group .panel-heading + .panel-collapse > .list-group { - border-top: 1px solid #ddd; -} -.panel-group .panel-footer { - border-top: 0; -} -.panel-group .panel-footer + .panel-collapse .panel-body { - border-bottom: 1px solid #ddd; -} -.panel-default { - border-color: #ddd; -} -.panel-default > .panel-heading { - color: #333333; - background-color: #f5f5f5; - border-color: #ddd; -} -.panel-default > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #ddd; -} -.panel-default > .panel-heading .badge { - color: #f5f5f5; - background-color: #333333; -} -.panel-default > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #ddd; -} -.panel-primary { - border-color: #337ab7; -} -.panel-primary > .panel-heading { - color: #fff; - background-color: #337ab7; - border-color: #337ab7; -} -.panel-primary > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #337ab7; -} -.panel-primary > .panel-heading .badge { - color: #337ab7; - background-color: #fff; -} -.panel-primary > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #337ab7; -} -.panel-success { - border-color: #d6e9c6; -} -.panel-success > .panel-heading { - color: #3c763d; - background-color: #dff0d8; - border-color: #d6e9c6; -} -.panel-success > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #d6e9c6; -} -.panel-success > .panel-heading .badge { - color: #dff0d8; - background-color: #3c763d; -} -.panel-success > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #d6e9c6; -} -.panel-info { - border-color: #bce8f1; -} -.panel-info > .panel-heading { - color: #31708f; - background-color: #d9edf7; - border-color: #bce8f1; -} -.panel-info > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #bce8f1; -} -.panel-info > .panel-heading .badge { - color: #d9edf7; - background-color: #31708f; -} -.panel-info > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #bce8f1; -} -.panel-warning { - border-color: #faebcc; -} -.panel-warning > .panel-heading { - color: #8a6d3b; - background-color: #fcf8e3; - border-color: #faebcc; -} -.panel-warning > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #faebcc; -} -.panel-warning > .panel-heading .badge { - color: #fcf8e3; - background-color: #8a6d3b; -} -.panel-warning > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #faebcc; -} -.panel-danger { - border-color: #ebccd1; -} -.panel-danger > .panel-heading { - color: #a94442; - background-color: #f2dede; - border-color: #ebccd1; -} -.panel-danger > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #ebccd1; -} -.panel-danger > .panel-heading .badge { - color: #f2dede; - background-color: #a94442; -} -.panel-danger > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #ebccd1; -} -.embed-responsive { - position: relative; - display: block; - height: 0; - padding: 0; - overflow: hidden; -} -.embed-responsive .embed-responsive-item, -.embed-responsive iframe, -.embed-responsive embed, -.embed-responsive object, -.embed-responsive video { - position: absolute; - top: 0; - bottom: 0; - left: 0; - width: 100%; - height: 100%; - border: 0; -} -.embed-responsive-16by9 { - padding-bottom: 56.25%; -} -.embed-responsive-4by3 { - padding-bottom: 75%; -} -.well { - min-height: 20px; - padding: 19px; - margin-bottom: 20px; - background-color: #f5f5f5; - border: 1px solid #e3e3e3; - border-radius: 4px; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); -} -.well blockquote { - border-color: #ddd; - border-color: rgba(0, 0, 0, 0.15); -} -.well-lg { - padding: 24px; - border-radius: 6px; -} -.well-sm { - padding: 9px; - border-radius: 3px; -} -.close { - float: right; - font-size: 21px; - font-weight: bold; - line-height: 1; - color: #000; - text-shadow: 0 1px 0 #fff; - filter: alpha(opacity=20); - opacity: 0.2; -} -.close:hover, -.close:focus { - color: #000; - text-decoration: none; - cursor: pointer; - filter: alpha(opacity=50); - opacity: 0.5; -} -button.close { - padding: 0; - cursor: pointer; - background: transparent; - border: 0; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; -} -.modal-open { - overflow: hidden; -} -.modal { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1050; - display: none; - overflow: hidden; - -webkit-overflow-scrolling: touch; - outline: 0; -} -.modal.fade .modal-dialog { - -webkit-transform: translate(0, -25%); - -ms-transform: translate(0, -25%); - -o-transform: translate(0, -25%); - transform: translate(0, -25%); - -webkit-transition: -webkit-transform 0.3s ease-out; - -o-transition: -o-transform 0.3s ease-out; - transition: -webkit-transform 0.3s ease-out; - transition: transform 0.3s ease-out; - transition: transform 0.3s ease-out, -webkit-transform 0.3s ease-out, -o-transform 0.3s ease-out; -} -.modal.in .modal-dialog { - -webkit-transform: translate(0, 0); - -ms-transform: translate(0, 0); - -o-transform: translate(0, 0); - transform: translate(0, 0); -} -.modal-open .modal { - overflow-x: hidden; - overflow-y: auto; -} -.modal-dialog { - position: relative; - width: auto; - margin: 10px; -} -.modal-content { - position: relative; - background-color: #fff; - background-clip: padding-box; - border: 1px solid #999; - border: 1px solid rgba(0, 0, 0, 0.2); - border-radius: 6px; - -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); - box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); - outline: 0; -} -.modal-backdrop { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1040; - background-color: #000; -} -.modal-backdrop.fade { - filter: alpha(opacity=0); - opacity: 0; -} -.modal-backdrop.in { - filter: alpha(opacity=50); - opacity: 0.5; -} -.modal-header { - padding: 15px; - border-bottom: 1px solid #e5e5e5; -} -.modal-header .close { - margin-top: -2px; -} -.modal-title { - margin: 0; - line-height: 1.42857143; -} -.modal-body { - position: relative; - padding: 15px; -} -.modal-footer { - padding: 15px; - text-align: right; - border-top: 1px solid #e5e5e5; -} -.modal-footer .btn + .btn { - margin-bottom: 0; - margin-left: 5px; -} -.modal-footer .btn-group .btn + .btn { - margin-left: -1px; -} -.modal-footer .btn-block + .btn-block { - margin-left: 0; -} -.modal-scrollbar-measure { - position: absolute; - top: -9999px; - width: 50px; - height: 50px; - overflow: scroll; -} -@media (min-width: 768px) { - .modal-dialog { - width: 600px; - margin: 30px auto; - } - .modal-content { - -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); - box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); - } - .modal-sm { - width: 300px; - } -} -@media (min-width: 992px) { - .modal-lg { - width: 900px; - } -} -.tooltip { - position: absolute; - z-index: 1070; - display: block; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-style: normal; - font-weight: 400; - line-height: 1.42857143; - line-break: auto; - text-align: left; - text-align: start; - text-decoration: none; - text-shadow: none; - text-transform: none; - letter-spacing: normal; - word-break: normal; - word-spacing: normal; - word-wrap: normal; - white-space: normal; - font-size: 12px; - filter: alpha(opacity=0); - opacity: 0; -} -.tooltip.in { - filter: alpha(opacity=90); - opacity: 0.9; -} -.tooltip.top { - padding: 5px 0; - margin-top: -3px; -} -.tooltip.right { - padding: 0 5px; - margin-left: 3px; -} -.tooltip.bottom { - padding: 5px 0; - margin-top: 3px; -} -.tooltip.left { - padding: 0 5px; - margin-left: -3px; -} -.tooltip.top .tooltip-arrow { - bottom: 0; - left: 50%; - margin-left: -5px; - border-width: 5px 5px 0; - border-top-color: #000; -} -.tooltip.top-left .tooltip-arrow { - right: 5px; - bottom: 0; - margin-bottom: -5px; - border-width: 5px 5px 0; - border-top-color: #000; -} -.tooltip.top-right .tooltip-arrow { - bottom: 0; - left: 5px; - margin-bottom: -5px; - border-width: 5px 5px 0; - border-top-color: #000; -} -.tooltip.right .tooltip-arrow { - top: 50%; - left: 0; - margin-top: -5px; - border-width: 5px 5px 5px 0; - border-right-color: #000; -} -.tooltip.left .tooltip-arrow { - top: 50%; - right: 0; - margin-top: -5px; - border-width: 5px 0 5px 5px; - border-left-color: #000; -} -.tooltip.bottom .tooltip-arrow { - top: 0; - left: 50%; - margin-left: -5px; - border-width: 0 5px 5px; - border-bottom-color: #000; -} -.tooltip.bottom-left .tooltip-arrow { - top: 0; - right: 5px; - margin-top: -5px; - border-width: 0 5px 5px; - border-bottom-color: #000; -} -.tooltip.bottom-right .tooltip-arrow { - top: 0; - left: 5px; - margin-top: -5px; - border-width: 0 5px 5px; - border-bottom-color: #000; -} -.tooltip-inner { - max-width: 200px; - padding: 3px 8px; - color: #fff; - text-align: center; - background-color: #000; - border-radius: 4px; -} -.tooltip-arrow { - position: absolute; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; -} -.popover { - position: absolute; - top: 0; - left: 0; - z-index: 1060; - display: none; - max-width: 276px; - padding: 1px; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-style: normal; - font-weight: 400; - line-height: 1.42857143; - line-break: auto; - text-align: left; - text-align: start; - text-decoration: none; - text-shadow: none; - text-transform: none; - letter-spacing: normal; - word-break: normal; - word-spacing: normal; - word-wrap: normal; - white-space: normal; - font-size: 14px; - background-color: #fff; - background-clip: padding-box; - border: 1px solid #ccc; - border: 1px solid rgba(0, 0, 0, 0.2); - border-radius: 6px; - -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); -} -.popover.top { - margin-top: -10px; -} -.popover.right { - margin-left: 10px; -} -.popover.bottom { - margin-top: 10px; -} -.popover.left { - margin-left: -10px; -} -.popover > .arrow { - border-width: 11px; -} -.popover > .arrow, -.popover > .arrow:after { - position: absolute; - display: block; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; -} -.popover > .arrow:after { - content: ""; - border-width: 10px; -} -.popover.top > .arrow { - bottom: -11px; - left: 50%; - margin-left: -11px; - border-top-color: #999999; - border-top-color: rgba(0, 0, 0, 0.25); - border-bottom-width: 0; -} -.popover.top > .arrow:after { - bottom: 1px; - margin-left: -10px; - content: " "; - border-top-color: #fff; - border-bottom-width: 0; -} -.popover.right > .arrow { - top: 50%; - left: -11px; - margin-top: -11px; - border-right-color: #999999; - border-right-color: rgba(0, 0, 0, 0.25); - border-left-width: 0; -} -.popover.right > .arrow:after { - bottom: -10px; - left: 1px; - content: " "; - border-right-color: #fff; - border-left-width: 0; -} -.popover.bottom > .arrow { - top: -11px; - left: 50%; - margin-left: -11px; - border-top-width: 0; - border-bottom-color: #999999; - border-bottom-color: rgba(0, 0, 0, 0.25); -} -.popover.bottom > .arrow:after { - top: 1px; - margin-left: -10px; - content: " "; - border-top-width: 0; - border-bottom-color: #fff; -} -.popover.left > .arrow { - top: 50%; - right: -11px; - margin-top: -11px; - border-right-width: 0; - border-left-color: #999999; - border-left-color: rgba(0, 0, 0, 0.25); -} -.popover.left > .arrow:after { - right: 1px; - bottom: -10px; - content: " "; - border-right-width: 0; - border-left-color: #fff; -} -.popover-title { - padding: 8px 14px; - margin: 0; - font-size: 14px; - background-color: #f7f7f7; - border-bottom: 1px solid #ebebeb; - border-radius: 5px 5px 0 0; -} -.popover-content { - padding: 9px 14px; -} -.carousel { - position: relative; -} -.carousel-inner { - position: relative; - width: 100%; - overflow: hidden; -} -.carousel-inner > .item { - position: relative; - display: none; - -webkit-transition: 0.6s ease-in-out left; - -o-transition: 0.6s ease-in-out left; - transition: 0.6s ease-in-out left; -} -.carousel-inner > .item > img, -.carousel-inner > .item > a > img { - line-height: 1; -} -@media all and (transform-3d), (-webkit-transform-3d) { - .carousel-inner > .item { - -webkit-transition: -webkit-transform 0.6s ease-in-out; - -o-transition: -o-transform 0.6s ease-in-out; - transition: -webkit-transform 0.6s ease-in-out; - transition: transform 0.6s ease-in-out; - transition: transform 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out, -o-transform 0.6s ease-in-out; - -webkit-backface-visibility: hidden; - backface-visibility: hidden; - -webkit-perspective: 1000px; - perspective: 1000px; - } - .carousel-inner > .item.next, - .carousel-inner > .item.active.right { - -webkit-transform: translate3d(100%, 0, 0); - transform: translate3d(100%, 0, 0); - left: 0; - } - .carousel-inner > .item.prev, - .carousel-inner > .item.active.left { - -webkit-transform: translate3d(-100%, 0, 0); - transform: translate3d(-100%, 0, 0); - left: 0; - } - .carousel-inner > .item.next.left, - .carousel-inner > .item.prev.right, - .carousel-inner > .item.active { - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - left: 0; - } -} -.carousel-inner > .active, -.carousel-inner > .next, -.carousel-inner > .prev { - display: block; -} -.carousel-inner > .active { - left: 0; -} -.carousel-inner > .next, -.carousel-inner > .prev { - position: absolute; - top: 0; - width: 100%; -} -.carousel-inner > .next { - left: 100%; -} -.carousel-inner > .prev { - left: -100%; -} -.carousel-inner > .next.left, -.carousel-inner > .prev.right { - left: 0; -} -.carousel-inner > .active.left { - left: -100%; -} -.carousel-inner > .active.right { - left: 100%; -} -.carousel-control { - position: absolute; - top: 0; - bottom: 0; - left: 0; - width: 15%; - font-size: 20px; - color: #fff; - text-align: center; - text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); - background-color: rgba(0, 0, 0, 0); - filter: alpha(opacity=50); - opacity: 0.5; -} -.carousel-control.left { - background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%); - background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%); - background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0.0001))); - background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1); - background-repeat: repeat-x; -} -.carousel-control.right { - right: 0; - left: auto; - background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%); - background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%); - background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, 0.0001)), to(rgba(0, 0, 0, 0.5))); - background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1); - background-repeat: repeat-x; -} -.carousel-control:hover, -.carousel-control:focus { - color: #fff; - text-decoration: none; - outline: 0; - filter: alpha(opacity=90); - opacity: 0.9; -} -.carousel-control .icon-prev, -.carousel-control .icon-next, -.carousel-control .glyphicon-chevron-left, -.carousel-control .glyphicon-chevron-right { - position: absolute; - top: 50%; - z-index: 5; - display: inline-block; - margin-top: -10px; -} -.carousel-control .icon-prev, -.carousel-control .glyphicon-chevron-left { - left: 50%; - margin-left: -10px; -} -.carousel-control .icon-next, -.carousel-control .glyphicon-chevron-right { - right: 50%; - margin-right: -10px; -} -.carousel-control .icon-prev, -.carousel-control .icon-next { - width: 20px; - height: 20px; - font-family: serif; - line-height: 1; -} -.carousel-control .icon-prev:before { - content: "\2039"; -} -.carousel-control .icon-next:before { - content: "\203a"; -} -.carousel-indicators { - position: absolute; - bottom: 10px; - left: 50%; - z-index: 15; - width: 60%; - padding-left: 0; - margin-left: -30%; - text-align: center; - list-style: none; -} -.carousel-indicators li { - display: inline-block; - width: 10px; - height: 10px; - margin: 1px; - text-indent: -999px; - cursor: pointer; - background-color: #000 \9; - background-color: rgba(0, 0, 0, 0); - border: 1px solid #fff; - border-radius: 10px; -} -.carousel-indicators .active { - width: 12px; - height: 12px; - margin: 0; - background-color: #fff; -} -.carousel-caption { - position: absolute; - right: 15%; - bottom: 20px; - left: 15%; - z-index: 10; - padding-top: 20px; - padding-bottom: 20px; - color: #fff; - text-align: center; - text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); -} -.carousel-caption .btn { - text-shadow: none; -} -@media screen and (min-width: 768px) { - .carousel-control .glyphicon-chevron-left, - .carousel-control .glyphicon-chevron-right, - .carousel-control .icon-prev, - .carousel-control .icon-next { - width: 30px; - height: 30px; - margin-top: -10px; - font-size: 30px; - } - .carousel-control .glyphicon-chevron-left, - .carousel-control .icon-prev { - margin-left: -10px; - } - .carousel-control .glyphicon-chevron-right, - .carousel-control .icon-next { - margin-right: -10px; - } - .carousel-caption { - right: 20%; - left: 20%; - padding-bottom: 30px; - } - .carousel-indicators { - bottom: 20px; - } -} -.clearfix:before, -.clearfix:after, -.dl-horizontal dd:before, -.dl-horizontal dd:after, -.container:before, -.container:after, -.container-fluid:before, -.container-fluid:after, -.row:before, -.row:after, -.form-horizontal .form-group:before, -.form-horizontal .form-group:after, -.btn-toolbar:before, -.btn-toolbar:after, -.btn-group-vertical > .btn-group:before, -.btn-group-vertical > .btn-group:after, -.nav:before, -.nav:after, -.navbar:before, -.navbar:after, -.navbar-header:before, -.navbar-header:after, -.navbar-collapse:before, -.navbar-collapse:after, -.pager:before, -.pager:after, -.panel-body:before, -.panel-body:after, -.modal-header:before, -.modal-header:after, -.modal-footer:before, -.modal-footer:after { - display: table; - content: " "; -} -.clearfix:after, -.dl-horizontal dd:after, -.container:after, -.container-fluid:after, -.row:after, -.form-horizontal .form-group:after, -.btn-toolbar:after, -.btn-group-vertical > .btn-group:after, -.nav:after, -.navbar:after, -.navbar-header:after, -.navbar-collapse:after, -.pager:after, -.panel-body:after, -.modal-header:after, -.modal-footer:after { - clear: both; -} -.center-block { - display: block; - margin-right: auto; - margin-left: auto; -} -.pull-right { - float: right !important; -} -.pull-left { - float: left !important; -} -.hide { - display: none !important; -} -.show { - display: block !important; -} -.invisible { - visibility: hidden; -} -.text-hide { - font: 0/0 a; - color: transparent; - text-shadow: none; - background-color: transparent; - border: 0; -} -.hidden { - display: none !important; -} -.affix { - position: fixed; -} -@-ms-viewport { - width: device-width; -} -.visible-xs, -.visible-sm, -.visible-md, -.visible-lg { - display: none !important; -} -.visible-xs-block, -.visible-xs-inline, -.visible-xs-inline-block, -.visible-sm-block, -.visible-sm-inline, -.visible-sm-inline-block, -.visible-md-block, -.visible-md-inline, -.visible-md-inline-block, -.visible-lg-block, -.visible-lg-inline, -.visible-lg-inline-block { - display: none !important; -} -@media (max-width: 767px) { - .visible-xs { - display: block !important; - } - table.visible-xs { - display: table !important; - } - tr.visible-xs { - display: table-row !important; - } - th.visible-xs, - td.visible-xs { - display: table-cell !important; - } -} -@media (max-width: 767px) { - .visible-xs-block { - display: block !important; - } -} -@media (max-width: 767px) { - .visible-xs-inline { - display: inline !important; - } -} -@media (max-width: 767px) { - .visible-xs-inline-block { - display: inline-block !important; - } -} -@media (min-width: 768px) and (max-width: 991px) { - .visible-sm { - display: block !important; - } - table.visible-sm { - display: table !important; - } - tr.visible-sm { - display: table-row !important; - } - th.visible-sm, - td.visible-sm { - display: table-cell !important; - } -} -@media (min-width: 768px) and (max-width: 991px) { - .visible-sm-block { - display: block !important; - } -} -@media (min-width: 768px) and (max-width: 991px) { - .visible-sm-inline { - display: inline !important; - } -} -@media (min-width: 768px) and (max-width: 991px) { - .visible-sm-inline-block { - display: inline-block !important; - } -} -@media (min-width: 992px) and (max-width: 1199px) { - .visible-md { - display: block !important; - } - table.visible-md { - display: table !important; - } - tr.visible-md { - display: table-row !important; - } - th.visible-md, - td.visible-md { - display: table-cell !important; - } -} -@media (min-width: 992px) and (max-width: 1199px) { - .visible-md-block { - display: block !important; - } -} -@media (min-width: 992px) and (max-width: 1199px) { - .visible-md-inline { - display: inline !important; - } -} -@media (min-width: 992px) and (max-width: 1199px) { - .visible-md-inline-block { - display: inline-block !important; - } -} -@media (min-width: 1200px) { - .visible-lg { - display: block !important; - } - table.visible-lg { - display: table !important; - } - tr.visible-lg { - display: table-row !important; - } - th.visible-lg, - td.visible-lg { - display: table-cell !important; - } -} -@media (min-width: 1200px) { - .visible-lg-block { - display: block !important; - } -} -@media (min-width: 1200px) { - .visible-lg-inline { - display: inline !important; - } -} -@media (min-width: 1200px) { - .visible-lg-inline-block { - display: inline-block !important; - } -} -@media (max-width: 767px) { - .hidden-xs { - display: none !important; - } -} -@media (min-width: 768px) and (max-width: 991px) { - .hidden-sm { - display: none !important; - } -} -@media (min-width: 992px) and (max-width: 1199px) { - .hidden-md { - display: none !important; - } -} -@media (min-width: 1200px) { - .hidden-lg { - display: none !important; - } -} -.visible-print { - display: none !important; -} -@media print { - .visible-print { - display: block !important; - } - table.visible-print { - display: table !important; - } - tr.visible-print { - display: table-row !important; - } - th.visible-print, - td.visible-print { - display: table-cell !important; - } -} -.visible-print-block { - display: none !important; -} -@media print { - .visible-print-block { - display: block !important; - } -} -.visible-print-inline { - display: none !important; -} -@media print { - .visible-print-inline { - display: inline !important; - } -} -.visible-print-inline-block { - display: none !important; -} -@media print { - .visible-print-inline-block { - display: inline-block !important; - } -} -@media print { - .hidden-print { - display: none !important; - } -} -/*# sourceMappingURL=bootstrap.css.map */ \ No newline at end of file diff --git a/node_modules/bootstrap/dist/css/bootstrap.css.map b/node_modules/bootstrap/dist/css/bootstrap.css.map deleted file mode 100644 index caac3e6..0000000 --- a/node_modules/bootstrap/dist/css/bootstrap.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["bootstrap.css","less/normalize.less","less/print.less","less/glyphicons.less","less/scaffolding.less","less/mixins/vendor-prefixes.less","less/mixins/tab-focus.less","less/mixins/image.less","less/type.less","less/mixins/text-emphasis.less","less/mixins/background-variant.less","less/mixins/text-overflow.less","less/code.less","less/grid.less","less/mixins/grid.less","less/mixins/grid-framework.less","less/tables.less","less/mixins/table-row.less","less/forms.less","less/mixins/forms.less","less/buttons.less","less/mixins/buttons.less","less/mixins/opacity.less","less/component-animations.less","less/dropdowns.less","less/mixins/nav-divider.less","less/mixins/reset-filter.less","less/button-groups.less","less/mixins/border-radius.less","less/input-groups.less","less/navs.less","less/navbar.less","less/mixins/nav-vertical-align.less","less/utilities.less","less/breadcrumbs.less","less/pagination.less","less/mixins/pagination.less","less/pager.less","less/labels.less","less/mixins/labels.less","less/badges.less","less/jumbotron.less","less/thumbnails.less","less/alerts.less","less/mixins/alerts.less","less/progress-bars.less","less/mixins/gradients.less","less/mixins/progress-bar.less","less/media.less","less/list-group.less","less/mixins/list-group.less","less/panels.less","less/mixins/panels.less","less/responsive-embed.less","less/wells.less","less/close.less","less/modals.less","less/tooltip.less","less/mixins/reset-text.less","less/popovers.less","less/carousel.less","less/mixins/clearfix.less","less/mixins/center-block.less","less/mixins/hide-text.less","less/responsive-utilities.less","less/mixins/responsive-visibility.less"],"names":[],"mappings":"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A;CHkR9C;AGjRmC;EAAW,iBAAA;CHoR9C;AGnRmC;EAAW,iBAAA;CHsR9C;AGrRmC;EAAW,iBAAA;CHwR9C;AGvRmC;EAAW,iBAAA;CH0R9C;AGzRmC;EAAW,iBAAA;CH4R9C;AG3RmC;EAAW,iBAAA;CH8R9C;AG7RmC;EAAW,iBAAA;CHgS9C;AG/RmC;EAAW,iBAAA;CHkS9C;AGjSmC;EAAW,iBAAA;CHoS9C;AGnSmC;EAAW,iBAAA;CHsS9C;AGrSmC;EAAW,iBAAA;CHwS9C;AGvSmC;EAAW,iBAAA;CH0S9C;AGzSmC;EAAW,iBAAA;CH4S9C;AG3SmC;EAAW,iBAAA;CH8S9C;AG7SmC;EAAW,iBAAA;CHgT9C;AG/SmC;EAAW,iBAAA;CHkT9C;AGjTmC;EAAW,iBAAA;CHoT9C;AGnTmC;EAAW,iBAAA;CHsT9C;AGrTmC;EAAW,iBAAA;CHwT9C;AGvTmC;EAAW,iBAAA;CH0T9C;AGzTmC;EAAW,iBAAA;CH4T9C;AG3TmC;EAAW,iBAAA;CH8T9C;AG7TmC;EAAW,iBAAA;CHgU9C;AG/TmC;EAAW,iBAAA;CHkU9C;AGjUmC;EAAW,iBAAA;CHoU9C;AGnUmC;EAAW,iBAAA;CHsU9C;AGrUmC;EAAW,iBAAA;CHwU9C;AGvUmC;EAAW,iBAAA;CH0U9C;AGzUmC;EAAW,iBAAA;CH4U9C;AG3UmC;EAAW,iBAAA;CH8U9C;AG7UmC;EAAW,iBAAA;CHgV9C;AG/UmC;EAAW,iBAAA;CHkV9C;AGjVmC;EAAW,iBAAA;CHoV9C;AGnVmC;EAAW,iBAAA;CHsV9C;AGrVmC;EAAW,iBAAA;CHwV9C;AGvVmC;EAAW,iBAAA;CH0V9C;AGzVmC;EAAW,iBAAA;CH4V9C;AG3VmC;EAAW,iBAAA;CH8V9C;AG7VmC;EAAW,iBAAA;CHgW9C;AG/VmC;EAAW,iBAAA;CHkW9C;AGjWmC;EAAW,iBAAA;CHoW9C;AGnWmC;EAAW,iBAAA;CHsW9C;AGrWmC;EAAW,iBAAA;CHwW9C;AGvWmC;EAAW,iBAAA;CH0W9C;AGzWmC;EAAW,iBAAA;CH4W9C;AG3WmC;EAAW,iBAAA;CH8W9C;AG7WmC;EAAW,iBAAA;CHgX9C;AG/WmC;EAAW,iBAAA;CHkX9C;AGjXmC;EAAW,iBAAA;CHoX9C;AGnXmC;EAAW,iBAAA;CHsX9C;AGrXmC;EAAW,iBAAA;CHwX9C;AGvXmC;EAAW,iBAAA;CH0X9C;AGzXmC;EAAW,iBAAA;CH4X9C;AG3XmC;EAAW,iBAAA;CH8X9C;AG7XmC;EAAW,iBAAA;CHgY9C;AG/XmC;EAAW,iBAAA;CHkY9C;AGjYmC;EAAW,iBAAA;CHoY9C;AGnYmC;EAAW,iBAAA;CHsY9C;AGrYmC;EAAW,iBAAA;CHwY9C;AGvYmC;EAAW,iBAAA;CH0Y9C;AGzYmC;EAAW,iBAAA;CH4Y9C;AG3YmC;EAAW,iBAAA;CH8Y9C;AG7YmC;EAAW,iBAAA;CHgZ9C;AG/YmC;EAAW,iBAAA;CHkZ9C;AGjZmC;EAAW,iBAAA;CHoZ9C;AGnZmC;EAAW,iBAAA;CHsZ9C;AGrZmC;EAAW,iBAAA;CHwZ9C;AGvZmC;EAAW,iBAAA;CH0Z9C;AGzZmC;EAAW,iBAAA;CH4Z9C;AG3ZmC;EAAW,iBAAA;CH8Z9C;AG7ZmC;EAAW,iBAAA;CHga9C;AG/ZmC;EAAW,iBAAA;CHka9C;AGjamC;EAAW,iBAAA;CHoa9C;AGnamC;EAAW,iBAAA;CHsa9C;AGramC;EAAW,iBAAA;CHwa9C;AGvamC;EAAW,iBAAA;CH0a9C;AGzamC;EAAW,iBAAA;CH4a9C;AG3amC;EAAW,iBAAA;CH8a9C;AG7amC;EAAW,iBAAA;CHgb9C;AG/amC;EAAW,iBAAA;CHkb9C;AGjbmC;EAAW,iBAAA;CHob9C;AGnbmC;EAAW,iBAAA;CHsb9C;AGrbmC;EAAW,iBAAA;CHwb9C;AGvbmC;EAAW,iBAAA;CH0b9C;AGzbmC;EAAW,iBAAA;CH4b9C;AG3bmC;EAAW,iBAAA;CH8b9C;AG7bmC;EAAW,iBAAA;CHgc9C;AG/bmC;EAAW,iBAAA;CHkc9C;AGjcmC;EAAW,iBAAA;CHoc9C;AGncmC;EAAW,iBAAA;CHsc9C;AGrcmC;EAAW,iBAAA;CHwc9C;AGvcmC;EAAW,iBAAA;CH0c9C;AGzcmC;EAAW,iBAAA;CH4c9C;AG3cmC;EAAW,iBAAA;CH8c9C;AG7cmC;EAAW,iBAAA;CHgd9C;AG/cmC;EAAW,iBAAA;CHkd9C;AGjdmC;EAAW,iBAAA;CHod9C;AGndmC;EAAW,iBAAA;CHsd9C;AGrdmC;EAAW,iBAAA;CHwd9C;AGvdmC;EAAW,iBAAA;CH0d9C;AGzdmC;EAAW,iBAAA;CH4d9C;AG3dmC;EAAW,iBAAA;CH8d9C;AG7dmC;EAAW,iBAAA;CHge9C;AG/dmC;EAAW,iBAAA;CHke9C;AGjemC;EAAW,iBAAA;CHoe9C;AGnemC;EAAW,iBAAA;CHse9C;AGremC;EAAW,iBAAA;CHwe9C;AGvemC;EAAW,iBAAA;CH0e9C;AGzemC;EAAW,iBAAA;CH4e9C;AG3emC;EAAW,iBAAA;CH8e9C;AG7emC;EAAW,iBAAA;CHgf9C;AG/emC;EAAW,iBAAA;CHkf9C;AGjfmC;EAAW,iBAAA;CHof9C;AGnfmC;EAAW,iBAAA;CHsf9C;AGrfmC;EAAW,iBAAA;CHwf9C;AGvfmC;EAAW,iBAAA;CH0f9C;AGzfmC;EAAW,iBAAA;CH4f9C;AG3fmC;EAAW,iBAAA;CH8f9C;AG7fmC;EAAW,iBAAA;CHggB9C;AG/fmC;EAAW,iBAAA;CHkgB9C;AGjgBmC;EAAW,iBAAA;CHogB9C;AGngBmC;EAAW,iBAAA;CHsgB9C;AGrgBmC;EAAW,iBAAA;CHwgB9C;AGvgBmC;EAAW,iBAAA;CH0gB9C;AGzgBmC;EAAW,iBAAA;CH4gB9C;AG3gBmC;EAAW,iBAAA;CH8gB9C;AG7gBmC;EAAW,iBAAA;CHghB9C;AG/gBmC;EAAW,iBAAA;CHkhB9C;AGjhBmC;EAAW,iBAAA;CHohB9C;AGnhBmC;EAAW,iBAAA;CHshB9C;AGrhBmC;EAAW,iBAAA;CHwhB9C;AGvhBmC;EAAW,iBAAA;CH0hB9C;AGzhBmC;EAAW,iBAAA;CH4hB9C;AG3hBmC;EAAW,iBAAA;CH8hB9C;AG7hBmC;EAAW,iBAAA;CHgiB9C;AG/hBmC;EAAW,iBAAA;CHkiB9C;AGjiBmC;EAAW,iBAAA;CHoiB9C;AGniBmC;EAAW,iBAAA;CHsiB9C;AGriBmC;EAAW,iBAAA;CHwiB9C;AGviBmC;EAAW,iBAAA;CH0iB9C;AGziBmC;EAAW,iBAAA;CH4iB9C;AG3iBmC;EAAW,iBAAA;CH8iB9C;AG7iBmC;EAAW,iBAAA;CHgjB9C;AG/iBmC;EAAW,iBAAA;CHkjB9C;AGjjBmC;EAAW,iBAAA;CHojB9C;AGnjBmC;EAAW,iBAAA;CHsjB9C;AGrjBmC;EAAW,iBAAA;CHwjB9C;AGvjBmC;EAAW,iBAAA;CH0jB9C;AGzjBmC;EAAW,iBAAA;CH4jB9C;AG3jBmC;EAAW,iBAAA;CH8jB9C;AG7jBmC;EAAW,iBAAA;CHgkB9C;AG/jBmC;EAAW,iBAAA;CHkkB9C;AGjkBmC;EAAW,iBAAA;CHokB9C;AGnkBmC;EAAW,iBAAA;CHskB9C;AGrkBmC;EAAW,iBAAA;CHwkB9C;AGvkBmC;EAAW,iBAAA;CH0kB9C;AGzkBmC;EAAW,iBAAA;CH4kB9C;AG3kBmC;EAAW,iBAAA;CH8kB9C;AG7kBmC;EAAW,iBAAA;CHglB9C;AG/kBmC;EAAW,iBAAA;CHklB9C;AGjlBmC;EAAW,iBAAA;CHolB9C;AGnlBmC;EAAW,iBAAA;CHslB9C;AGrlBmC;EAAW,iBAAA;CHwlB9C;AGvlBmC;EAAW,iBAAA;CH0lB9C;AGzlBmC;EAAW,iBAAA;CH4lB9C;AG3lBmC;EAAW,iBAAA;CH8lB9C;AG7lBmC;EAAW,iBAAA;CHgmB9C;AG/lBmC;EAAW,iBAAA;CHkmB9C;AGjmBmC;EAAW,iBAAA;CHomB9C;AGnmBmC;EAAW,iBAAA;CHsmB9C;AGrmBmC;EAAW,iBAAA;CHwmB9C;AGvmBmC;EAAW,iBAAA;CH0mB9C;AGzmBmC;EAAW,iBAAA;CH4mB9C;AG3mBmC;EAAW,iBAAA;CH8mB9C;AG7mBmC;EAAW,iBAAA;CHgnB9C;AG/mBmC;EAAW,iBAAA;CHknB9C;AGjnBmC;EAAW,iBAAA;CHonB9C;AGnnBmC;EAAW,iBAAA;CHsnB9C;AGrnBmC;EAAW,iBAAA;CHwnB9C;AGvnBmC;EAAW,iBAAA;CH0nB9C;AGznBmC;EAAW,iBAAA;CH4nB9C;AG3nBmC;EAAW,iBAAA;CH8nB9C;AG7nBmC;EAAW,iBAAA;CHgoB9C;AG/nBmC;EAAW,iBAAA;CHkoB9C;AGjoBmC;EAAW,iBAAA;CHooB9C;AGnoBmC;EAAW,iBAAA;CHsoB9C;AGroBmC;EAAW,iBAAA;CHwoB9C;AG/nBmC;EAAW,iBAAA;CHkoB9C;AGjoBmC;EAAW,iBAAA;CHooB9C;AGnoBmC;EAAW,iBAAA;CHsoB9C;AGroBmC;EAAW,iBAAA;CHwoB9C;AGvoBmC;EAAW,iBAAA;CH0oB9C;AGzoBmC;EAAW,iBAAA;CH4oB9C;AG3oBmC;EAAW,iBAAA;CH8oB9C;AG7oBmC;EAAW,iBAAA;CHgpB9C;AG/oBmC;EAAW,iBAAA;CHkpB9C;AGjpBmC;EAAW,iBAAA;CHopB9C;AGnpBmC;EAAW,iBAAA;CHspB9C;AGrpBmC;EAAW,iBAAA;CHwpB9C;AGvpBmC;EAAW,iBAAA;CH0pB9C;AGzpBmC;EAAW,iBAAA;CH4pB9C;AG3pBmC;EAAW,iBAAA;CH8pB9C;AG7pBmC;EAAW,iBAAA;CHgqB9C;AG/pBmC;EAAW,iBAAA;CHkqB9C;AGjqBmC;EAAW,iBAAA;CHoqB9C;AGnqBmC;EAAW,iBAAA;CHsqB9C;AGrqBmC;EAAW,iBAAA;CHwqB9C;AGvqBmC;EAAW,iBAAA;CH0qB9C;AGzqBmC;EAAW,iBAAA;CH4qB9C;AG3qBmC;EAAW,iBAAA;CH8qB9C;AG7qBmC;EAAW,iBAAA;CHgrB9C;AG/qBmC;EAAW,iBAAA;CHkrB9C;AGjrBmC;EAAW,iBAAA;CHorB9C;AGnrBmC;EAAW,iBAAA;CHsrB9C;AGrrBmC;EAAW,iBAAA;CHwrB9C;AGvrBmC;EAAW,iBAAA;CH0rB9C;AGzrBmC;EAAW,iBAAA;CH4rB9C;AG3rBmC;EAAW,iBAAA;CH8rB9C;AG7rBmC;EAAW,iBAAA;CHgsB9C;AG/rBmC;EAAW,iBAAA;CHksB9C;AGjsBmC;EAAW,iBAAA;CHosB9C;AGnsBmC;EAAW,iBAAA;CHssB9C;AGrsBmC;EAAW,iBAAA;CHwsB9C;AGvsBmC;EAAW,iBAAA;CH0sB9C;AGzsBmC;EAAW,iBAAA;CH4sB9C;AG3sBmC;EAAW,iBAAA;CH8sB9C;AG7sBmC;EAAW,iBAAA;CHgtB9C;AG/sBmC;EAAW,iBAAA;CHktB9C;AGjtBmC;EAAW,iBAAA;CHotB9C;AGntBmC;EAAW,iBAAA;CHstB9C;AGrtBmC;EAAW,iBAAA;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rDA;EC8DG,oBAAA;CfwnDH;ActrDA;EC8DG,oBAAA;Cf2nDH;AczrDA;EC8DG,WAAA;Cf8nDH;Ac5rDA;EC8DG,oBAAA;CfioDH;Ac/rDA;EC8DG,oBAAA;CfooDH;AclsDA;EC8DG,WAAA;CfuoDH;AcrsDA;EC8DG,oBAAA;Cf0oDH;AcxsDA;EC8DG,oBAAA;Cf6oDH;Ac3sDA;EC8DG,WAAA;CfgpDH;Ac9sDA;EC8DG,oBAAA;CfmpDH;AcjtDA;EC8DG,mBAAA;CfspDH;AcptDA;ECmEG,YAAA;CfopDH;AcvtDA;ECoDG,WAAA;CfsqDH;Ac1tDA;ECoDG,mBAAA;CfyqDH;Ac7tDA;ECoDG,mBAAA;Cf4qDH;AchuDA;ECoDG,UAAA;Cf+qDH;AcnuDA;ECoDG,mBAAA;CfkrDH;ActuDA;ECoDG,mBAAA;CfqrDH;AczuDA;ECoDG,UAAA;CfwrDH;Ac5uDA;ECoDG,mBAAA;Cf2rDH;Ac/uDA;ECoDG,mBAAA;Cf8rDH;AclvDA;ECoDG,UAAA;CfisDH;AcrvDA;ECoDG,mBAAA;CfosDH;AcxvDA;ECoDG,kBAAA;CfusDH;Ac3vDA;ECyDG,WAAA;CfqsDH;Ac9vDA;ECwEG,kBAAA;CfyrDH;AcjwDA;ECwEG,0BAAA;Cf4rDH;AcpwDA;ECwEG,0BAAA;Cf+rDH;AcvwDA;ECwEG,iBAAA;CfksDH;Ac1wDA;ECwEG,0BAAA;CfqsDH;Ac7wDA;ECwEG,0BAAA;CfwsDH;AchxDA;ECwEG,iBAAA;Cf2sDH;AcnxDA;ECwEG,0BAAA;Cf8sDH;ActxDA;ECwEG,0BAAA;CfitDH;AczxDA;ECwEG,iBAAA;CfotDH;Ac5xDA;ECwEG,0BAAA;CfutDH;Ac/xDA;ECwEG,yBAAA;Cf0tDH;AclyDA;ECwEG,gBAAA;Cf6tDH;Aa5tDD;ECzEC;;;;;;;;;;;;ICuCK,YAAA;Gf6wDH;EcpzDF;IC+CG,YAAA;GfwwDD;EcvzDF;IC+CG,oBAAA;Gf2wDD;Ec1zDF;IC+CG,oBAAA;Gf8wDD;Ec7zDF;IC+CG,WAAA;GfixDD;Ech0DF;IC+CG,oBAAA;GfoxDD;Ecn0DF;IC+CG,oBAAA;GfuxDD;Ect0DF;IC+CG,WAAA;Gf0xDD;Ecz0DF;IC+CG,oBAAA;Gf6xDD;Ec50DF;IC+CG,oBAAA;GfgyDD;Ec/0DF;IC+CG,WAAA;GfmyDD;Ecl1DF;IC+CG,oBAAA;GfsyDD;Ecr1DF;IC+CG,mBAAA;GfyyDD;Ecx1DF;IC8DG,YAAA;Gf6xDD;Ec31DF;IC8DG,oBAAA;GfgyDD;Ec91DF;IC8DG,oBAAA;GfmyDD;Ecj2DF;IC8DG,WAAA;GfsyDD;Ecp2DF;IC8DG,oBAAA;GfyyDD;Ecv2DF;IC8DG,oBAAA;Gf4yDD;Ec12DF;IC8DG,WAAA;Gf+yDD;Ec72DF;IC8DG,oBAAA;GfkzDD;Ech3DF;IC8DG,oBAAA;GfqzDD;Ecn3DF;IC8DG,WAAA;GfwzDD;Ect3DF;IC8DG,oBAAA;Gf2zDD;Ecz3DF;IC8DG,mBAAA;Gf8zDD;Ec53DF;ICmEG,YAAA;Gf4zDD;Ec/3DF;ICoDG,WAAA;Gf80DD;Ecl4DF;ICoDG,mBAAA;Gfi1DD;Ecr4DF;ICoDG,mBAAA;Gfo1DD;Ecx4DF;ICoDG,UAAA;Gfu1DD;Ec34DF;ICoDG,mBAAA;Gf01DD;Ec94DF;ICoDG,mBAAA;Gf61DD;Ecj5DF;ICoDG,UAAA;Gfg2DD;Ecp5DF;ICoDG,mBAAA;Gfm2DD;Ecv5DF;ICoDG,mBAAA;Gfs2DD;Ec15DF;ICoDG,UAAA;Gfy2DD;Ec75DF;ICoDG,mBAAA;Gf42DD;Ech6DF;ICoDG,kBAAA;Gf+2DD;Ecn6DF;ICyDG,WAAA;Gf62DD;Ect6DF;ICwEG,kBAAA;Gfi2DD;Ecz6DF;ICwEG,0BAAA;Gfo2DD;Ec56DF;ICwEG,0BAAA;Gfu2DD;Ec/6DF;ICwEG,iBAAA;Gf02DD;Ecl7DF;ICwEG,0BAAA;Gf62DD;Ecr7DF;ICwEG,0BAAA;Gfg3DD;Ecx7DF;ICwEG,iBAAA;Gfm3DD;Ec37DF;ICwEG,0BAAA;Gfs3DD;Ec97DF;ICwEG,0BAAA;Gfy3DD;Ecj8DF;ICwEG,iBAAA;Gf43DD;Ecp8DF;ICwEG,0BAAA;Gf+3DD;Ecv8DF;ICwEG,yBAAA;Gfk4DD;Ec18DF;ICwEG,gBAAA;Gfq4DD;CACF;Aa53DD;EClFC;;;;;;;;;;;;ICuCK,YAAA;Gfs7DH;Ec79DF;IC+CG,YAAA;Gfi7DD;Ech+DF;IC+CG,oBAAA;Gfo7DD;Ecn+DF;IC+CG,oBAAA;Gfu7DD;Ect+DF;IC+CG,WAAA;Gf07DD;Ecz+DF;IC+CG,oBAAA;Gf67DD;Ec5+DF;IC+CG,oBAAA;Gfg8DD;Ec/+DF;IC+CG,WAAA;Gfm8DD;Ecl/DF;IC+CG,oBAAA;Gfs8DD;Ecr/DF;IC+CG,oBAAA;Gfy8DD;Ecx/DF;IC+CG,WAAA;Gf48DD;Ec3/DF;IC+CG,oBAAA;Gf+8DD;Ec9/DF;IC+CG,mBAAA;Gfk9DD;EcjgEF;IC8DG,YAAA;Gfs8DD;EcpgEF;IC8DG,oBAAA;Gfy8DD;EcvgEF;IC8DG,oBAAA;Gf48DD;Ec1gEF;IC8DG,WAAA;Gf+8DD;Ec7gEF;IC8DG,oBAAA;Gfk9DD;EchhEF;IC8DG,oBAAA;Gfq9DD;EcnhEF;IC8DG,WAAA;Gfw9DD;EcthEF;IC8DG,oBAAA;Gf29DD;EczhEF;IC8DG,oBAAA;Gf89DD;Ec5hEF;IC8DG,WAAA;Gfi+DD;Ec/hEF;IC8DG,oBAAA;Gfo+DD;EcliEF;IC8DG,mBAAA;Gfu+DD;EcriEF;ICmEG,YAAA;Gfq+DD;EcxiEF;ICoDG,WAAA;Gfu/DD;Ec3iEF;ICoDG,mBAAA;Gf0/DD;Ec9iEF;ICoDG,mBAAA;Gf6/DD;EcjjEF;ICoDG,UAAA;GfggED;EcpjEF;ICoDG,mBAAA;GfmgED;EcvjEF;ICoDG,mBAAA;GfsgED;Ec1jEF;ICoDG,UAAA;GfygED;Ec7jEF;ICoDG,mBAAA;Gf4gED;EchkEF;ICoDG,mBAAA;Gf+gED;EcnkEF;ICoDG,UAAA;GfkhED;EctkEF;ICoDG,mBAAA;GfqhED;EczkEF;ICoDG,kBAAA;GfwhED;Ec5kEF;ICyDG,WAAA;GfshED;Ec/kEF;ICwEG,kBAAA;Gf0gED;EcllEF;ICwEG,0BAAA;Gf6gED;EcrlEF;ICwEG,0BAAA;GfghED;EcxlEF;ICwEG,iBAAA;GfmhED;Ec3lEF;ICwEG,0BAAA;GfshED;Ec9lEF;ICwEG,0BAAA;GfyhED;EcjmEF;ICwEG,iBAAA;Gf4hED;EcpmEF;ICwEG,0BAAA;Gf+hED;EcvmEF;ICwEG,0BAAA;GfkiED;Ec1mEF;ICwEG,iBAAA;GfqiED;Ec7mEF;ICwEG,0BAAA;GfwiED;EchnEF;ICwEG,yBAAA;Gf2iED;EcnnEF;ICwEG,gBAAA;Gf8iED;CACF;Aa5hED;EC3FC;;;;;;;;;;;;ICuCK,YAAA;Gf+lEH;EctoEF;IC+CG,YAAA;Gf0lED;EczoEF;IC+CG,oBAAA;Gf6lED;Ec5oEF;IC+CG,oBAAA;GfgmED;Ec/oEF;IC+CG,WAAA;GfmmED;EclpEF;IC+CG,oBAAA;GfsmED;EcrpEF;IC+CG,oBAAA;GfymED;EcxpEF;IC+CG,WAAA;Gf4mED;Ec3pEF;IC+CG,oBAAA;Gf+mED;Ec9pEF;IC+CG,oBAAA;GfknED;EcjqEF;IC+CG,WAAA;GfqnED;EcpqEF;IC+CG,oBAAA;GfwnED;EcvqEF;IC+CG,mBAAA;Gf2nED;Ec1qEF;IC8DG,YAAA;Gf+mED;Ec7qEF;IC8DG,oBAAA;GfknED;EchrEF;IC8DG,oBAAA;GfqnED;EcnrEF;IC8DG,WAAA;GfwnED;EctrEF;IC8DG,oBAAA;Gf2nED;EczrEF;IC8DG,oBAAA;Gf8nED;Ec5rEF;IC8DG,WAAA;GfioED;Ec/rEF;IC8DG,oBAAA;GfooED;EclsEF;IC8DG,oBAAA;GfuoED;EcrsEF;IC8DG,WAAA;Gf0oED;EcxsEF;IC8DG,oBAAA;Gf6oED;Ec3sEF;IC8DG,mBAAA;GfgpED;Ec9sEF;ICmEG,YAAA;Gf8oED;EcjtEF;ICoDG,WAAA;GfgqED;EcptEF;ICoDG,mBAAA;GfmqED;EcvtEF;ICoDG,mBAAA;GfsqED;Ec1tEF;ICoDG,UAAA;GfyqED;Ec7tEF;ICoDG,mBAAA;Gf4qED;EchuEF;ICoDG,mBAAA;Gf+qED;EcnuEF;ICoDG,UAAA;GfkrED;EctuEF;ICoDG,mBAAA;GfqrED;EczuEF;ICoDG,mBAAA;GfwrED;Ec5uEF;ICoDG,UAAA;Gf2rED;Ec/uEF;ICoDG,mBAAA;Gf8rED;EclvEF;ICoDG,kBAAA;GfisED;EcrvEF;ICyDG,WAAA;Gf+rED;EcxvEF;ICwEG,kBAAA;GfmrED;Ec3vEF;ICwEG,0BAAA;GfsrED;Ec9vEF;ICwEG,0BAAA;GfyrED;EcjwEF;ICwEG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","file":"bootstrap.css","sourcesContent":["/*!\n * Bootstrap v3.4.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */\nhtml {\n font-family: sans-serif;\n -ms-text-size-adjust: 100%;\n -webkit-text-size-adjust: 100%;\n}\nbody {\n margin: 0;\n}\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n display: block;\n}\naudio,\ncanvas,\nprogress,\nvideo {\n display: inline-block;\n vertical-align: baseline;\n}\naudio:not([controls]) {\n display: none;\n height: 0;\n}\n[hidden],\ntemplate {\n display: none;\n}\na {\n background-color: transparent;\n}\na:active,\na:hover {\n outline: 0;\n}\nabbr[title] {\n border-bottom: none;\n text-decoration: underline;\n text-decoration: underline dotted;\n}\nb,\nstrong {\n font-weight: bold;\n}\ndfn {\n font-style: italic;\n}\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\nmark {\n background: #ff0;\n color: #000;\n}\nsmall {\n font-size: 80%;\n}\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\nsup {\n top: -0.5em;\n}\nsub {\n bottom: -0.25em;\n}\nimg {\n border: 0;\n}\nsvg:not(:root) {\n overflow: hidden;\n}\nfigure {\n margin: 1em 40px;\n}\nhr {\n box-sizing: content-box;\n height: 0;\n}\npre {\n overflow: auto;\n}\ncode,\nkbd,\npre,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em;\n}\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n color: inherit;\n font: inherit;\n margin: 0;\n}\nbutton {\n overflow: visible;\n}\nbutton,\nselect {\n text-transform: none;\n}\nbutton,\nhtml input[type=\"button\"],\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n -webkit-appearance: button;\n cursor: pointer;\n}\nbutton[disabled],\nhtml input[disabled] {\n cursor: default;\n}\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n border: 0;\n padding: 0;\n}\ninput {\n line-height: normal;\n}\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n box-sizing: border-box;\n padding: 0;\n}\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\ninput[type=\"search\"] {\n -webkit-appearance: textfield;\n box-sizing: content-box;\n}\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\nfieldset {\n border: 1px solid #c0c0c0;\n margin: 0 2px;\n padding: 0.35em 0.625em 0.75em;\n}\nlegend {\n border: 0;\n padding: 0;\n}\ntextarea {\n overflow: auto;\n}\noptgroup {\n font-weight: bold;\n}\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n}\ntd,\nth {\n padding: 0;\n}\n/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */\n@media print {\n *,\n *:before,\n *:after {\n color: #000 !important;\n text-shadow: none !important;\n background: transparent !important;\n box-shadow: none !important;\n }\n a,\n a:visited {\n text-decoration: underline;\n }\n a[href]:after {\n content: \" (\" attr(href) \")\";\n }\n abbr[title]:after {\n content: \" (\" attr(title) \")\";\n }\n a[href^=\"#\"]:after,\n a[href^=\"javascript:\"]:after {\n content: \"\";\n }\n pre,\n blockquote {\n border: 1px solid #999;\n page-break-inside: avoid;\n }\n thead {\n display: table-header-group;\n }\n tr,\n img {\n page-break-inside: avoid;\n }\n img {\n max-width: 100% !important;\n }\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n h2,\n h3 {\n page-break-after: avoid;\n }\n .navbar {\n display: none;\n }\n .btn > .caret,\n .dropup > .btn > .caret {\n border-top-color: #000 !important;\n }\n .label {\n border: 1px solid #000;\n }\n .table {\n border-collapse: collapse !important;\n }\n .table td,\n .table th {\n background-color: #fff !important;\n }\n .table-bordered th,\n .table-bordered td {\n border: 1px solid #ddd !important;\n }\n}\n@font-face {\n font-family: \"Glyphicons Halflings\";\n src: url(\"../fonts/glyphicons-halflings-regular.eot\");\n src: url(\"../fonts/glyphicons-halflings-regular.eot?#iefix\") format(\"embedded-opentype\"), url(\"../fonts/glyphicons-halflings-regular.woff2\") format(\"woff2\"), url(\"../fonts/glyphicons-halflings-regular.woff\") format(\"woff\"), url(\"../fonts/glyphicons-halflings-regular.ttf\") format(\"truetype\"), url(\"../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular\") format(\"svg\");\n}\n.glyphicon {\n position: relative;\n top: 1px;\n display: inline-block;\n font-family: \"Glyphicons Halflings\";\n font-style: normal;\n font-weight: 400;\n line-height: 1;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n.glyphicon-asterisk:before {\n content: \"\\002a\";\n}\n.glyphicon-plus:before {\n content: \"\\002b\";\n}\n.glyphicon-euro:before,\n.glyphicon-eur:before {\n content: \"\\20ac\";\n}\n.glyphicon-minus:before {\n content: \"\\2212\";\n}\n.glyphicon-cloud:before {\n content: \"\\2601\";\n}\n.glyphicon-envelope:before {\n content: \"\\2709\";\n}\n.glyphicon-pencil:before {\n content: \"\\270f\";\n}\n.glyphicon-glass:before {\n content: \"\\e001\";\n}\n.glyphicon-music:before {\n content: \"\\e002\";\n}\n.glyphicon-search:before {\n content: \"\\e003\";\n}\n.glyphicon-heart:before {\n content: \"\\e005\";\n}\n.glyphicon-star:before {\n content: \"\\e006\";\n}\n.glyphicon-star-empty:before {\n content: \"\\e007\";\n}\n.glyphicon-user:before {\n content: \"\\e008\";\n}\n.glyphicon-film:before {\n content: \"\\e009\";\n}\n.glyphicon-th-large:before {\n content: \"\\e010\";\n}\n.glyphicon-th:before {\n content: \"\\e011\";\n}\n.glyphicon-th-list:before {\n content: \"\\e012\";\n}\n.glyphicon-ok:before {\n content: \"\\e013\";\n}\n.glyphicon-remove:before {\n content: \"\\e014\";\n}\n.glyphicon-zoom-in:before {\n content: \"\\e015\";\n}\n.glyphicon-zoom-out:before {\n content: \"\\e016\";\n}\n.glyphicon-off:before {\n content: \"\\e017\";\n}\n.glyphicon-signal:before {\n content: \"\\e018\";\n}\n.glyphicon-cog:before {\n content: \"\\e019\";\n}\n.glyphicon-trash:before {\n content: \"\\e020\";\n}\n.glyphicon-home:before {\n content: \"\\e021\";\n}\n.glyphicon-file:before {\n content: \"\\e022\";\n}\n.glyphicon-time:before {\n content: \"\\e023\";\n}\n.glyphicon-road:before {\n content: \"\\e024\";\n}\n.glyphicon-download-alt:before {\n content: \"\\e025\";\n}\n.glyphicon-download:before {\n content: \"\\e026\";\n}\n.glyphicon-upload:before {\n content: \"\\e027\";\n}\n.glyphicon-inbox:before {\n content: \"\\e028\";\n}\n.glyphicon-play-circle:before {\n content: \"\\e029\";\n}\n.glyphicon-repeat:before {\n content: \"\\e030\";\n}\n.glyphicon-refresh:before {\n content: \"\\e031\";\n}\n.glyphicon-list-alt:before {\n content: \"\\e032\";\n}\n.glyphicon-lock:before {\n content: \"\\e033\";\n}\n.glyphicon-flag:before {\n content: \"\\e034\";\n}\n.glyphicon-headphones:before {\n content: \"\\e035\";\n}\n.glyphicon-volume-off:before {\n content: \"\\e036\";\n}\n.glyphicon-volume-down:before {\n content: \"\\e037\";\n}\n.glyphicon-volume-up:before {\n content: \"\\e038\";\n}\n.glyphicon-qrcode:before {\n content: \"\\e039\";\n}\n.glyphicon-barcode:before {\n content: \"\\e040\";\n}\n.glyphicon-tag:before {\n content: \"\\e041\";\n}\n.glyphicon-tags:before {\n content: \"\\e042\";\n}\n.glyphicon-book:before {\n content: \"\\e043\";\n}\n.glyphicon-bookmark:before {\n content: \"\\e044\";\n}\n.glyphicon-print:before {\n content: \"\\e045\";\n}\n.glyphicon-camera:before {\n content: \"\\e046\";\n}\n.glyphicon-font:before {\n content: \"\\e047\";\n}\n.glyphicon-bold:before {\n content: \"\\e048\";\n}\n.glyphicon-italic:before {\n content: \"\\e049\";\n}\n.glyphicon-text-height:before {\n content: \"\\e050\";\n}\n.glyphicon-text-width:before {\n content: \"\\e051\";\n}\n.glyphicon-align-left:before {\n content: \"\\e052\";\n}\n.glyphicon-align-center:before {\n content: \"\\e053\";\n}\n.glyphicon-align-right:before {\n content: \"\\e054\";\n}\n.glyphicon-align-justify:before {\n content: \"\\e055\";\n}\n.glyphicon-list:before {\n content: \"\\e056\";\n}\n.glyphicon-indent-left:before {\n content: \"\\e057\";\n}\n.glyphicon-indent-right:before {\n content: \"\\e058\";\n}\n.glyphicon-facetime-video:before {\n content: \"\\e059\";\n}\n.glyphicon-picture:before {\n content: \"\\e060\";\n}\n.glyphicon-map-marker:before {\n content: \"\\e062\";\n}\n.glyphicon-adjust:before {\n content: \"\\e063\";\n}\n.glyphicon-tint:before {\n content: \"\\e064\";\n}\n.glyphicon-edit:before {\n content: \"\\e065\";\n}\n.glyphicon-share:before {\n content: \"\\e066\";\n}\n.glyphicon-check:before {\n content: \"\\e067\";\n}\n.glyphicon-move:before {\n content: \"\\e068\";\n}\n.glyphicon-step-backward:before {\n content: \"\\e069\";\n}\n.glyphicon-fast-backward:before {\n content: \"\\e070\";\n}\n.glyphicon-backward:before {\n content: \"\\e071\";\n}\n.glyphicon-play:before {\n content: \"\\e072\";\n}\n.glyphicon-pause:before {\n content: \"\\e073\";\n}\n.glyphicon-stop:before {\n content: \"\\e074\";\n}\n.glyphicon-forward:before {\n content: \"\\e075\";\n}\n.glyphicon-fast-forward:before {\n content: \"\\e076\";\n}\n.glyphicon-step-forward:before {\n content: \"\\e077\";\n}\n.glyphicon-eject:before {\n content: \"\\e078\";\n}\n.glyphicon-chevron-left:before {\n content: \"\\e079\";\n}\n.glyphicon-chevron-right:before {\n content: \"\\e080\";\n}\n.glyphicon-plus-sign:before {\n content: \"\\e081\";\n}\n.glyphicon-minus-sign:before {\n content: \"\\e082\";\n}\n.glyphicon-remove-sign:before {\n content: \"\\e083\";\n}\n.glyphicon-ok-sign:before {\n content: \"\\e084\";\n}\n.glyphicon-question-sign:before {\n content: \"\\e085\";\n}\n.glyphicon-info-sign:before {\n content: \"\\e086\";\n}\n.glyphicon-screenshot:before {\n content: \"\\e087\";\n}\n.glyphicon-remove-circle:before {\n content: \"\\e088\";\n}\n.glyphicon-ok-circle:before {\n content: \"\\e089\";\n}\n.glyphicon-ban-circle:before {\n content: \"\\e090\";\n}\n.glyphicon-arrow-left:before {\n content: \"\\e091\";\n}\n.glyphicon-arrow-right:before {\n content: \"\\e092\";\n}\n.glyphicon-arrow-up:before {\n content: \"\\e093\";\n}\n.glyphicon-arrow-down:before {\n content: \"\\e094\";\n}\n.glyphicon-share-alt:before {\n content: \"\\e095\";\n}\n.glyphicon-resize-full:before {\n content: \"\\e096\";\n}\n.glyphicon-resize-small:before {\n content: \"\\e097\";\n}\n.glyphicon-exclamation-sign:before {\n content: \"\\e101\";\n}\n.glyphicon-gift:before {\n content: \"\\e102\";\n}\n.glyphicon-leaf:before {\n content: \"\\e103\";\n}\n.glyphicon-fire:before {\n content: \"\\e104\";\n}\n.glyphicon-eye-open:before {\n content: \"\\e105\";\n}\n.glyphicon-eye-close:before {\n content: \"\\e106\";\n}\n.glyphicon-warning-sign:before {\n content: \"\\e107\";\n}\n.glyphicon-plane:before {\n content: \"\\e108\";\n}\n.glyphicon-calendar:before {\n content: \"\\e109\";\n}\n.glyphicon-random:before {\n content: \"\\e110\";\n}\n.glyphicon-comment:before {\n content: \"\\e111\";\n}\n.glyphicon-magnet:before {\n content: \"\\e112\";\n}\n.glyphicon-chevron-up:before {\n content: \"\\e113\";\n}\n.glyphicon-chevron-down:before {\n content: \"\\e114\";\n}\n.glyphicon-retweet:before {\n content: \"\\e115\";\n}\n.glyphicon-shopping-cart:before {\n content: \"\\e116\";\n}\n.glyphicon-folder-close:before {\n content: \"\\e117\";\n}\n.glyphicon-folder-open:before {\n content: \"\\e118\";\n}\n.glyphicon-resize-vertical:before {\n content: \"\\e119\";\n}\n.glyphicon-resize-horizontal:before {\n content: \"\\e120\";\n}\n.glyphicon-hdd:before {\n content: \"\\e121\";\n}\n.glyphicon-bullhorn:before {\n content: \"\\e122\";\n}\n.glyphicon-bell:before {\n content: \"\\e123\";\n}\n.glyphicon-certificate:before {\n content: \"\\e124\";\n}\n.glyphicon-thumbs-up:before {\n content: \"\\e125\";\n}\n.glyphicon-thumbs-down:before {\n content: \"\\e126\";\n}\n.glyphicon-hand-right:before {\n content: \"\\e127\";\n}\n.glyphicon-hand-left:before {\n content: \"\\e128\";\n}\n.glyphicon-hand-up:before {\n content: \"\\e129\";\n}\n.glyphicon-hand-down:before {\n content: \"\\e130\";\n}\n.glyphicon-circle-arrow-right:before {\n content: \"\\e131\";\n}\n.glyphicon-circle-arrow-left:before {\n content: \"\\e132\";\n}\n.glyphicon-circle-arrow-up:before {\n content: \"\\e133\";\n}\n.glyphicon-circle-arrow-down:before {\n content: \"\\e134\";\n}\n.glyphicon-globe:before {\n content: \"\\e135\";\n}\n.glyphicon-wrench:before {\n content: \"\\e136\";\n}\n.glyphicon-tasks:before {\n content: \"\\e137\";\n}\n.glyphicon-filter:before {\n content: \"\\e138\";\n}\n.glyphicon-briefcase:before {\n content: \"\\e139\";\n}\n.glyphicon-fullscreen:before {\n content: \"\\e140\";\n}\n.glyphicon-dashboard:before {\n content: \"\\e141\";\n}\n.glyphicon-paperclip:before {\n content: \"\\e142\";\n}\n.glyphicon-heart-empty:before {\n content: \"\\e143\";\n}\n.glyphicon-link:before {\n content: \"\\e144\";\n}\n.glyphicon-phone:before {\n content: \"\\e145\";\n}\n.glyphicon-pushpin:before {\n content: \"\\e146\";\n}\n.glyphicon-usd:before {\n content: \"\\e148\";\n}\n.glyphicon-gbp:before {\n content: \"\\e149\";\n}\n.glyphicon-sort:before {\n content: \"\\e150\";\n}\n.glyphicon-sort-by-alphabet:before {\n content: \"\\e151\";\n}\n.glyphicon-sort-by-alphabet-alt:before {\n content: \"\\e152\";\n}\n.glyphicon-sort-by-order:before {\n content: \"\\e153\";\n}\n.glyphicon-sort-by-order-alt:before {\n content: \"\\e154\";\n}\n.glyphicon-sort-by-attributes:before {\n content: \"\\e155\";\n}\n.glyphicon-sort-by-attributes-alt:before {\n content: \"\\e156\";\n}\n.glyphicon-unchecked:before {\n content: \"\\e157\";\n}\n.glyphicon-expand:before {\n content: \"\\e158\";\n}\n.glyphicon-collapse-down:before {\n content: \"\\e159\";\n}\n.glyphicon-collapse-up:before {\n content: \"\\e160\";\n}\n.glyphicon-log-in:before {\n content: \"\\e161\";\n}\n.glyphicon-flash:before {\n content: \"\\e162\";\n}\n.glyphicon-log-out:before {\n content: \"\\e163\";\n}\n.glyphicon-new-window:before {\n content: \"\\e164\";\n}\n.glyphicon-record:before {\n content: \"\\e165\";\n}\n.glyphicon-save:before {\n content: \"\\e166\";\n}\n.glyphicon-open:before {\n content: \"\\e167\";\n}\n.glyphicon-saved:before {\n content: \"\\e168\";\n}\n.glyphicon-import:before {\n content: \"\\e169\";\n}\n.glyphicon-export:before {\n content: \"\\e170\";\n}\n.glyphicon-send:before {\n content: \"\\e171\";\n}\n.glyphicon-floppy-disk:before {\n content: \"\\e172\";\n}\n.glyphicon-floppy-saved:before {\n content: \"\\e173\";\n}\n.glyphicon-floppy-remove:before {\n content: \"\\e174\";\n}\n.glyphicon-floppy-save:before {\n content: \"\\e175\";\n}\n.glyphicon-floppy-open:before {\n content: \"\\e176\";\n}\n.glyphicon-credit-card:before {\n content: \"\\e177\";\n}\n.glyphicon-transfer:before {\n content: \"\\e178\";\n}\n.glyphicon-cutlery:before {\n content: \"\\e179\";\n}\n.glyphicon-header:before {\n content: \"\\e180\";\n}\n.glyphicon-compressed:before {\n content: \"\\e181\";\n}\n.glyphicon-earphone:before {\n content: \"\\e182\";\n}\n.glyphicon-phone-alt:before {\n content: \"\\e183\";\n}\n.glyphicon-tower:before {\n content: \"\\e184\";\n}\n.glyphicon-stats:before {\n content: \"\\e185\";\n}\n.glyphicon-sd-video:before {\n content: \"\\e186\";\n}\n.glyphicon-hd-video:before {\n content: \"\\e187\";\n}\n.glyphicon-subtitles:before {\n content: \"\\e188\";\n}\n.glyphicon-sound-stereo:before {\n content: \"\\e189\";\n}\n.glyphicon-sound-dolby:before {\n content: \"\\e190\";\n}\n.glyphicon-sound-5-1:before {\n content: \"\\e191\";\n}\n.glyphicon-sound-6-1:before {\n content: \"\\e192\";\n}\n.glyphicon-sound-7-1:before {\n content: \"\\e193\";\n}\n.glyphicon-copyright-mark:before {\n content: \"\\e194\";\n}\n.glyphicon-registration-mark:before {\n content: \"\\e195\";\n}\n.glyphicon-cloud-download:before {\n content: \"\\e197\";\n}\n.glyphicon-cloud-upload:before {\n content: \"\\e198\";\n}\n.glyphicon-tree-conifer:before {\n content: \"\\e199\";\n}\n.glyphicon-tree-deciduous:before {\n content: \"\\e200\";\n}\n.glyphicon-cd:before {\n content: \"\\e201\";\n}\n.glyphicon-save-file:before {\n content: \"\\e202\";\n}\n.glyphicon-open-file:before {\n content: \"\\e203\";\n}\n.glyphicon-level-up:before {\n content: \"\\e204\";\n}\n.glyphicon-copy:before {\n content: \"\\e205\";\n}\n.glyphicon-paste:before {\n content: \"\\e206\";\n}\n.glyphicon-alert:before {\n content: \"\\e209\";\n}\n.glyphicon-equalizer:before {\n content: \"\\e210\";\n}\n.glyphicon-king:before {\n content: \"\\e211\";\n}\n.glyphicon-queen:before {\n content: \"\\e212\";\n}\n.glyphicon-pawn:before {\n content: \"\\e213\";\n}\n.glyphicon-bishop:before {\n content: \"\\e214\";\n}\n.glyphicon-knight:before {\n content: \"\\e215\";\n}\n.glyphicon-baby-formula:before {\n content: \"\\e216\";\n}\n.glyphicon-tent:before {\n content: \"\\26fa\";\n}\n.glyphicon-blackboard:before {\n content: \"\\e218\";\n}\n.glyphicon-bed:before {\n content: \"\\e219\";\n}\n.glyphicon-apple:before {\n content: \"\\f8ff\";\n}\n.glyphicon-erase:before {\n content: \"\\e221\";\n}\n.glyphicon-hourglass:before {\n content: \"\\231b\";\n}\n.glyphicon-lamp:before {\n content: \"\\e223\";\n}\n.glyphicon-duplicate:before {\n content: \"\\e224\";\n}\n.glyphicon-piggy-bank:before {\n content: \"\\e225\";\n}\n.glyphicon-scissors:before {\n content: \"\\e226\";\n}\n.glyphicon-bitcoin:before {\n content: \"\\e227\";\n}\n.glyphicon-btc:before {\n content: \"\\e227\";\n}\n.glyphicon-xbt:before {\n content: \"\\e227\";\n}\n.glyphicon-yen:before {\n content: \"\\00a5\";\n}\n.glyphicon-jpy:before {\n content: \"\\00a5\";\n}\n.glyphicon-ruble:before {\n content: \"\\20bd\";\n}\n.glyphicon-rub:before {\n content: \"\\20bd\";\n}\n.glyphicon-scale:before {\n content: \"\\e230\";\n}\n.glyphicon-ice-lolly:before {\n content: \"\\e231\";\n}\n.glyphicon-ice-lolly-tasted:before {\n content: \"\\e232\";\n}\n.glyphicon-education:before {\n content: \"\\e233\";\n}\n.glyphicon-option-horizontal:before {\n content: \"\\e234\";\n}\n.glyphicon-option-vertical:before {\n content: \"\\e235\";\n}\n.glyphicon-menu-hamburger:before {\n content: \"\\e236\";\n}\n.glyphicon-modal-window:before {\n content: \"\\e237\";\n}\n.glyphicon-oil:before {\n content: \"\\e238\";\n}\n.glyphicon-grain:before {\n content: \"\\e239\";\n}\n.glyphicon-sunglasses:before {\n content: \"\\e240\";\n}\n.glyphicon-text-size:before {\n content: \"\\e241\";\n}\n.glyphicon-text-color:before {\n content: \"\\e242\";\n}\n.glyphicon-text-background:before {\n content: \"\\e243\";\n}\n.glyphicon-object-align-top:before {\n content: \"\\e244\";\n}\n.glyphicon-object-align-bottom:before {\n content: \"\\e245\";\n}\n.glyphicon-object-align-horizontal:before {\n content: \"\\e246\";\n}\n.glyphicon-object-align-left:before {\n content: \"\\e247\";\n}\n.glyphicon-object-align-vertical:before {\n content: \"\\e248\";\n}\n.glyphicon-object-align-right:before {\n content: \"\\e249\";\n}\n.glyphicon-triangle-right:before {\n content: \"\\e250\";\n}\n.glyphicon-triangle-left:before {\n content: \"\\e251\";\n}\n.glyphicon-triangle-bottom:before {\n content: \"\\e252\";\n}\n.glyphicon-triangle-top:before {\n content: \"\\e253\";\n}\n.glyphicon-console:before {\n content: \"\\e254\";\n}\n.glyphicon-superscript:before {\n content: \"\\e255\";\n}\n.glyphicon-subscript:before {\n content: \"\\e256\";\n}\n.glyphicon-menu-left:before {\n content: \"\\e257\";\n}\n.glyphicon-menu-right:before {\n content: \"\\e258\";\n}\n.glyphicon-menu-down:before {\n content: \"\\e259\";\n}\n.glyphicon-menu-up:before {\n content: \"\\e260\";\n}\n* {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\n*:before,\n*:after {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\nhtml {\n font-size: 10px;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\nbody {\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-size: 14px;\n line-height: 1.42857143;\n color: #333333;\n background-color: #fff;\n}\ninput,\nbutton,\nselect,\ntextarea {\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\na {\n color: #337ab7;\n text-decoration: none;\n}\na:hover,\na:focus {\n color: #23527c;\n text-decoration: underline;\n}\na:focus {\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\nfigure {\n margin: 0;\n}\nimg {\n vertical-align: middle;\n}\n.img-responsive,\n.thumbnail > img,\n.thumbnail a > img,\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n display: block;\n max-width: 100%;\n height: auto;\n}\n.img-rounded {\n border-radius: 6px;\n}\n.img-thumbnail {\n padding: 4px;\n line-height: 1.42857143;\n background-color: #fff;\n border: 1px solid #ddd;\n border-radius: 4px;\n -webkit-transition: all 0.2s ease-in-out;\n -o-transition: all 0.2s ease-in-out;\n transition: all 0.2s ease-in-out;\n display: inline-block;\n max-width: 100%;\n height: auto;\n}\n.img-circle {\n border-radius: 50%;\n}\nhr {\n margin-top: 20px;\n margin-bottom: 20px;\n border: 0;\n border-top: 1px solid #eeeeee;\n}\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n border: 0;\n}\n.sr-only-focusable:active,\n.sr-only-focusable:focus {\n position: static;\n width: auto;\n height: auto;\n margin: 0;\n overflow: visible;\n clip: auto;\n}\n[role=\"button\"] {\n cursor: pointer;\n}\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n.h1,\n.h2,\n.h3,\n.h4,\n.h5,\n.h6 {\n font-family: inherit;\n font-weight: 500;\n line-height: 1.1;\n color: inherit;\n}\nh1 small,\nh2 small,\nh3 small,\nh4 small,\nh5 small,\nh6 small,\n.h1 small,\n.h2 small,\n.h3 small,\n.h4 small,\n.h5 small,\n.h6 small,\nh1 .small,\nh2 .small,\nh3 .small,\nh4 .small,\nh5 .small,\nh6 .small,\n.h1 .small,\n.h2 .small,\n.h3 .small,\n.h4 .small,\n.h5 .small,\n.h6 .small {\n font-weight: 400;\n line-height: 1;\n color: #777777;\n}\nh1,\n.h1,\nh2,\n.h2,\nh3,\n.h3 {\n margin-top: 20px;\n margin-bottom: 10px;\n}\nh1 small,\n.h1 small,\nh2 small,\n.h2 small,\nh3 small,\n.h3 small,\nh1 .small,\n.h1 .small,\nh2 .small,\n.h2 .small,\nh3 .small,\n.h3 .small {\n font-size: 65%;\n}\nh4,\n.h4,\nh5,\n.h5,\nh6,\n.h6 {\n margin-top: 10px;\n margin-bottom: 10px;\n}\nh4 small,\n.h4 small,\nh5 small,\n.h5 small,\nh6 small,\n.h6 small,\nh4 .small,\n.h4 .small,\nh5 .small,\n.h5 .small,\nh6 .small,\n.h6 .small {\n font-size: 75%;\n}\nh1,\n.h1 {\n font-size: 36px;\n}\nh2,\n.h2 {\n font-size: 30px;\n}\nh3,\n.h3 {\n font-size: 24px;\n}\nh4,\n.h4 {\n font-size: 18px;\n}\nh5,\n.h5 {\n font-size: 14px;\n}\nh6,\n.h6 {\n font-size: 12px;\n}\np {\n margin: 0 0 10px;\n}\n.lead {\n margin-bottom: 20px;\n font-size: 16px;\n font-weight: 300;\n line-height: 1.4;\n}\n@media (min-width: 768px) {\n .lead {\n font-size: 21px;\n }\n}\nsmall,\n.small {\n font-size: 85%;\n}\nmark,\n.mark {\n padding: 0.2em;\n background-color: #fcf8e3;\n}\n.text-left {\n text-align: left;\n}\n.text-right {\n text-align: right;\n}\n.text-center {\n text-align: center;\n}\n.text-justify {\n text-align: justify;\n}\n.text-nowrap {\n white-space: nowrap;\n}\n.text-lowercase {\n text-transform: lowercase;\n}\n.text-uppercase {\n text-transform: uppercase;\n}\n.text-capitalize {\n text-transform: capitalize;\n}\n.text-muted {\n color: #777777;\n}\n.text-primary {\n color: #337ab7;\n}\na.text-primary:hover,\na.text-primary:focus {\n color: #286090;\n}\n.text-success {\n color: #3c763d;\n}\na.text-success:hover,\na.text-success:focus {\n color: #2b542c;\n}\n.text-info {\n color: #31708f;\n}\na.text-info:hover,\na.text-info:focus {\n color: #245269;\n}\n.text-warning {\n color: #8a6d3b;\n}\na.text-warning:hover,\na.text-warning:focus {\n color: #66512c;\n}\n.text-danger {\n color: #a94442;\n}\na.text-danger:hover,\na.text-danger:focus {\n color: #843534;\n}\n.bg-primary {\n color: #fff;\n background-color: #337ab7;\n}\na.bg-primary:hover,\na.bg-primary:focus {\n background-color: #286090;\n}\n.bg-success {\n background-color: #dff0d8;\n}\na.bg-success:hover,\na.bg-success:focus {\n background-color: #c1e2b3;\n}\n.bg-info {\n background-color: #d9edf7;\n}\na.bg-info:hover,\na.bg-info:focus {\n background-color: #afd9ee;\n}\n.bg-warning {\n background-color: #fcf8e3;\n}\na.bg-warning:hover,\na.bg-warning:focus {\n background-color: #f7ecb5;\n}\n.bg-danger {\n background-color: #f2dede;\n}\na.bg-danger:hover,\na.bg-danger:focus {\n background-color: #e4b9b9;\n}\n.page-header {\n padding-bottom: 9px;\n margin: 40px 0 20px;\n border-bottom: 1px solid #eeeeee;\n}\nul,\nol {\n margin-top: 0;\n margin-bottom: 10px;\n}\nul ul,\nol ul,\nul ol,\nol ol {\n margin-bottom: 0;\n}\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n.list-inline {\n padding-left: 0;\n list-style: none;\n margin-left: -5px;\n}\n.list-inline > li {\n display: inline-block;\n padding-right: 5px;\n padding-left: 5px;\n}\ndl {\n margin-top: 0;\n margin-bottom: 20px;\n}\ndt,\ndd {\n line-height: 1.42857143;\n}\ndt {\n font-weight: 700;\n}\ndd {\n margin-left: 0;\n}\n@media (min-width: 768px) {\n .dl-horizontal dt {\n float: left;\n width: 160px;\n clear: left;\n text-align: right;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n .dl-horizontal dd {\n margin-left: 180px;\n }\n}\nabbr[title],\nabbr[data-original-title] {\n cursor: help;\n}\n.initialism {\n font-size: 90%;\n text-transform: uppercase;\n}\nblockquote {\n padding: 10px 20px;\n margin: 0 0 20px;\n font-size: 17.5px;\n border-left: 5px solid #eeeeee;\n}\nblockquote p:last-child,\nblockquote ul:last-child,\nblockquote ol:last-child {\n margin-bottom: 0;\n}\nblockquote footer,\nblockquote small,\nblockquote .small {\n display: block;\n font-size: 80%;\n line-height: 1.42857143;\n color: #777777;\n}\nblockquote footer:before,\nblockquote small:before,\nblockquote .small:before {\n content: \"\\2014 \\00A0\";\n}\n.blockquote-reverse,\nblockquote.pull-right {\n padding-right: 15px;\n padding-left: 0;\n text-align: right;\n border-right: 5px solid #eeeeee;\n border-left: 0;\n}\n.blockquote-reverse footer:before,\nblockquote.pull-right footer:before,\n.blockquote-reverse small:before,\nblockquote.pull-right small:before,\n.blockquote-reverse .small:before,\nblockquote.pull-right .small:before {\n content: \"\";\n}\n.blockquote-reverse footer:after,\nblockquote.pull-right footer:after,\n.blockquote-reverse small:after,\nblockquote.pull-right small:after,\n.blockquote-reverse .small:after,\nblockquote.pull-right .small:after {\n content: \"\\00A0 \\2014\";\n}\naddress {\n margin-bottom: 20px;\n font-style: normal;\n line-height: 1.42857143;\n}\ncode,\nkbd,\npre,\nsamp {\n font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace;\n}\ncode {\n padding: 2px 4px;\n font-size: 90%;\n color: #c7254e;\n background-color: #f9f2f4;\n border-radius: 4px;\n}\nkbd {\n padding: 2px 4px;\n font-size: 90%;\n color: #fff;\n background-color: #333;\n border-radius: 3px;\n box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25);\n}\nkbd kbd {\n padding: 0;\n font-size: 100%;\n font-weight: 700;\n box-shadow: none;\n}\npre {\n display: block;\n padding: 9.5px;\n margin: 0 0 10px;\n font-size: 13px;\n line-height: 1.42857143;\n color: #333333;\n word-break: break-all;\n word-wrap: break-word;\n background-color: #f5f5f5;\n border: 1px solid #ccc;\n border-radius: 4px;\n}\npre code {\n padding: 0;\n font-size: inherit;\n color: inherit;\n white-space: pre-wrap;\n background-color: transparent;\n border-radius: 0;\n}\n.pre-scrollable {\n max-height: 340px;\n overflow-y: scroll;\n}\n.container {\n padding-right: 15px;\n padding-left: 15px;\n margin-right: auto;\n margin-left: auto;\n}\n@media (min-width: 768px) {\n .container {\n width: 750px;\n }\n}\n@media (min-width: 992px) {\n .container {\n width: 970px;\n }\n}\n@media (min-width: 1200px) {\n .container {\n width: 1170px;\n }\n}\n.container-fluid {\n padding-right: 15px;\n padding-left: 15px;\n margin-right: auto;\n margin-left: auto;\n}\n.row {\n margin-right: -15px;\n margin-left: -15px;\n}\n.row-no-gutters {\n margin-right: 0;\n margin-left: 0;\n}\n.row-no-gutters [class*=\"col-\"] {\n padding-right: 0;\n padding-left: 0;\n}\n.col-xs-1,\n.col-sm-1,\n.col-md-1,\n.col-lg-1,\n.col-xs-2,\n.col-sm-2,\n.col-md-2,\n.col-lg-2,\n.col-xs-3,\n.col-sm-3,\n.col-md-3,\n.col-lg-3,\n.col-xs-4,\n.col-sm-4,\n.col-md-4,\n.col-lg-4,\n.col-xs-5,\n.col-sm-5,\n.col-md-5,\n.col-lg-5,\n.col-xs-6,\n.col-sm-6,\n.col-md-6,\n.col-lg-6,\n.col-xs-7,\n.col-sm-7,\n.col-md-7,\n.col-lg-7,\n.col-xs-8,\n.col-sm-8,\n.col-md-8,\n.col-lg-8,\n.col-xs-9,\n.col-sm-9,\n.col-md-9,\n.col-lg-9,\n.col-xs-10,\n.col-sm-10,\n.col-md-10,\n.col-lg-10,\n.col-xs-11,\n.col-sm-11,\n.col-md-11,\n.col-lg-11,\n.col-xs-12,\n.col-sm-12,\n.col-md-12,\n.col-lg-12 {\n position: relative;\n min-height: 1px;\n padding-right: 15px;\n padding-left: 15px;\n}\n.col-xs-1,\n.col-xs-2,\n.col-xs-3,\n.col-xs-4,\n.col-xs-5,\n.col-xs-6,\n.col-xs-7,\n.col-xs-8,\n.col-xs-9,\n.col-xs-10,\n.col-xs-11,\n.col-xs-12 {\n float: left;\n}\n.col-xs-12 {\n width: 100%;\n}\n.col-xs-11 {\n width: 91.66666667%;\n}\n.col-xs-10 {\n width: 83.33333333%;\n}\n.col-xs-9 {\n width: 75%;\n}\n.col-xs-8 {\n width: 66.66666667%;\n}\n.col-xs-7 {\n width: 58.33333333%;\n}\n.col-xs-6 {\n width: 50%;\n}\n.col-xs-5 {\n width: 41.66666667%;\n}\n.col-xs-4 {\n width: 33.33333333%;\n}\n.col-xs-3 {\n width: 25%;\n}\n.col-xs-2 {\n width: 16.66666667%;\n}\n.col-xs-1 {\n width: 8.33333333%;\n}\n.col-xs-pull-12 {\n right: 100%;\n}\n.col-xs-pull-11 {\n right: 91.66666667%;\n}\n.col-xs-pull-10 {\n right: 83.33333333%;\n}\n.col-xs-pull-9 {\n right: 75%;\n}\n.col-xs-pull-8 {\n right: 66.66666667%;\n}\n.col-xs-pull-7 {\n right: 58.33333333%;\n}\n.col-xs-pull-6 {\n right: 50%;\n}\n.col-xs-pull-5 {\n right: 41.66666667%;\n}\n.col-xs-pull-4 {\n right: 33.33333333%;\n}\n.col-xs-pull-3 {\n right: 25%;\n}\n.col-xs-pull-2 {\n right: 16.66666667%;\n}\n.col-xs-pull-1 {\n right: 8.33333333%;\n}\n.col-xs-pull-0 {\n right: auto;\n}\n.col-xs-push-12 {\n left: 100%;\n}\n.col-xs-push-11 {\n left: 91.66666667%;\n}\n.col-xs-push-10 {\n left: 83.33333333%;\n}\n.col-xs-push-9 {\n left: 75%;\n}\n.col-xs-push-8 {\n left: 66.66666667%;\n}\n.col-xs-push-7 {\n left: 58.33333333%;\n}\n.col-xs-push-6 {\n left: 50%;\n}\n.col-xs-push-5 {\n left: 41.66666667%;\n}\n.col-xs-push-4 {\n left: 33.33333333%;\n}\n.col-xs-push-3 {\n left: 25%;\n}\n.col-xs-push-2 {\n left: 16.66666667%;\n}\n.col-xs-push-1 {\n left: 8.33333333%;\n}\n.col-xs-push-0 {\n left: auto;\n}\n.col-xs-offset-12 {\n margin-left: 100%;\n}\n.col-xs-offset-11 {\n margin-left: 91.66666667%;\n}\n.col-xs-offset-10 {\n margin-left: 83.33333333%;\n}\n.col-xs-offset-9 {\n margin-left: 75%;\n}\n.col-xs-offset-8 {\n margin-left: 66.66666667%;\n}\n.col-xs-offset-7 {\n margin-left: 58.33333333%;\n}\n.col-xs-offset-6 {\n margin-left: 50%;\n}\n.col-xs-offset-5 {\n margin-left: 41.66666667%;\n}\n.col-xs-offset-4 {\n margin-left: 33.33333333%;\n}\n.col-xs-offset-3 {\n margin-left: 25%;\n}\n.col-xs-offset-2 {\n margin-left: 16.66666667%;\n}\n.col-xs-offset-1 {\n margin-left: 8.33333333%;\n}\n.col-xs-offset-0 {\n margin-left: 0%;\n}\n@media (min-width: 768px) {\n .col-sm-1,\n .col-sm-2,\n .col-sm-3,\n .col-sm-4,\n .col-sm-5,\n .col-sm-6,\n .col-sm-7,\n .col-sm-8,\n .col-sm-9,\n .col-sm-10,\n .col-sm-11,\n .col-sm-12 {\n float: left;\n }\n .col-sm-12 {\n width: 100%;\n }\n .col-sm-11 {\n width: 91.66666667%;\n }\n .col-sm-10 {\n width: 83.33333333%;\n }\n .col-sm-9 {\n width: 75%;\n }\n .col-sm-8 {\n width: 66.66666667%;\n }\n .col-sm-7 {\n width: 58.33333333%;\n }\n .col-sm-6 {\n width: 50%;\n }\n .col-sm-5 {\n width: 41.66666667%;\n }\n .col-sm-4 {\n width: 33.33333333%;\n }\n .col-sm-3 {\n width: 25%;\n }\n .col-sm-2 {\n width: 16.66666667%;\n }\n .col-sm-1 {\n width: 8.33333333%;\n }\n .col-sm-pull-12 {\n right: 100%;\n }\n .col-sm-pull-11 {\n right: 91.66666667%;\n }\n .col-sm-pull-10 {\n right: 83.33333333%;\n }\n .col-sm-pull-9 {\n right: 75%;\n }\n .col-sm-pull-8 {\n right: 66.66666667%;\n }\n .col-sm-pull-7 {\n right: 58.33333333%;\n }\n .col-sm-pull-6 {\n right: 50%;\n }\n .col-sm-pull-5 {\n right: 41.66666667%;\n }\n .col-sm-pull-4 {\n right: 33.33333333%;\n }\n .col-sm-pull-3 {\n right: 25%;\n }\n .col-sm-pull-2 {\n right: 16.66666667%;\n }\n .col-sm-pull-1 {\n right: 8.33333333%;\n }\n .col-sm-pull-0 {\n right: auto;\n }\n .col-sm-push-12 {\n left: 100%;\n }\n .col-sm-push-11 {\n left: 91.66666667%;\n }\n .col-sm-push-10 {\n left: 83.33333333%;\n }\n .col-sm-push-9 {\n left: 75%;\n }\n .col-sm-push-8 {\n left: 66.66666667%;\n }\n .col-sm-push-7 {\n left: 58.33333333%;\n }\n .col-sm-push-6 {\n left: 50%;\n }\n .col-sm-push-5 {\n left: 41.66666667%;\n }\n .col-sm-push-4 {\n left: 33.33333333%;\n }\n .col-sm-push-3 {\n left: 25%;\n }\n .col-sm-push-2 {\n left: 16.66666667%;\n }\n .col-sm-push-1 {\n left: 8.33333333%;\n }\n .col-sm-push-0 {\n left: auto;\n }\n .col-sm-offset-12 {\n margin-left: 100%;\n }\n .col-sm-offset-11 {\n margin-left: 91.66666667%;\n }\n .col-sm-offset-10 {\n margin-left: 83.33333333%;\n }\n .col-sm-offset-9 {\n margin-left: 75%;\n }\n .col-sm-offset-8 {\n margin-left: 66.66666667%;\n }\n .col-sm-offset-7 {\n margin-left: 58.33333333%;\n }\n .col-sm-offset-6 {\n margin-left: 50%;\n }\n .col-sm-offset-5 {\n margin-left: 41.66666667%;\n }\n .col-sm-offset-4 {\n margin-left: 33.33333333%;\n }\n .col-sm-offset-3 {\n margin-left: 25%;\n }\n .col-sm-offset-2 {\n margin-left: 16.66666667%;\n }\n .col-sm-offset-1 {\n margin-left: 8.33333333%;\n }\n .col-sm-offset-0 {\n margin-left: 0%;\n }\n}\n@media (min-width: 992px) {\n .col-md-1,\n .col-md-2,\n .col-md-3,\n .col-md-4,\n .col-md-5,\n .col-md-6,\n .col-md-7,\n .col-md-8,\n .col-md-9,\n .col-md-10,\n .col-md-11,\n .col-md-12 {\n float: left;\n }\n .col-md-12 {\n width: 100%;\n }\n .col-md-11 {\n width: 91.66666667%;\n }\n .col-md-10 {\n width: 83.33333333%;\n }\n .col-md-9 {\n width: 75%;\n }\n .col-md-8 {\n width: 66.66666667%;\n }\n .col-md-7 {\n width: 58.33333333%;\n }\n .col-md-6 {\n width: 50%;\n }\n .col-md-5 {\n width: 41.66666667%;\n }\n .col-md-4 {\n width: 33.33333333%;\n }\n .col-md-3 {\n width: 25%;\n }\n .col-md-2 {\n width: 16.66666667%;\n }\n .col-md-1 {\n width: 8.33333333%;\n }\n .col-md-pull-12 {\n right: 100%;\n }\n .col-md-pull-11 {\n right: 91.66666667%;\n }\n .col-md-pull-10 {\n right: 83.33333333%;\n }\n .col-md-pull-9 {\n right: 75%;\n }\n .col-md-pull-8 {\n right: 66.66666667%;\n }\n .col-md-pull-7 {\n right: 58.33333333%;\n }\n .col-md-pull-6 {\n right: 50%;\n }\n .col-md-pull-5 {\n right: 41.66666667%;\n }\n .col-md-pull-4 {\n right: 33.33333333%;\n }\n .col-md-pull-3 {\n right: 25%;\n }\n .col-md-pull-2 {\n right: 16.66666667%;\n }\n .col-md-pull-1 {\n right: 8.33333333%;\n }\n .col-md-pull-0 {\n right: auto;\n }\n .col-md-push-12 {\n left: 100%;\n }\n .col-md-push-11 {\n left: 91.66666667%;\n }\n .col-md-push-10 {\n left: 83.33333333%;\n }\n .col-md-push-9 {\n left: 75%;\n }\n .col-md-push-8 {\n left: 66.66666667%;\n }\n .col-md-push-7 {\n left: 58.33333333%;\n }\n .col-md-push-6 {\n left: 50%;\n }\n .col-md-push-5 {\n left: 41.66666667%;\n }\n .col-md-push-4 {\n left: 33.33333333%;\n }\n .col-md-push-3 {\n left: 25%;\n }\n .col-md-push-2 {\n left: 16.66666667%;\n }\n .col-md-push-1 {\n left: 8.33333333%;\n }\n .col-md-push-0 {\n left: auto;\n }\n .col-md-offset-12 {\n margin-left: 100%;\n }\n .col-md-offset-11 {\n margin-left: 91.66666667%;\n }\n .col-md-offset-10 {\n margin-left: 83.33333333%;\n }\n .col-md-offset-9 {\n margin-left: 75%;\n }\n .col-md-offset-8 {\n margin-left: 66.66666667%;\n }\n .col-md-offset-7 {\n margin-left: 58.33333333%;\n }\n .col-md-offset-6 {\n margin-left: 50%;\n }\n .col-md-offset-5 {\n margin-left: 41.66666667%;\n }\n .col-md-offset-4 {\n margin-left: 33.33333333%;\n }\n .col-md-offset-3 {\n margin-left: 25%;\n }\n .col-md-offset-2 {\n margin-left: 16.66666667%;\n }\n .col-md-offset-1 {\n margin-left: 8.33333333%;\n }\n .col-md-offset-0 {\n margin-left: 0%;\n }\n}\n@media (min-width: 1200px) {\n .col-lg-1,\n .col-lg-2,\n .col-lg-3,\n .col-lg-4,\n .col-lg-5,\n .col-lg-6,\n .col-lg-7,\n .col-lg-8,\n .col-lg-9,\n .col-lg-10,\n .col-lg-11,\n .col-lg-12 {\n float: left;\n }\n .col-lg-12 {\n width: 100%;\n }\n .col-lg-11 {\n width: 91.66666667%;\n }\n .col-lg-10 {\n width: 83.33333333%;\n }\n .col-lg-9 {\n width: 75%;\n }\n .col-lg-8 {\n width: 66.66666667%;\n }\n .col-lg-7 {\n width: 58.33333333%;\n }\n .col-lg-6 {\n width: 50%;\n }\n .col-lg-5 {\n width: 41.66666667%;\n }\n .col-lg-4 {\n width: 33.33333333%;\n }\n .col-lg-3 {\n width: 25%;\n }\n .col-lg-2 {\n width: 16.66666667%;\n }\n .col-lg-1 {\n width: 8.33333333%;\n }\n .col-lg-pull-12 {\n right: 100%;\n }\n .col-lg-pull-11 {\n right: 91.66666667%;\n }\n .col-lg-pull-10 {\n right: 83.33333333%;\n }\n .col-lg-pull-9 {\n right: 75%;\n }\n .col-lg-pull-8 {\n right: 66.66666667%;\n }\n .col-lg-pull-7 {\n right: 58.33333333%;\n }\n .col-lg-pull-6 {\n right: 50%;\n }\n .col-lg-pull-5 {\n right: 41.66666667%;\n }\n .col-lg-pull-4 {\n right: 33.33333333%;\n }\n .col-lg-pull-3 {\n right: 25%;\n }\n .col-lg-pull-2 {\n right: 16.66666667%;\n }\n .col-lg-pull-1 {\n right: 8.33333333%;\n }\n .col-lg-pull-0 {\n right: auto;\n }\n .col-lg-push-12 {\n left: 100%;\n }\n .col-lg-push-11 {\n left: 91.66666667%;\n }\n .col-lg-push-10 {\n left: 83.33333333%;\n }\n .col-lg-push-9 {\n left: 75%;\n }\n .col-lg-push-8 {\n left: 66.66666667%;\n }\n .col-lg-push-7 {\n left: 58.33333333%;\n }\n .col-lg-push-6 {\n left: 50%;\n }\n .col-lg-push-5 {\n left: 41.66666667%;\n }\n .col-lg-push-4 {\n left: 33.33333333%;\n }\n .col-lg-push-3 {\n left: 25%;\n }\n .col-lg-push-2 {\n left: 16.66666667%;\n }\n .col-lg-push-1 {\n left: 8.33333333%;\n }\n .col-lg-push-0 {\n left: auto;\n }\n .col-lg-offset-12 {\n margin-left: 100%;\n }\n .col-lg-offset-11 {\n margin-left: 91.66666667%;\n }\n .col-lg-offset-10 {\n margin-left: 83.33333333%;\n }\n .col-lg-offset-9 {\n margin-left: 75%;\n }\n .col-lg-offset-8 {\n margin-left: 66.66666667%;\n }\n .col-lg-offset-7 {\n margin-left: 58.33333333%;\n }\n .col-lg-offset-6 {\n margin-left: 50%;\n }\n .col-lg-offset-5 {\n margin-left: 41.66666667%;\n }\n .col-lg-offset-4 {\n margin-left: 33.33333333%;\n }\n .col-lg-offset-3 {\n margin-left: 25%;\n }\n .col-lg-offset-2 {\n margin-left: 16.66666667%;\n }\n .col-lg-offset-1 {\n margin-left: 8.33333333%;\n }\n .col-lg-offset-0 {\n margin-left: 0%;\n }\n}\ntable {\n background-color: transparent;\n}\ntable col[class*=\"col-\"] {\n position: static;\n display: table-column;\n float: none;\n}\ntable td[class*=\"col-\"],\ntable th[class*=\"col-\"] {\n position: static;\n display: table-cell;\n float: none;\n}\ncaption {\n padding-top: 8px;\n padding-bottom: 8px;\n color: #777777;\n text-align: left;\n}\nth {\n text-align: left;\n}\n.table {\n width: 100%;\n max-width: 100%;\n margin-bottom: 20px;\n}\n.table > thead > tr > th,\n.table > tbody > tr > th,\n.table > tfoot > tr > th,\n.table > thead > tr > td,\n.table > tbody > tr > td,\n.table > tfoot > tr > td {\n padding: 8px;\n line-height: 1.42857143;\n vertical-align: top;\n border-top: 1px solid #ddd;\n}\n.table > thead > tr > th {\n vertical-align: bottom;\n border-bottom: 2px solid #ddd;\n}\n.table > caption + thead > tr:first-child > th,\n.table > colgroup + thead > tr:first-child > th,\n.table > thead:first-child > tr:first-child > th,\n.table > caption + thead > tr:first-child > td,\n.table > colgroup + thead > tr:first-child > td,\n.table > thead:first-child > tr:first-child > td {\n border-top: 0;\n}\n.table > tbody + tbody {\n border-top: 2px solid #ddd;\n}\n.table .table {\n background-color: #fff;\n}\n.table-condensed > thead > tr > th,\n.table-condensed > tbody > tr > th,\n.table-condensed > tfoot > tr > th,\n.table-condensed > thead > tr > td,\n.table-condensed > tbody > tr > td,\n.table-condensed > tfoot > tr > td {\n padding: 5px;\n}\n.table-bordered {\n border: 1px solid #ddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > tbody > tr > th,\n.table-bordered > tfoot > tr > th,\n.table-bordered > thead > tr > td,\n.table-bordered > tbody > tr > td,\n.table-bordered > tfoot > tr > td {\n border: 1px solid #ddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > thead > tr > td {\n border-bottom-width: 2px;\n}\n.table-striped > tbody > tr:nth-of-type(odd) {\n background-color: #f9f9f9;\n}\n.table-hover > tbody > tr:hover {\n background-color: #f5f5f5;\n}\n.table > thead > tr > td.active,\n.table > tbody > tr > td.active,\n.table > tfoot > tr > td.active,\n.table > thead > tr > th.active,\n.table > tbody > tr > th.active,\n.table > tfoot > tr > th.active,\n.table > thead > tr.active > td,\n.table > tbody > tr.active > td,\n.table > tfoot > tr.active > td,\n.table > thead > tr.active > th,\n.table > tbody > tr.active > th,\n.table > tfoot > tr.active > th {\n background-color: #f5f5f5;\n}\n.table-hover > tbody > tr > td.active:hover,\n.table-hover > tbody > tr > th.active:hover,\n.table-hover > tbody > tr.active:hover > td,\n.table-hover > tbody > tr:hover > .active,\n.table-hover > tbody > tr.active:hover > th {\n background-color: #e8e8e8;\n}\n.table > thead > tr > td.success,\n.table > tbody > tr > td.success,\n.table > tfoot > tr > td.success,\n.table > thead > tr > th.success,\n.table > tbody > tr > th.success,\n.table > tfoot > tr > th.success,\n.table > thead > tr.success > td,\n.table > tbody > tr.success > td,\n.table > tfoot > tr.success > td,\n.table > thead > tr.success > th,\n.table > tbody > tr.success > th,\n.table > tfoot > tr.success > th {\n background-color: #dff0d8;\n}\n.table-hover > tbody > tr > td.success:hover,\n.table-hover > tbody > tr > th.success:hover,\n.table-hover > tbody > tr.success:hover > td,\n.table-hover > tbody > tr:hover > .success,\n.table-hover > tbody > tr.success:hover > th {\n background-color: #d0e9c6;\n}\n.table > thead > tr > td.info,\n.table > tbody > tr > td.info,\n.table > tfoot > tr > td.info,\n.table > thead > tr > th.info,\n.table > tbody > tr > th.info,\n.table > tfoot > tr > th.info,\n.table > thead > tr.info > td,\n.table > tbody > tr.info > td,\n.table > tfoot > tr.info > td,\n.table > thead > tr.info > th,\n.table > tbody > tr.info > th,\n.table > tfoot > tr.info > th {\n background-color: #d9edf7;\n}\n.table-hover > tbody > tr > td.info:hover,\n.table-hover > tbody > tr > th.info:hover,\n.table-hover > tbody > tr.info:hover > td,\n.table-hover > tbody > tr:hover > .info,\n.table-hover > tbody > tr.info:hover > th {\n background-color: #c4e3f3;\n}\n.table > thead > tr > td.warning,\n.table > tbody > tr > td.warning,\n.table > tfoot > tr > td.warning,\n.table > thead > tr > th.warning,\n.table > tbody > tr > th.warning,\n.table > tfoot > tr > th.warning,\n.table > thead > tr.warning > td,\n.table > tbody > tr.warning > td,\n.table > tfoot > tr.warning > td,\n.table > thead > tr.warning > th,\n.table > tbody > tr.warning > th,\n.table > tfoot > tr.warning > th {\n background-color: #fcf8e3;\n}\n.table-hover > tbody > tr > td.warning:hover,\n.table-hover > tbody > tr > th.warning:hover,\n.table-hover > tbody > tr.warning:hover > td,\n.table-hover > tbody > tr:hover > .warning,\n.table-hover > tbody > tr.warning:hover > th {\n background-color: #faf2cc;\n}\n.table > thead > tr > td.danger,\n.table > tbody > tr > td.danger,\n.table > tfoot > tr > td.danger,\n.table > thead > tr > th.danger,\n.table > tbody > tr > th.danger,\n.table > tfoot > tr > th.danger,\n.table > thead > tr.danger > td,\n.table > tbody > tr.danger > td,\n.table > tfoot > tr.danger > td,\n.table > thead > tr.danger > th,\n.table > tbody > tr.danger > th,\n.table > tfoot > tr.danger > th {\n background-color: #f2dede;\n}\n.table-hover > tbody > tr > td.danger:hover,\n.table-hover > tbody > tr > th.danger:hover,\n.table-hover > tbody > tr.danger:hover > td,\n.table-hover > tbody > tr:hover > .danger,\n.table-hover > tbody > tr.danger:hover > th {\n background-color: #ebcccc;\n}\n.table-responsive {\n min-height: 0.01%;\n overflow-x: auto;\n}\n@media screen and (max-width: 767px) {\n .table-responsive {\n width: 100%;\n margin-bottom: 15px;\n overflow-y: hidden;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n border: 1px solid #ddd;\n }\n .table-responsive > .table {\n margin-bottom: 0;\n }\n .table-responsive > .table > thead > tr > th,\n .table-responsive > .table > tbody > tr > th,\n .table-responsive > .table > tfoot > tr > th,\n .table-responsive > .table > thead > tr > td,\n .table-responsive > .table > tbody > tr > td,\n .table-responsive > .table > tfoot > tr > td {\n white-space: nowrap;\n }\n .table-responsive > .table-bordered {\n border: 0;\n }\n .table-responsive > .table-bordered > thead > tr > th:first-child,\n .table-responsive > .table-bordered > tbody > tr > th:first-child,\n .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n .table-responsive > .table-bordered > thead > tr > td:first-child,\n .table-responsive > .table-bordered > tbody > tr > td:first-child,\n .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n border-left: 0;\n }\n .table-responsive > .table-bordered > thead > tr > th:last-child,\n .table-responsive > .table-bordered > tbody > tr > th:last-child,\n .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n .table-responsive > .table-bordered > thead > tr > td:last-child,\n .table-responsive > .table-bordered > tbody > tr > td:last-child,\n .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n border-right: 0;\n }\n .table-responsive > .table-bordered > tbody > tr:last-child > th,\n .table-responsive > .table-bordered > tfoot > tr:last-child > th,\n .table-responsive > .table-bordered > tbody > tr:last-child > td,\n .table-responsive > .table-bordered > tfoot > tr:last-child > td {\n border-bottom: 0;\n }\n}\nfieldset {\n min-width: 0;\n padding: 0;\n margin: 0;\n border: 0;\n}\nlegend {\n display: block;\n width: 100%;\n padding: 0;\n margin-bottom: 20px;\n font-size: 21px;\n line-height: inherit;\n color: #333333;\n border: 0;\n border-bottom: 1px solid #e5e5e5;\n}\nlabel {\n display: inline-block;\n max-width: 100%;\n margin-bottom: 5px;\n font-weight: 700;\n}\ninput[type=\"search\"] {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n -webkit-appearance: none;\n appearance: none;\n}\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n margin: 4px 0 0;\n margin-top: 1px \\9;\n line-height: normal;\n}\ninput[type=\"radio\"][disabled],\ninput[type=\"checkbox\"][disabled],\ninput[type=\"radio\"].disabled,\ninput[type=\"checkbox\"].disabled,\nfieldset[disabled] input[type=\"radio\"],\nfieldset[disabled] input[type=\"checkbox\"] {\n cursor: not-allowed;\n}\ninput[type=\"file\"] {\n display: block;\n}\ninput[type=\"range\"] {\n display: block;\n width: 100%;\n}\nselect[multiple],\nselect[size] {\n height: auto;\n}\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\noutput {\n display: block;\n padding-top: 7px;\n font-size: 14px;\n line-height: 1.42857143;\n color: #555555;\n}\n.form-control {\n display: block;\n width: 100%;\n height: 34px;\n padding: 6px 12px;\n font-size: 14px;\n line-height: 1.42857143;\n color: #555555;\n background-color: #fff;\n background-image: none;\n border: 1px solid #ccc;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n}\n.form-control:focus {\n border-color: #66afe9;\n outline: 0;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, 0.6);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, 0.6);\n}\n.form-control::-moz-placeholder {\n color: #999;\n opacity: 1;\n}\n.form-control:-ms-input-placeholder {\n color: #999;\n}\n.form-control::-webkit-input-placeholder {\n color: #999;\n}\n.form-control::-ms-expand {\n background-color: transparent;\n border: 0;\n}\n.form-control[disabled],\n.form-control[readonly],\nfieldset[disabled] .form-control {\n background-color: #eeeeee;\n opacity: 1;\n}\n.form-control[disabled],\nfieldset[disabled] .form-control {\n cursor: not-allowed;\n}\ntextarea.form-control {\n height: auto;\n}\n@media screen and (-webkit-min-device-pixel-ratio: 0) {\n input[type=\"date\"].form-control,\n input[type=\"time\"].form-control,\n input[type=\"datetime-local\"].form-control,\n input[type=\"month\"].form-control {\n line-height: 34px;\n }\n input[type=\"date\"].input-sm,\n input[type=\"time\"].input-sm,\n input[type=\"datetime-local\"].input-sm,\n input[type=\"month\"].input-sm,\n .input-group-sm input[type=\"date\"],\n .input-group-sm input[type=\"time\"],\n .input-group-sm input[type=\"datetime-local\"],\n .input-group-sm input[type=\"month\"] {\n line-height: 30px;\n }\n input[type=\"date\"].input-lg,\n input[type=\"time\"].input-lg,\n input[type=\"datetime-local\"].input-lg,\n input[type=\"month\"].input-lg,\n .input-group-lg input[type=\"date\"],\n .input-group-lg input[type=\"time\"],\n .input-group-lg input[type=\"datetime-local\"],\n .input-group-lg input[type=\"month\"] {\n line-height: 46px;\n }\n}\n.form-group {\n margin-bottom: 15px;\n}\n.radio,\n.checkbox {\n position: relative;\n display: block;\n margin-top: 10px;\n margin-bottom: 10px;\n}\n.radio.disabled label,\n.checkbox.disabled label,\nfieldset[disabled] .radio label,\nfieldset[disabled] .checkbox label {\n cursor: not-allowed;\n}\n.radio label,\n.checkbox label {\n min-height: 20px;\n padding-left: 20px;\n margin-bottom: 0;\n font-weight: 400;\n cursor: pointer;\n}\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n position: absolute;\n margin-top: 4px \\9;\n margin-left: -20px;\n}\n.radio + .radio,\n.checkbox + .checkbox {\n margin-top: -5px;\n}\n.radio-inline,\n.checkbox-inline {\n position: relative;\n display: inline-block;\n padding-left: 20px;\n margin-bottom: 0;\n font-weight: 400;\n vertical-align: middle;\n cursor: pointer;\n}\n.radio-inline.disabled,\n.checkbox-inline.disabled,\nfieldset[disabled] .radio-inline,\nfieldset[disabled] .checkbox-inline {\n cursor: not-allowed;\n}\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n margin-top: 0;\n margin-left: 10px;\n}\n.form-control-static {\n min-height: 34px;\n padding-top: 7px;\n padding-bottom: 7px;\n margin-bottom: 0;\n}\n.form-control-static.input-lg,\n.form-control-static.input-sm {\n padding-right: 0;\n padding-left: 0;\n}\n.input-sm {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\nselect.input-sm {\n height: 30px;\n line-height: 30px;\n}\ntextarea.input-sm,\nselect[multiple].input-sm {\n height: auto;\n}\n.form-group-sm .form-control {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\n.form-group-sm select.form-control {\n height: 30px;\n line-height: 30px;\n}\n.form-group-sm textarea.form-control,\n.form-group-sm select[multiple].form-control {\n height: auto;\n}\n.form-group-sm .form-control-static {\n height: 30px;\n min-height: 32px;\n padding: 6px 10px;\n font-size: 12px;\n line-height: 1.5;\n}\n.input-lg {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\nselect.input-lg {\n height: 46px;\n line-height: 46px;\n}\ntextarea.input-lg,\nselect[multiple].input-lg {\n height: auto;\n}\n.form-group-lg .form-control {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\n.form-group-lg select.form-control {\n height: 46px;\n line-height: 46px;\n}\n.form-group-lg textarea.form-control,\n.form-group-lg select[multiple].form-control {\n height: auto;\n}\n.form-group-lg .form-control-static {\n height: 46px;\n min-height: 38px;\n padding: 11px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n}\n.has-feedback {\n position: relative;\n}\n.has-feedback .form-control {\n padding-right: 42.5px;\n}\n.form-control-feedback {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 2;\n display: block;\n width: 34px;\n height: 34px;\n line-height: 34px;\n text-align: center;\n pointer-events: none;\n}\n.input-lg + .form-control-feedback,\n.input-group-lg + .form-control-feedback,\n.form-group-lg .form-control + .form-control-feedback {\n width: 46px;\n height: 46px;\n line-height: 46px;\n}\n.input-sm + .form-control-feedback,\n.input-group-sm + .form-control-feedback,\n.form-group-sm .form-control + .form-control-feedback {\n width: 30px;\n height: 30px;\n line-height: 30px;\n}\n.has-success .help-block,\n.has-success .control-label,\n.has-success .radio,\n.has-success .checkbox,\n.has-success .radio-inline,\n.has-success .checkbox-inline,\n.has-success.radio label,\n.has-success.checkbox label,\n.has-success.radio-inline label,\n.has-success.checkbox-inline label {\n color: #3c763d;\n}\n.has-success .form-control {\n border-color: #3c763d;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-success .form-control:focus {\n border-color: #2b542c;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;\n}\n.has-success .input-group-addon {\n color: #3c763d;\n background-color: #dff0d8;\n border-color: #3c763d;\n}\n.has-success .form-control-feedback {\n color: #3c763d;\n}\n.has-warning .help-block,\n.has-warning .control-label,\n.has-warning .radio,\n.has-warning .checkbox,\n.has-warning .radio-inline,\n.has-warning .checkbox-inline,\n.has-warning.radio label,\n.has-warning.checkbox label,\n.has-warning.radio-inline label,\n.has-warning.checkbox-inline label {\n color: #8a6d3b;\n}\n.has-warning .form-control {\n border-color: #8a6d3b;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-warning .form-control:focus {\n border-color: #66512c;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;\n}\n.has-warning .input-group-addon {\n color: #8a6d3b;\n background-color: #fcf8e3;\n border-color: #8a6d3b;\n}\n.has-warning .form-control-feedback {\n color: #8a6d3b;\n}\n.has-error .help-block,\n.has-error .control-label,\n.has-error .radio,\n.has-error .checkbox,\n.has-error .radio-inline,\n.has-error .checkbox-inline,\n.has-error.radio label,\n.has-error.checkbox label,\n.has-error.radio-inline label,\n.has-error.checkbox-inline label {\n color: #a94442;\n}\n.has-error .form-control {\n border-color: #a94442;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-error .form-control:focus {\n border-color: #843534;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;\n}\n.has-error .input-group-addon {\n color: #a94442;\n background-color: #f2dede;\n border-color: #a94442;\n}\n.has-error .form-control-feedback {\n color: #a94442;\n}\n.has-feedback label ~ .form-control-feedback {\n top: 25px;\n}\n.has-feedback label.sr-only ~ .form-control-feedback {\n top: 0;\n}\n.help-block {\n display: block;\n margin-top: 5px;\n margin-bottom: 10px;\n color: #737373;\n}\n@media (min-width: 768px) {\n .form-inline .form-group {\n display: inline-block;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle;\n }\n .form-inline .form-control-static {\n display: inline-block;\n }\n .form-inline .input-group {\n display: inline-table;\n vertical-align: middle;\n }\n .form-inline .input-group .input-group-addon,\n .form-inline .input-group .input-group-btn,\n .form-inline .input-group .form-control {\n width: auto;\n }\n .form-inline .input-group > .form-control {\n width: 100%;\n }\n .form-inline .control-label {\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .radio,\n .form-inline .checkbox {\n display: inline-block;\n margin-top: 0;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .radio label,\n .form-inline .checkbox label {\n padding-left: 0;\n }\n .form-inline .radio input[type=\"radio\"],\n .form-inline .checkbox input[type=\"checkbox\"] {\n position: relative;\n margin-left: 0;\n }\n .form-inline .has-feedback .form-control-feedback {\n top: 0;\n }\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox,\n.form-horizontal .radio-inline,\n.form-horizontal .checkbox-inline {\n padding-top: 7px;\n margin-top: 0;\n margin-bottom: 0;\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox {\n min-height: 27px;\n}\n.form-horizontal .form-group {\n margin-right: -15px;\n margin-left: -15px;\n}\n@media (min-width: 768px) {\n .form-horizontal .control-label {\n padding-top: 7px;\n margin-bottom: 0;\n text-align: right;\n }\n}\n.form-horizontal .has-feedback .form-control-feedback {\n right: 15px;\n}\n@media (min-width: 768px) {\n .form-horizontal .form-group-lg .control-label {\n padding-top: 11px;\n font-size: 18px;\n }\n}\n@media (min-width: 768px) {\n .form-horizontal .form-group-sm .control-label {\n padding-top: 6px;\n font-size: 12px;\n }\n}\n.btn {\n display: inline-block;\n margin-bottom: 0;\n font-weight: normal;\n text-align: center;\n white-space: nowrap;\n vertical-align: middle;\n touch-action: manipulation;\n cursor: pointer;\n background-image: none;\n border: 1px solid transparent;\n padding: 6px 12px;\n font-size: 14px;\n line-height: 1.42857143;\n border-radius: 4px;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n.btn:focus,\n.btn:active:focus,\n.btn.active:focus,\n.btn.focus,\n.btn:active.focus,\n.btn.active.focus {\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\n.btn:hover,\n.btn:focus,\n.btn.focus {\n color: #333;\n text-decoration: none;\n}\n.btn:active,\n.btn.active {\n background-image: none;\n outline: 0;\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn.disabled,\n.btn[disabled],\nfieldset[disabled] .btn {\n cursor: not-allowed;\n filter: alpha(opacity=65);\n opacity: 0.65;\n -webkit-box-shadow: none;\n box-shadow: none;\n}\na.btn.disabled,\nfieldset[disabled] a.btn {\n pointer-events: none;\n}\n.btn-default {\n color: #333;\n background-color: #fff;\n border-color: #ccc;\n}\n.btn-default:focus,\n.btn-default.focus {\n color: #333;\n background-color: #e6e6e6;\n border-color: #8c8c8c;\n}\n.btn-default:hover {\n color: #333;\n background-color: #e6e6e6;\n border-color: #adadad;\n}\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n color: #333;\n background-color: #e6e6e6;\n background-image: none;\n border-color: #adadad;\n}\n.btn-default:active:hover,\n.btn-default.active:hover,\n.open > .dropdown-toggle.btn-default:hover,\n.btn-default:active:focus,\n.btn-default.active:focus,\n.open > .dropdown-toggle.btn-default:focus,\n.btn-default:active.focus,\n.btn-default.active.focus,\n.open > .dropdown-toggle.btn-default.focus {\n color: #333;\n background-color: #d4d4d4;\n border-color: #8c8c8c;\n}\n.btn-default.disabled:hover,\n.btn-default[disabled]:hover,\nfieldset[disabled] .btn-default:hover,\n.btn-default.disabled:focus,\n.btn-default[disabled]:focus,\nfieldset[disabled] .btn-default:focus,\n.btn-default.disabled.focus,\n.btn-default[disabled].focus,\nfieldset[disabled] .btn-default.focus {\n background-color: #fff;\n border-color: #ccc;\n}\n.btn-default .badge {\n color: #fff;\n background-color: #333;\n}\n.btn-primary {\n color: #fff;\n background-color: #337ab7;\n border-color: #2e6da4;\n}\n.btn-primary:focus,\n.btn-primary.focus {\n color: #fff;\n background-color: #286090;\n border-color: #122b40;\n}\n.btn-primary:hover {\n color: #fff;\n background-color: #286090;\n border-color: #204d74;\n}\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n color: #fff;\n background-color: #286090;\n background-image: none;\n border-color: #204d74;\n}\n.btn-primary:active:hover,\n.btn-primary.active:hover,\n.open > .dropdown-toggle.btn-primary:hover,\n.btn-primary:active:focus,\n.btn-primary.active:focus,\n.open > .dropdown-toggle.btn-primary:focus,\n.btn-primary:active.focus,\n.btn-primary.active.focus,\n.open > .dropdown-toggle.btn-primary.focus {\n color: #fff;\n background-color: #204d74;\n border-color: #122b40;\n}\n.btn-primary.disabled:hover,\n.btn-primary[disabled]:hover,\nfieldset[disabled] .btn-primary:hover,\n.btn-primary.disabled:focus,\n.btn-primary[disabled]:focus,\nfieldset[disabled] .btn-primary:focus,\n.btn-primary.disabled.focus,\n.btn-primary[disabled].focus,\nfieldset[disabled] .btn-primary.focus {\n background-color: #337ab7;\n border-color: #2e6da4;\n}\n.btn-primary .badge {\n color: #337ab7;\n background-color: #fff;\n}\n.btn-success {\n color: #fff;\n background-color: #5cb85c;\n border-color: #4cae4c;\n}\n.btn-success:focus,\n.btn-success.focus {\n color: #fff;\n background-color: #449d44;\n border-color: #255625;\n}\n.btn-success:hover {\n color: #fff;\n background-color: #449d44;\n border-color: #398439;\n}\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n color: #fff;\n background-color: #449d44;\n background-image: none;\n border-color: #398439;\n}\n.btn-success:active:hover,\n.btn-success.active:hover,\n.open > .dropdown-toggle.btn-success:hover,\n.btn-success:active:focus,\n.btn-success.active:focus,\n.open > .dropdown-toggle.btn-success:focus,\n.btn-success:active.focus,\n.btn-success.active.focus,\n.open > .dropdown-toggle.btn-success.focus {\n color: #fff;\n background-color: #398439;\n border-color: #255625;\n}\n.btn-success.disabled:hover,\n.btn-success[disabled]:hover,\nfieldset[disabled] .btn-success:hover,\n.btn-success.disabled:focus,\n.btn-success[disabled]:focus,\nfieldset[disabled] .btn-success:focus,\n.btn-success.disabled.focus,\n.btn-success[disabled].focus,\nfieldset[disabled] .btn-success.focus {\n background-color: #5cb85c;\n border-color: #4cae4c;\n}\n.btn-success .badge {\n color: #5cb85c;\n background-color: #fff;\n}\n.btn-info {\n color: #fff;\n background-color: #5bc0de;\n border-color: #46b8da;\n}\n.btn-info:focus,\n.btn-info.focus {\n color: #fff;\n background-color: #31b0d5;\n border-color: #1b6d85;\n}\n.btn-info:hover {\n color: #fff;\n background-color: #31b0d5;\n border-color: #269abc;\n}\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n color: #fff;\n background-color: #31b0d5;\n background-image: none;\n border-color: #269abc;\n}\n.btn-info:active:hover,\n.btn-info.active:hover,\n.open > .dropdown-toggle.btn-info:hover,\n.btn-info:active:focus,\n.btn-info.active:focus,\n.open > .dropdown-toggle.btn-info:focus,\n.btn-info:active.focus,\n.btn-info.active.focus,\n.open > .dropdown-toggle.btn-info.focus {\n color: #fff;\n background-color: #269abc;\n border-color: #1b6d85;\n}\n.btn-info.disabled:hover,\n.btn-info[disabled]:hover,\nfieldset[disabled] .btn-info:hover,\n.btn-info.disabled:focus,\n.btn-info[disabled]:focus,\nfieldset[disabled] .btn-info:focus,\n.btn-info.disabled.focus,\n.btn-info[disabled].focus,\nfieldset[disabled] .btn-info.focus {\n background-color: #5bc0de;\n border-color: #46b8da;\n}\n.btn-info .badge {\n color: #5bc0de;\n background-color: #fff;\n}\n.btn-warning {\n color: #fff;\n background-color: #f0ad4e;\n border-color: #eea236;\n}\n.btn-warning:focus,\n.btn-warning.focus {\n color: #fff;\n background-color: #ec971f;\n border-color: #985f0d;\n}\n.btn-warning:hover {\n color: #fff;\n background-color: #ec971f;\n border-color: #d58512;\n}\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n color: #fff;\n background-color: #ec971f;\n background-image: none;\n border-color: #d58512;\n}\n.btn-warning:active:hover,\n.btn-warning.active:hover,\n.open > .dropdown-toggle.btn-warning:hover,\n.btn-warning:active:focus,\n.btn-warning.active:focus,\n.open > .dropdown-toggle.btn-warning:focus,\n.btn-warning:active.focus,\n.btn-warning.active.focus,\n.open > .dropdown-toggle.btn-warning.focus {\n color: #fff;\n background-color: #d58512;\n border-color: #985f0d;\n}\n.btn-warning.disabled:hover,\n.btn-warning[disabled]:hover,\nfieldset[disabled] .btn-warning:hover,\n.btn-warning.disabled:focus,\n.btn-warning[disabled]:focus,\nfieldset[disabled] .btn-warning:focus,\n.btn-warning.disabled.focus,\n.btn-warning[disabled].focus,\nfieldset[disabled] .btn-warning.focus {\n background-color: #f0ad4e;\n border-color: #eea236;\n}\n.btn-warning .badge {\n color: #f0ad4e;\n background-color: #fff;\n}\n.btn-danger {\n color: #fff;\n background-color: #d9534f;\n border-color: #d43f3a;\n}\n.btn-danger:focus,\n.btn-danger.focus {\n color: #fff;\n background-color: #c9302c;\n border-color: #761c19;\n}\n.btn-danger:hover {\n color: #fff;\n background-color: #c9302c;\n border-color: #ac2925;\n}\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n color: #fff;\n background-color: #c9302c;\n background-image: none;\n border-color: #ac2925;\n}\n.btn-danger:active:hover,\n.btn-danger.active:hover,\n.open > .dropdown-toggle.btn-danger:hover,\n.btn-danger:active:focus,\n.btn-danger.active:focus,\n.open > .dropdown-toggle.btn-danger:focus,\n.btn-danger:active.focus,\n.btn-danger.active.focus,\n.open > .dropdown-toggle.btn-danger.focus {\n color: #fff;\n background-color: #ac2925;\n border-color: #761c19;\n}\n.btn-danger.disabled:hover,\n.btn-danger[disabled]:hover,\nfieldset[disabled] .btn-danger:hover,\n.btn-danger.disabled:focus,\n.btn-danger[disabled]:focus,\nfieldset[disabled] .btn-danger:focus,\n.btn-danger.disabled.focus,\n.btn-danger[disabled].focus,\nfieldset[disabled] .btn-danger.focus {\n background-color: #d9534f;\n border-color: #d43f3a;\n}\n.btn-danger .badge {\n color: #d9534f;\n background-color: #fff;\n}\n.btn-link {\n font-weight: 400;\n color: #337ab7;\n border-radius: 0;\n}\n.btn-link,\n.btn-link:active,\n.btn-link.active,\n.btn-link[disabled],\nfieldset[disabled] .btn-link {\n background-color: transparent;\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.btn-link,\n.btn-link:hover,\n.btn-link:focus,\n.btn-link:active {\n border-color: transparent;\n}\n.btn-link:hover,\n.btn-link:focus {\n color: #23527c;\n text-decoration: underline;\n background-color: transparent;\n}\n.btn-link[disabled]:hover,\nfieldset[disabled] .btn-link:hover,\n.btn-link[disabled]:focus,\nfieldset[disabled] .btn-link:focus {\n color: #777777;\n text-decoration: none;\n}\n.btn-lg,\n.btn-group-lg > .btn {\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\n.btn-sm,\n.btn-group-sm > .btn {\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\n.btn-xs,\n.btn-group-xs > .btn {\n padding: 1px 5px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\n.btn-block {\n display: block;\n width: 100%;\n}\n.btn-block + .btn-block {\n margin-top: 5px;\n}\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n width: 100%;\n}\n.fade {\n opacity: 0;\n -webkit-transition: opacity 0.15s linear;\n -o-transition: opacity 0.15s linear;\n transition: opacity 0.15s linear;\n}\n.fade.in {\n opacity: 1;\n}\n.collapse {\n display: none;\n}\n.collapse.in {\n display: block;\n}\ntr.collapse.in {\n display: table-row;\n}\ntbody.collapse.in {\n display: table-row-group;\n}\n.collapsing {\n position: relative;\n height: 0;\n overflow: hidden;\n -webkit-transition-property: height, visibility;\n transition-property: height, visibility;\n -webkit-transition-duration: 0.35s;\n transition-duration: 0.35s;\n -webkit-transition-timing-function: ease;\n transition-timing-function: ease;\n}\n.caret {\n display: inline-block;\n width: 0;\n height: 0;\n margin-left: 2px;\n vertical-align: middle;\n border-top: 4px dashed;\n border-top: 4px solid \\9;\n border-right: 4px solid transparent;\n border-left: 4px solid transparent;\n}\n.dropup,\n.dropdown {\n position: relative;\n}\n.dropdown-toggle:focus {\n outline: 0;\n}\n.dropdown-menu {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: 1000;\n display: none;\n float: left;\n min-width: 160px;\n padding: 5px 0;\n margin: 2px 0 0;\n font-size: 14px;\n text-align: left;\n list-style: none;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid #ccc;\n border: 1px solid rgba(0, 0, 0, 0.15);\n border-radius: 4px;\n -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n}\n.dropdown-menu.pull-right {\n right: 0;\n left: auto;\n}\n.dropdown-menu .divider {\n height: 1px;\n margin: 9px 0;\n overflow: hidden;\n background-color: #e5e5e5;\n}\n.dropdown-menu > li > a {\n display: block;\n padding: 3px 20px;\n clear: both;\n font-weight: 400;\n line-height: 1.42857143;\n color: #333333;\n white-space: nowrap;\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n color: #262626;\n text-decoration: none;\n background-color: #f5f5f5;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n color: #fff;\n text-decoration: none;\n background-color: #337ab7;\n outline: 0;\n}\n.dropdown-menu > .disabled > a,\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n color: #777777;\n}\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n text-decoration: none;\n cursor: not-allowed;\n background-color: transparent;\n background-image: none;\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n}\n.open > .dropdown-menu {\n display: block;\n}\n.open > a {\n outline: 0;\n}\n.dropdown-menu-right {\n right: 0;\n left: auto;\n}\n.dropdown-menu-left {\n right: auto;\n left: 0;\n}\n.dropdown-header {\n display: block;\n padding: 3px 20px;\n font-size: 12px;\n line-height: 1.42857143;\n color: #777777;\n white-space: nowrap;\n}\n.dropdown-backdrop {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 990;\n}\n.pull-right > .dropdown-menu {\n right: 0;\n left: auto;\n}\n.dropup .caret,\n.navbar-fixed-bottom .dropdown .caret {\n content: \"\";\n border-top: 0;\n border-bottom: 4px dashed;\n border-bottom: 4px solid \\9;\n}\n.dropup .dropdown-menu,\n.navbar-fixed-bottom .dropdown .dropdown-menu {\n top: auto;\n bottom: 100%;\n margin-bottom: 2px;\n}\n@media (min-width: 768px) {\n .navbar-right .dropdown-menu {\n right: 0;\n left: auto;\n }\n .navbar-right .dropdown-menu-left {\n right: auto;\n left: 0;\n }\n}\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-block;\n vertical-align: middle;\n}\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n position: relative;\n float: left;\n}\n.btn-group > .btn:hover,\n.btn-group-vertical > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group-vertical > .btn:focus,\n.btn-group > .btn:active,\n.btn-group-vertical > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn.active {\n z-index: 2;\n}\n.btn-group .btn + .btn,\n.btn-group .btn + .btn-group,\n.btn-group .btn-group + .btn,\n.btn-group .btn-group + .btn-group {\n margin-left: -1px;\n}\n.btn-toolbar {\n margin-left: -5px;\n}\n.btn-toolbar .btn,\n.btn-toolbar .btn-group,\n.btn-toolbar .input-group {\n float: left;\n}\n.btn-toolbar > .btn,\n.btn-toolbar > .btn-group,\n.btn-toolbar > .input-group {\n margin-left: 5px;\n}\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n border-radius: 0;\n}\n.btn-group > .btn:first-child {\n margin-left: 0;\n}\n.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.btn-group > .btn-group {\n float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n outline: 0;\n}\n.btn-group > .btn + .dropdown-toggle {\n padding-right: 8px;\n padding-left: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n padding-right: 12px;\n padding-left: 12px;\n}\n.btn-group.open .dropdown-toggle {\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn-group.open .dropdown-toggle.btn-link {\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.btn .caret {\n margin-left: 0;\n}\n.btn-lg .caret {\n border-width: 5px 5px 0;\n border-bottom-width: 0;\n}\n.dropup .btn-lg .caret {\n border-width: 0 5px 5px;\n}\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group,\n.btn-group-vertical > .btn-group > .btn {\n display: block;\n float: none;\n width: 100%;\n max-width: 100%;\n}\n.btn-group-vertical > .btn-group > .btn {\n float: none;\n}\n.btn-group-vertical > .btn + .btn,\n.btn-group-vertical > .btn + .btn-group,\n.btn-group-vertical > .btn-group + .btn,\n.btn-group-vertical > .btn-group + .btn-group {\n margin-top: -1px;\n margin-left: 0;\n}\n.btn-group-vertical > .btn:not(:first-child):not(:last-child) {\n border-radius: 0;\n}\n.btn-group-vertical > .btn:first-child:not(:last-child) {\n border-top-left-radius: 4px;\n border-top-right-radius: 4px;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn:last-child:not(:first-child) {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n border-bottom-right-radius: 4px;\n border-bottom-left-radius: 4px;\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n.btn-group-justified {\n display: table;\n width: 100%;\n table-layout: fixed;\n border-collapse: separate;\n}\n.btn-group-justified > .btn,\n.btn-group-justified > .btn-group {\n display: table-cell;\n float: none;\n width: 1%;\n}\n.btn-group-justified > .btn-group .btn {\n width: 100%;\n}\n.btn-group-justified > .btn-group .dropdown-menu {\n left: auto;\n}\n[data-toggle=\"buttons\"] > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn input[type=\"checkbox\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"checkbox\"] {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none;\n}\n.input-group {\n position: relative;\n display: table;\n border-collapse: separate;\n}\n.input-group[class*=\"col-\"] {\n float: none;\n padding-right: 0;\n padding-left: 0;\n}\n.input-group .form-control {\n position: relative;\n z-index: 2;\n float: left;\n width: 100%;\n margin-bottom: 0;\n}\n.input-group .form-control:focus {\n z-index: 3;\n}\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\nselect.input-group-lg > .form-control,\nselect.input-group-lg > .input-group-addon,\nselect.input-group-lg > .input-group-btn > .btn {\n height: 46px;\n line-height: 46px;\n}\ntextarea.input-group-lg > .form-control,\ntextarea.input-group-lg > .input-group-addon,\ntextarea.input-group-lg > .input-group-btn > .btn,\nselect[multiple].input-group-lg > .form-control,\nselect[multiple].input-group-lg > .input-group-addon,\nselect[multiple].input-group-lg > .input-group-btn > .btn {\n height: auto;\n}\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\nselect.input-group-sm > .form-control,\nselect.input-group-sm > .input-group-addon,\nselect.input-group-sm > .input-group-btn > .btn {\n height: 30px;\n line-height: 30px;\n}\ntextarea.input-group-sm > .form-control,\ntextarea.input-group-sm > .input-group-addon,\ntextarea.input-group-sm > .input-group-btn > .btn,\nselect[multiple].input-group-sm > .form-control,\nselect[multiple].input-group-sm > .input-group-addon,\nselect[multiple].input-group-sm > .input-group-btn > .btn {\n height: auto;\n}\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n display: table-cell;\n}\n.input-group-addon:not(:first-child):not(:last-child),\n.input-group-btn:not(:first-child):not(:last-child),\n.input-group .form-control:not(:first-child):not(:last-child) {\n border-radius: 0;\n}\n.input-group-addon,\n.input-group-btn {\n width: 1%;\n white-space: nowrap;\n vertical-align: middle;\n}\n.input-group-addon {\n padding: 6px 12px;\n font-size: 14px;\n font-weight: 400;\n line-height: 1;\n color: #555555;\n text-align: center;\n background-color: #eeeeee;\n border: 1px solid #ccc;\n border-radius: 4px;\n}\n.input-group-addon.input-sm {\n padding: 5px 10px;\n font-size: 12px;\n border-radius: 3px;\n}\n.input-group-addon.input-lg {\n padding: 10px 16px;\n font-size: 18px;\n border-radius: 6px;\n}\n.input-group-addon input[type=\"radio\"],\n.input-group-addon input[type=\"checkbox\"] {\n margin-top: 0;\n}\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.input-group-addon:first-child {\n border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.input-group-addon:last-child {\n border-left: 0;\n}\n.input-group-btn {\n position: relative;\n font-size: 0;\n white-space: nowrap;\n}\n.input-group-btn > .btn {\n position: relative;\n}\n.input-group-btn > .btn + .btn {\n margin-left: -1px;\n}\n.input-group-btn > .btn:hover,\n.input-group-btn > .btn:focus,\n.input-group-btn > .btn:active {\n z-index: 2;\n}\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group {\n margin-right: -1px;\n}\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group {\n z-index: 2;\n margin-left: -1px;\n}\n.nav {\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n.nav > li {\n position: relative;\n display: block;\n}\n.nav > li > a {\n position: relative;\n display: block;\n padding: 10px 15px;\n}\n.nav > li > a:hover,\n.nav > li > a:focus {\n text-decoration: none;\n background-color: #eeeeee;\n}\n.nav > li.disabled > a {\n color: #777777;\n}\n.nav > li.disabled > a:hover,\n.nav > li.disabled > a:focus {\n color: #777777;\n text-decoration: none;\n cursor: not-allowed;\n background-color: transparent;\n}\n.nav .open > a,\n.nav .open > a:hover,\n.nav .open > a:focus {\n background-color: #eeeeee;\n border-color: #337ab7;\n}\n.nav .nav-divider {\n height: 1px;\n margin: 9px 0;\n overflow: hidden;\n background-color: #e5e5e5;\n}\n.nav > li > a > img {\n max-width: none;\n}\n.nav-tabs {\n border-bottom: 1px solid #ddd;\n}\n.nav-tabs > li {\n float: left;\n margin-bottom: -1px;\n}\n.nav-tabs > li > a {\n margin-right: 2px;\n line-height: 1.42857143;\n border: 1px solid transparent;\n border-radius: 4px 4px 0 0;\n}\n.nav-tabs > li > a:hover {\n border-color: #eeeeee #eeeeee #ddd;\n}\n.nav-tabs > li.active > a,\n.nav-tabs > li.active > a:hover,\n.nav-tabs > li.active > a:focus {\n color: #555555;\n cursor: default;\n background-color: #fff;\n border: 1px solid #ddd;\n border-bottom-color: transparent;\n}\n.nav-tabs.nav-justified {\n width: 100%;\n border-bottom: 0;\n}\n.nav-tabs.nav-justified > li {\n float: none;\n}\n.nav-tabs.nav-justified > li > a {\n margin-bottom: 5px;\n text-align: center;\n}\n.nav-tabs.nav-justified > .dropdown .dropdown-menu {\n top: auto;\n left: auto;\n}\n@media (min-width: 768px) {\n .nav-tabs.nav-justified > li {\n display: table-cell;\n width: 1%;\n }\n .nav-tabs.nav-justified > li > a {\n margin-bottom: 0;\n }\n}\n.nav-tabs.nav-justified > li > a {\n margin-right: 0;\n border-radius: 4px;\n}\n.nav-tabs.nav-justified > .active > a,\n.nav-tabs.nav-justified > .active > a:hover,\n.nav-tabs.nav-justified > .active > a:focus {\n border: 1px solid #ddd;\n}\n@media (min-width: 768px) {\n .nav-tabs.nav-justified > li > a {\n border-bottom: 1px solid #ddd;\n border-radius: 4px 4px 0 0;\n }\n .nav-tabs.nav-justified > .active > a,\n .nav-tabs.nav-justified > .active > a:hover,\n .nav-tabs.nav-justified > .active > a:focus {\n border-bottom-color: #fff;\n }\n}\n.nav-pills > li {\n float: left;\n}\n.nav-pills > li > a {\n border-radius: 4px;\n}\n.nav-pills > li + li {\n margin-left: 2px;\n}\n.nav-pills > li.active > a,\n.nav-pills > li.active > a:hover,\n.nav-pills > li.active > a:focus {\n color: #fff;\n background-color: #337ab7;\n}\n.nav-stacked > li {\n float: none;\n}\n.nav-stacked > li + li {\n margin-top: 2px;\n margin-left: 0;\n}\n.nav-justified {\n width: 100%;\n}\n.nav-justified > li {\n float: none;\n}\n.nav-justified > li > a {\n margin-bottom: 5px;\n text-align: center;\n}\n.nav-justified > .dropdown .dropdown-menu {\n top: auto;\n left: auto;\n}\n@media (min-width: 768px) {\n .nav-justified > li {\n display: table-cell;\n width: 1%;\n }\n .nav-justified > li > a {\n margin-bottom: 0;\n }\n}\n.nav-tabs-justified {\n border-bottom: 0;\n}\n.nav-tabs-justified > li > a {\n margin-right: 0;\n border-radius: 4px;\n}\n.nav-tabs-justified > .active > a,\n.nav-tabs-justified > .active > a:hover,\n.nav-tabs-justified > .active > a:focus {\n border: 1px solid #ddd;\n}\n@media (min-width: 768px) {\n .nav-tabs-justified > li > a {\n border-bottom: 1px solid #ddd;\n border-radius: 4px 4px 0 0;\n }\n .nav-tabs-justified > .active > a,\n .nav-tabs-justified > .active > a:hover,\n .nav-tabs-justified > .active > a:focus {\n border-bottom-color: #fff;\n }\n}\n.tab-content > .tab-pane {\n display: none;\n}\n.tab-content > .active {\n display: block;\n}\n.nav-tabs .dropdown-menu {\n margin-top: -1px;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n.navbar {\n position: relative;\n min-height: 50px;\n margin-bottom: 20px;\n border: 1px solid transparent;\n}\n@media (min-width: 768px) {\n .navbar {\n border-radius: 4px;\n }\n}\n@media (min-width: 768px) {\n .navbar-header {\n float: left;\n }\n}\n.navbar-collapse {\n padding-right: 15px;\n padding-left: 15px;\n overflow-x: visible;\n border-top: 1px solid transparent;\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);\n -webkit-overflow-scrolling: touch;\n}\n.navbar-collapse.in {\n overflow-y: auto;\n}\n@media (min-width: 768px) {\n .navbar-collapse {\n width: auto;\n border-top: 0;\n box-shadow: none;\n }\n .navbar-collapse.collapse {\n display: block !important;\n height: auto !important;\n padding-bottom: 0;\n overflow: visible !important;\n }\n .navbar-collapse.in {\n overflow-y: visible;\n }\n .navbar-fixed-top .navbar-collapse,\n .navbar-static-top .navbar-collapse,\n .navbar-fixed-bottom .navbar-collapse {\n padding-right: 0;\n padding-left: 0;\n }\n}\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n position: fixed;\n right: 0;\n left: 0;\n z-index: 1030;\n}\n.navbar-fixed-top .navbar-collapse,\n.navbar-fixed-bottom .navbar-collapse {\n max-height: 340px;\n}\n@media (max-device-width: 480px) and (orientation: landscape) {\n .navbar-fixed-top .navbar-collapse,\n .navbar-fixed-bottom .navbar-collapse {\n max-height: 200px;\n }\n}\n@media (min-width: 768px) {\n .navbar-fixed-top,\n .navbar-fixed-bottom {\n border-radius: 0;\n }\n}\n.navbar-fixed-top {\n top: 0;\n border-width: 0 0 1px;\n}\n.navbar-fixed-bottom {\n bottom: 0;\n margin-bottom: 0;\n border-width: 1px 0 0;\n}\n.container > .navbar-header,\n.container-fluid > .navbar-header,\n.container > .navbar-collapse,\n.container-fluid > .navbar-collapse {\n margin-right: -15px;\n margin-left: -15px;\n}\n@media (min-width: 768px) {\n .container > .navbar-header,\n .container-fluid > .navbar-header,\n .container > .navbar-collapse,\n .container-fluid > .navbar-collapse {\n margin-right: 0;\n margin-left: 0;\n }\n}\n.navbar-static-top {\n z-index: 1000;\n border-width: 0 0 1px;\n}\n@media (min-width: 768px) {\n .navbar-static-top {\n border-radius: 0;\n }\n}\n.navbar-brand {\n float: left;\n height: 50px;\n padding: 15px 15px;\n font-size: 18px;\n line-height: 20px;\n}\n.navbar-brand:hover,\n.navbar-brand:focus {\n text-decoration: none;\n}\n.navbar-brand > img {\n display: block;\n}\n@media (min-width: 768px) {\n .navbar > .container .navbar-brand,\n .navbar > .container-fluid .navbar-brand {\n margin-left: -15px;\n }\n}\n.navbar-toggle {\n position: relative;\n float: right;\n padding: 9px 10px;\n margin-right: 15px;\n margin-top: 8px;\n margin-bottom: 8px;\n background-color: transparent;\n background-image: none;\n border: 1px solid transparent;\n border-radius: 4px;\n}\n.navbar-toggle:focus {\n outline: 0;\n}\n.navbar-toggle .icon-bar {\n display: block;\n width: 22px;\n height: 2px;\n border-radius: 1px;\n}\n.navbar-toggle .icon-bar + .icon-bar {\n margin-top: 4px;\n}\n@media (min-width: 768px) {\n .navbar-toggle {\n display: none;\n }\n}\n.navbar-nav {\n margin: 7.5px -15px;\n}\n.navbar-nav > li > a {\n padding-top: 10px;\n padding-bottom: 10px;\n line-height: 20px;\n}\n@media (max-width: 767px) {\n .navbar-nav .open .dropdown-menu {\n position: static;\n float: none;\n width: auto;\n margin-top: 0;\n background-color: transparent;\n border: 0;\n box-shadow: none;\n }\n .navbar-nav .open .dropdown-menu > li > a,\n .navbar-nav .open .dropdown-menu .dropdown-header {\n padding: 5px 15px 5px 25px;\n }\n .navbar-nav .open .dropdown-menu > li > a {\n line-height: 20px;\n }\n .navbar-nav .open .dropdown-menu > li > a:hover,\n .navbar-nav .open .dropdown-menu > li > a:focus {\n background-image: none;\n }\n}\n@media (min-width: 768px) {\n .navbar-nav {\n float: left;\n margin: 0;\n }\n .navbar-nav > li {\n float: left;\n }\n .navbar-nav > li > a {\n padding-top: 15px;\n padding-bottom: 15px;\n }\n}\n.navbar-form {\n padding: 10px 15px;\n margin-right: -15px;\n margin-left: -15px;\n border-top: 1px solid transparent;\n border-bottom: 1px solid transparent;\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n margin-top: 8px;\n margin-bottom: 8px;\n}\n@media (min-width: 768px) {\n .navbar-form .form-group {\n display: inline-block;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle;\n }\n .navbar-form .form-control-static {\n display: inline-block;\n }\n .navbar-form .input-group {\n display: inline-table;\n vertical-align: middle;\n }\n .navbar-form .input-group .input-group-addon,\n .navbar-form .input-group .input-group-btn,\n .navbar-form .input-group .form-control {\n width: auto;\n }\n .navbar-form .input-group > .form-control {\n width: 100%;\n }\n .navbar-form .control-label {\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .radio,\n .navbar-form .checkbox {\n display: inline-block;\n margin-top: 0;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .radio label,\n .navbar-form .checkbox label {\n padding-left: 0;\n }\n .navbar-form .radio input[type=\"radio\"],\n .navbar-form .checkbox input[type=\"checkbox\"] {\n position: relative;\n margin-left: 0;\n }\n .navbar-form .has-feedback .form-control-feedback {\n top: 0;\n }\n}\n@media (max-width: 767px) {\n .navbar-form .form-group {\n margin-bottom: 5px;\n }\n .navbar-form .form-group:last-child {\n margin-bottom: 0;\n }\n}\n@media (min-width: 768px) {\n .navbar-form {\n width: auto;\n padding-top: 0;\n padding-bottom: 0;\n margin-right: 0;\n margin-left: 0;\n border: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n}\n.navbar-nav > li > .dropdown-menu {\n margin-top: 0;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n margin-bottom: 0;\n border-top-left-radius: 4px;\n border-top-right-radius: 4px;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.navbar-btn {\n margin-top: 8px;\n margin-bottom: 8px;\n}\n.navbar-btn.btn-sm {\n margin-top: 10px;\n margin-bottom: 10px;\n}\n.navbar-btn.btn-xs {\n margin-top: 14px;\n margin-bottom: 14px;\n}\n.navbar-text {\n margin-top: 15px;\n margin-bottom: 15px;\n}\n@media (min-width: 768px) {\n .navbar-text {\n float: left;\n margin-right: 15px;\n margin-left: 15px;\n }\n}\n@media (min-width: 768px) {\n .navbar-left {\n float: left !important;\n }\n .navbar-right {\n float: right !important;\n margin-right: -15px;\n }\n .navbar-right ~ .navbar-right {\n margin-right: 0;\n }\n}\n.navbar-default {\n background-color: #f8f8f8;\n border-color: #e7e7e7;\n}\n.navbar-default .navbar-brand {\n color: #777;\n}\n.navbar-default .navbar-brand:hover,\n.navbar-default .navbar-brand:focus {\n color: #5e5e5e;\n background-color: transparent;\n}\n.navbar-default .navbar-text {\n color: #777;\n}\n.navbar-default .navbar-nav > li > a {\n color: #777;\n}\n.navbar-default .navbar-nav > li > a:hover,\n.navbar-default .navbar-nav > li > a:focus {\n color: #333;\n background-color: transparent;\n}\n.navbar-default .navbar-nav > .active > a,\n.navbar-default .navbar-nav > .active > a:hover,\n.navbar-default .navbar-nav > .active > a:focus {\n color: #555;\n background-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .disabled > a,\n.navbar-default .navbar-nav > .disabled > a:hover,\n.navbar-default .navbar-nav > .disabled > a:focus {\n color: #ccc;\n background-color: transparent;\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .open > a:hover,\n.navbar-default .navbar-nav > .open > a:focus {\n color: #555;\n background-color: #e7e7e7;\n}\n@media (max-width: 767px) {\n .navbar-default .navbar-nav .open .dropdown-menu > li > a {\n color: #777;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,\n .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {\n color: #333;\n background-color: transparent;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a,\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #555;\n background-color: #e7e7e7;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n color: #ccc;\n background-color: transparent;\n }\n}\n.navbar-default .navbar-toggle {\n border-color: #ddd;\n}\n.navbar-default .navbar-toggle:hover,\n.navbar-default .navbar-toggle:focus {\n background-color: #ddd;\n}\n.navbar-default .navbar-toggle .icon-bar {\n background-color: #888;\n}\n.navbar-default .navbar-collapse,\n.navbar-default .navbar-form {\n border-color: #e7e7e7;\n}\n.navbar-default .navbar-link {\n color: #777;\n}\n.navbar-default .navbar-link:hover {\n color: #333;\n}\n.navbar-default .btn-link {\n color: #777;\n}\n.navbar-default .btn-link:hover,\n.navbar-default .btn-link:focus {\n color: #333;\n}\n.navbar-default .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-default .btn-link:hover,\n.navbar-default .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-default .btn-link:focus {\n color: #ccc;\n}\n.navbar-inverse {\n background-color: #222;\n border-color: #080808;\n}\n.navbar-inverse .navbar-brand {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-brand:hover,\n.navbar-inverse .navbar-brand:focus {\n color: #fff;\n background-color: transparent;\n}\n.navbar-inverse .navbar-text {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a:hover,\n.navbar-inverse .navbar-nav > li > a:focus {\n color: #fff;\n background-color: transparent;\n}\n.navbar-inverse .navbar-nav > .active > a,\n.navbar-inverse .navbar-nav > .active > a:hover,\n.navbar-inverse .navbar-nav > .active > a:focus {\n color: #fff;\n background-color: #080808;\n}\n.navbar-inverse .navbar-nav > .disabled > a,\n.navbar-inverse .navbar-nav > .disabled > a:hover,\n.navbar-inverse .navbar-nav > .disabled > a:focus {\n color: #444;\n background-color: transparent;\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .open > a:hover,\n.navbar-inverse .navbar-nav > .open > a:focus {\n color: #fff;\n background-color: #080808;\n}\n@media (max-width: 767px) {\n .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {\n border-color: #080808;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu .divider {\n background-color: #080808;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {\n color: #9d9d9d;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {\n color: #fff;\n background-color: transparent;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #fff;\n background-color: #080808;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n color: #444;\n background-color: transparent;\n }\n}\n.navbar-inverse .navbar-toggle {\n border-color: #333;\n}\n.navbar-inverse .navbar-toggle:hover,\n.navbar-inverse .navbar-toggle:focus {\n background-color: #333;\n}\n.navbar-inverse .navbar-toggle .icon-bar {\n background-color: #fff;\n}\n.navbar-inverse .navbar-collapse,\n.navbar-inverse .navbar-form {\n border-color: #101010;\n}\n.navbar-inverse .navbar-link {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-link:hover {\n color: #fff;\n}\n.navbar-inverse .btn-link {\n color: #9d9d9d;\n}\n.navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link:focus {\n color: #fff;\n}\n.navbar-inverse .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-inverse .btn-link:focus {\n color: #444;\n}\n.breadcrumb {\n padding: 8px 15px;\n margin-bottom: 20px;\n list-style: none;\n background-color: #f5f5f5;\n border-radius: 4px;\n}\n.breadcrumb > li {\n display: inline-block;\n}\n.breadcrumb > li + li:before {\n padding: 0 5px;\n color: #ccc;\n content: \"/\\00a0\";\n}\n.breadcrumb > .active {\n color: #777777;\n}\n.pagination {\n display: inline-block;\n padding-left: 0;\n margin: 20px 0;\n border-radius: 4px;\n}\n.pagination > li {\n display: inline;\n}\n.pagination > li > a,\n.pagination > li > span {\n position: relative;\n float: left;\n padding: 6px 12px;\n margin-left: -1px;\n line-height: 1.42857143;\n color: #337ab7;\n text-decoration: none;\n background-color: #fff;\n border: 1px solid #ddd;\n}\n.pagination > li > a:hover,\n.pagination > li > span:hover,\n.pagination > li > a:focus,\n.pagination > li > span:focus {\n z-index: 2;\n color: #23527c;\n background-color: #eeeeee;\n border-color: #ddd;\n}\n.pagination > li:first-child > a,\n.pagination > li:first-child > span {\n margin-left: 0;\n border-top-left-radius: 4px;\n border-bottom-left-radius: 4px;\n}\n.pagination > li:last-child > a,\n.pagination > li:last-child > span {\n border-top-right-radius: 4px;\n border-bottom-right-radius: 4px;\n}\n.pagination > .active > a,\n.pagination > .active > span,\n.pagination > .active > a:hover,\n.pagination > .active > span:hover,\n.pagination > .active > a:focus,\n.pagination > .active > span:focus {\n z-index: 3;\n color: #fff;\n cursor: default;\n background-color: #337ab7;\n border-color: #337ab7;\n}\n.pagination > .disabled > span,\n.pagination > .disabled > span:hover,\n.pagination > .disabled > span:focus,\n.pagination > .disabled > a,\n.pagination > .disabled > a:hover,\n.pagination > .disabled > a:focus {\n color: #777777;\n cursor: not-allowed;\n background-color: #fff;\n border-color: #ddd;\n}\n.pagination-lg > li > a,\n.pagination-lg > li > span {\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n}\n.pagination-lg > li:first-child > a,\n.pagination-lg > li:first-child > span {\n border-top-left-radius: 6px;\n border-bottom-left-radius: 6px;\n}\n.pagination-lg > li:last-child > a,\n.pagination-lg > li:last-child > span {\n border-top-right-radius: 6px;\n border-bottom-right-radius: 6px;\n}\n.pagination-sm > li > a,\n.pagination-sm > li > span {\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n}\n.pagination-sm > li:first-child > a,\n.pagination-sm > li:first-child > span {\n border-top-left-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.pagination-sm > li:last-child > a,\n.pagination-sm > li:last-child > span {\n border-top-right-radius: 3px;\n border-bottom-right-radius: 3px;\n}\n.pager {\n padding-left: 0;\n margin: 20px 0;\n text-align: center;\n list-style: none;\n}\n.pager li {\n display: inline;\n}\n.pager li > a,\n.pager li > span {\n display: inline-block;\n padding: 5px 14px;\n background-color: #fff;\n border: 1px solid #ddd;\n border-radius: 15px;\n}\n.pager li > a:hover,\n.pager li > a:focus {\n text-decoration: none;\n background-color: #eeeeee;\n}\n.pager .next > a,\n.pager .next > span {\n float: right;\n}\n.pager .previous > a,\n.pager .previous > span {\n float: left;\n}\n.pager .disabled > a,\n.pager .disabled > a:hover,\n.pager .disabled > a:focus,\n.pager .disabled > span {\n color: #777777;\n cursor: not-allowed;\n background-color: #fff;\n}\n.label {\n display: inline;\n padding: 0.2em 0.6em 0.3em;\n font-size: 75%;\n font-weight: 700;\n line-height: 1;\n color: #fff;\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: 0.25em;\n}\na.label:hover,\na.label:focus {\n color: #fff;\n text-decoration: none;\n cursor: pointer;\n}\n.label:empty {\n display: none;\n}\n.btn .label {\n position: relative;\n top: -1px;\n}\n.label-default {\n background-color: #777777;\n}\n.label-default[href]:hover,\n.label-default[href]:focus {\n background-color: #5e5e5e;\n}\n.label-primary {\n background-color: #337ab7;\n}\n.label-primary[href]:hover,\n.label-primary[href]:focus {\n background-color: #286090;\n}\n.label-success {\n background-color: #5cb85c;\n}\n.label-success[href]:hover,\n.label-success[href]:focus {\n background-color: #449d44;\n}\n.label-info {\n background-color: #5bc0de;\n}\n.label-info[href]:hover,\n.label-info[href]:focus {\n background-color: #31b0d5;\n}\n.label-warning {\n background-color: #f0ad4e;\n}\n.label-warning[href]:hover,\n.label-warning[href]:focus {\n background-color: #ec971f;\n}\n.label-danger {\n background-color: #d9534f;\n}\n.label-danger[href]:hover,\n.label-danger[href]:focus {\n background-color: #c9302c;\n}\n.badge {\n display: inline-block;\n min-width: 10px;\n padding: 3px 7px;\n font-size: 12px;\n font-weight: bold;\n line-height: 1;\n color: #fff;\n text-align: center;\n white-space: nowrap;\n vertical-align: middle;\n background-color: #777777;\n border-radius: 10px;\n}\n.badge:empty {\n display: none;\n}\n.btn .badge {\n position: relative;\n top: -1px;\n}\n.btn-xs .badge,\n.btn-group-xs > .btn .badge {\n top: 0;\n padding: 1px 5px;\n}\na.badge:hover,\na.badge:focus {\n color: #fff;\n text-decoration: none;\n cursor: pointer;\n}\n.list-group-item.active > .badge,\n.nav-pills > .active > a > .badge {\n color: #337ab7;\n background-color: #fff;\n}\n.list-group-item > .badge {\n float: right;\n}\n.list-group-item > .badge + .badge {\n margin-right: 5px;\n}\n.nav-pills > li > a > .badge {\n margin-left: 3px;\n}\n.jumbotron {\n padding-top: 30px;\n padding-bottom: 30px;\n margin-bottom: 30px;\n color: inherit;\n background-color: #eeeeee;\n}\n.jumbotron h1,\n.jumbotron .h1 {\n color: inherit;\n}\n.jumbotron p {\n margin-bottom: 15px;\n font-size: 21px;\n font-weight: 200;\n}\n.jumbotron > hr {\n border-top-color: #d5d5d5;\n}\n.container .jumbotron,\n.container-fluid .jumbotron {\n padding-right: 15px;\n padding-left: 15px;\n border-radius: 6px;\n}\n.jumbotron .container {\n max-width: 100%;\n}\n@media screen and (min-width: 768px) {\n .jumbotron {\n padding-top: 48px;\n padding-bottom: 48px;\n }\n .container .jumbotron,\n .container-fluid .jumbotron {\n padding-right: 60px;\n padding-left: 60px;\n }\n .jumbotron h1,\n .jumbotron .h1 {\n font-size: 63px;\n }\n}\n.thumbnail {\n display: block;\n padding: 4px;\n margin-bottom: 20px;\n line-height: 1.42857143;\n background-color: #fff;\n border: 1px solid #ddd;\n border-radius: 4px;\n -webkit-transition: border 0.2s ease-in-out;\n -o-transition: border 0.2s ease-in-out;\n transition: border 0.2s ease-in-out;\n}\n.thumbnail > img,\n.thumbnail a > img {\n margin-right: auto;\n margin-left: auto;\n}\na.thumbnail:hover,\na.thumbnail:focus,\na.thumbnail.active {\n border-color: #337ab7;\n}\n.thumbnail .caption {\n padding: 9px;\n color: #333333;\n}\n.alert {\n padding: 15px;\n margin-bottom: 20px;\n border: 1px solid transparent;\n border-radius: 4px;\n}\n.alert h4 {\n margin-top: 0;\n color: inherit;\n}\n.alert .alert-link {\n font-weight: bold;\n}\n.alert > p,\n.alert > ul {\n margin-bottom: 0;\n}\n.alert > p + p {\n margin-top: 5px;\n}\n.alert-dismissable,\n.alert-dismissible {\n padding-right: 35px;\n}\n.alert-dismissable .close,\n.alert-dismissible .close {\n position: relative;\n top: -2px;\n right: -21px;\n color: inherit;\n}\n.alert-success {\n color: #3c763d;\n background-color: #dff0d8;\n border-color: #d6e9c6;\n}\n.alert-success hr {\n border-top-color: #c9e2b3;\n}\n.alert-success .alert-link {\n color: #2b542c;\n}\n.alert-info {\n color: #31708f;\n background-color: #d9edf7;\n border-color: #bce8f1;\n}\n.alert-info hr {\n border-top-color: #a6e1ec;\n}\n.alert-info .alert-link {\n color: #245269;\n}\n.alert-warning {\n color: #8a6d3b;\n background-color: #fcf8e3;\n border-color: #faebcc;\n}\n.alert-warning hr {\n border-top-color: #f7e1b5;\n}\n.alert-warning .alert-link {\n color: #66512c;\n}\n.alert-danger {\n color: #a94442;\n background-color: #f2dede;\n border-color: #ebccd1;\n}\n.alert-danger hr {\n border-top-color: #e4b9c0;\n}\n.alert-danger .alert-link {\n color: #843534;\n}\n@-webkit-keyframes progress-bar-stripes {\n from {\n background-position: 40px 0;\n }\n to {\n background-position: 0 0;\n }\n}\n@keyframes progress-bar-stripes {\n from {\n background-position: 40px 0;\n }\n to {\n background-position: 0 0;\n }\n}\n.progress {\n height: 20px;\n margin-bottom: 20px;\n overflow: hidden;\n background-color: #f5f5f5;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);\n box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);\n}\n.progress-bar {\n float: left;\n width: 0%;\n height: 100%;\n font-size: 12px;\n line-height: 20px;\n color: #fff;\n text-align: center;\n background-color: #337ab7;\n -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\n box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\n -webkit-transition: width 0.6s ease;\n -o-transition: width 0.6s ease;\n transition: width 0.6s ease;\n}\n.progress-striped .progress-bar,\n.progress-bar-striped {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-size: 40px 40px;\n}\n.progress.active .progress-bar,\n.progress-bar.active {\n -webkit-animation: progress-bar-stripes 2s linear infinite;\n -o-animation: progress-bar-stripes 2s linear infinite;\n animation: progress-bar-stripes 2s linear infinite;\n}\n.progress-bar-success {\n background-color: #5cb85c;\n}\n.progress-striped .progress-bar-success {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-info {\n background-color: #5bc0de;\n}\n.progress-striped .progress-bar-info {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-warning {\n background-color: #f0ad4e;\n}\n.progress-striped .progress-bar-warning {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-danger {\n background-color: #d9534f;\n}\n.progress-striped .progress-bar-danger {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.media {\n margin-top: 15px;\n}\n.media:first-child {\n margin-top: 0;\n}\n.media,\n.media-body {\n overflow: hidden;\n zoom: 1;\n}\n.media-body {\n width: 10000px;\n}\n.media-object {\n display: block;\n}\n.media-object.img-thumbnail {\n max-width: none;\n}\n.media-right,\n.media > .pull-right {\n padding-left: 10px;\n}\n.media-left,\n.media > .pull-left {\n padding-right: 10px;\n}\n.media-left,\n.media-right,\n.media-body {\n display: table-cell;\n vertical-align: top;\n}\n.media-middle {\n vertical-align: middle;\n}\n.media-bottom {\n vertical-align: bottom;\n}\n.media-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n.media-list {\n padding-left: 0;\n list-style: none;\n}\n.list-group {\n padding-left: 0;\n margin-bottom: 20px;\n}\n.list-group-item {\n position: relative;\n display: block;\n padding: 10px 15px;\n margin-bottom: -1px;\n background-color: #fff;\n border: 1px solid #ddd;\n}\n.list-group-item:first-child {\n border-top-left-radius: 4px;\n border-top-right-radius: 4px;\n}\n.list-group-item:last-child {\n margin-bottom: 0;\n border-bottom-right-radius: 4px;\n border-bottom-left-radius: 4px;\n}\n.list-group-item.disabled,\n.list-group-item.disabled:hover,\n.list-group-item.disabled:focus {\n color: #777777;\n cursor: not-allowed;\n background-color: #eeeeee;\n}\n.list-group-item.disabled .list-group-item-heading,\n.list-group-item.disabled:hover .list-group-item-heading,\n.list-group-item.disabled:focus .list-group-item-heading {\n color: inherit;\n}\n.list-group-item.disabled .list-group-item-text,\n.list-group-item.disabled:hover .list-group-item-text,\n.list-group-item.disabled:focus .list-group-item-text {\n color: #777777;\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n z-index: 2;\n color: #fff;\n background-color: #337ab7;\n border-color: #337ab7;\n}\n.list-group-item.active .list-group-item-heading,\n.list-group-item.active:hover .list-group-item-heading,\n.list-group-item.active:focus .list-group-item-heading,\n.list-group-item.active .list-group-item-heading > small,\n.list-group-item.active:hover .list-group-item-heading > small,\n.list-group-item.active:focus .list-group-item-heading > small,\n.list-group-item.active .list-group-item-heading > .small,\n.list-group-item.active:hover .list-group-item-heading > .small,\n.list-group-item.active:focus .list-group-item-heading > .small {\n color: inherit;\n}\n.list-group-item.active .list-group-item-text,\n.list-group-item.active:hover .list-group-item-text,\n.list-group-item.active:focus .list-group-item-text {\n color: #c7ddef;\n}\na.list-group-item,\nbutton.list-group-item {\n color: #555;\n}\na.list-group-item .list-group-item-heading,\nbutton.list-group-item .list-group-item-heading {\n color: #333;\n}\na.list-group-item:hover,\nbutton.list-group-item:hover,\na.list-group-item:focus,\nbutton.list-group-item:focus {\n color: #555;\n text-decoration: none;\n background-color: #f5f5f5;\n}\nbutton.list-group-item {\n width: 100%;\n text-align: left;\n}\n.list-group-item-success {\n color: #3c763d;\n background-color: #dff0d8;\n}\na.list-group-item-success,\nbutton.list-group-item-success {\n color: #3c763d;\n}\na.list-group-item-success .list-group-item-heading,\nbutton.list-group-item-success .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-success:hover,\nbutton.list-group-item-success:hover,\na.list-group-item-success:focus,\nbutton.list-group-item-success:focus {\n color: #3c763d;\n background-color: #d0e9c6;\n}\na.list-group-item-success.active,\nbutton.list-group-item-success.active,\na.list-group-item-success.active:hover,\nbutton.list-group-item-success.active:hover,\na.list-group-item-success.active:focus,\nbutton.list-group-item-success.active:focus {\n color: #fff;\n background-color: #3c763d;\n border-color: #3c763d;\n}\n.list-group-item-info {\n color: #31708f;\n background-color: #d9edf7;\n}\na.list-group-item-info,\nbutton.list-group-item-info {\n color: #31708f;\n}\na.list-group-item-info .list-group-item-heading,\nbutton.list-group-item-info .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-info:hover,\nbutton.list-group-item-info:hover,\na.list-group-item-info:focus,\nbutton.list-group-item-info:focus {\n color: #31708f;\n background-color: #c4e3f3;\n}\na.list-group-item-info.active,\nbutton.list-group-item-info.active,\na.list-group-item-info.active:hover,\nbutton.list-group-item-info.active:hover,\na.list-group-item-info.active:focus,\nbutton.list-group-item-info.active:focus {\n color: #fff;\n background-color: #31708f;\n border-color: #31708f;\n}\n.list-group-item-warning {\n color: #8a6d3b;\n background-color: #fcf8e3;\n}\na.list-group-item-warning,\nbutton.list-group-item-warning {\n color: #8a6d3b;\n}\na.list-group-item-warning .list-group-item-heading,\nbutton.list-group-item-warning .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-warning:hover,\nbutton.list-group-item-warning:hover,\na.list-group-item-warning:focus,\nbutton.list-group-item-warning:focus {\n color: #8a6d3b;\n background-color: #faf2cc;\n}\na.list-group-item-warning.active,\nbutton.list-group-item-warning.active,\na.list-group-item-warning.active:hover,\nbutton.list-group-item-warning.active:hover,\na.list-group-item-warning.active:focus,\nbutton.list-group-item-warning.active:focus {\n color: #fff;\n background-color: #8a6d3b;\n border-color: #8a6d3b;\n}\n.list-group-item-danger {\n color: #a94442;\n background-color: #f2dede;\n}\na.list-group-item-danger,\nbutton.list-group-item-danger {\n color: #a94442;\n}\na.list-group-item-danger .list-group-item-heading,\nbutton.list-group-item-danger .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-danger:hover,\nbutton.list-group-item-danger:hover,\na.list-group-item-danger:focus,\nbutton.list-group-item-danger:focus {\n color: #a94442;\n background-color: #ebcccc;\n}\na.list-group-item-danger.active,\nbutton.list-group-item-danger.active,\na.list-group-item-danger.active:hover,\nbutton.list-group-item-danger.active:hover,\na.list-group-item-danger.active:focus,\nbutton.list-group-item-danger.active:focus {\n color: #fff;\n background-color: #a94442;\n border-color: #a94442;\n}\n.list-group-item-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n.list-group-item-text {\n margin-bottom: 0;\n line-height: 1.3;\n}\n.panel {\n margin-bottom: 20px;\n background-color: #fff;\n border: 1px solid transparent;\n border-radius: 4px;\n -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);\n box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);\n}\n.panel-body {\n padding: 15px;\n}\n.panel-heading {\n padding: 10px 15px;\n border-bottom: 1px solid transparent;\n border-top-left-radius: 3px;\n border-top-right-radius: 3px;\n}\n.panel-heading > .dropdown .dropdown-toggle {\n color: inherit;\n}\n.panel-title {\n margin-top: 0;\n margin-bottom: 0;\n font-size: 16px;\n color: inherit;\n}\n.panel-title > a,\n.panel-title > small,\n.panel-title > .small,\n.panel-title > small > a,\n.panel-title > .small > a {\n color: inherit;\n}\n.panel-footer {\n padding: 10px 15px;\n background-color: #f5f5f5;\n border-top: 1px solid #ddd;\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel > .list-group,\n.panel > .panel-collapse > .list-group {\n margin-bottom: 0;\n}\n.panel > .list-group .list-group-item,\n.panel > .panel-collapse > .list-group .list-group-item {\n border-width: 1px 0;\n border-radius: 0;\n}\n.panel > .list-group:first-child .list-group-item:first-child,\n.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child {\n border-top: 0;\n border-top-left-radius: 3px;\n border-top-right-radius: 3px;\n}\n.panel > .list-group:last-child .list-group-item:last-child,\n.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child {\n border-bottom: 0;\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n.panel-heading + .list-group .list-group-item:first-child {\n border-top-width: 0;\n}\n.list-group + .panel-footer {\n border-top-width: 0;\n}\n.panel > .table,\n.panel > .table-responsive > .table,\n.panel > .panel-collapse > .table {\n margin-bottom: 0;\n}\n.panel > .table caption,\n.panel > .table-responsive > .table caption,\n.panel > .panel-collapse > .table caption {\n padding-right: 15px;\n padding-left: 15px;\n}\n.panel > .table:first-child,\n.panel > .table-responsive:first-child > .table:first-child {\n border-top-left-radius: 3px;\n border-top-right-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {\n border-top-left-radius: 3px;\n border-top-right-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {\n border-top-left-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {\n border-top-right-radius: 3px;\n}\n.panel > .table:last-child,\n.panel > .table-responsive:last-child > .table:last-child {\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {\n border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {\n border-bottom-right-radius: 3px;\n}\n.panel > .panel-body + .table,\n.panel > .panel-body + .table-responsive,\n.panel > .table + .panel-body,\n.panel > .table-responsive + .panel-body {\n border-top: 1px solid #ddd;\n}\n.panel > .table > tbody:first-child > tr:first-child th,\n.panel > .table > tbody:first-child > tr:first-child td {\n border-top: 0;\n}\n.panel > .table-bordered,\n.panel > .table-responsive > .table-bordered {\n border: 0;\n}\n.panel > .table-bordered > thead > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,\n.panel > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-bordered > thead > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,\n.panel > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-bordered > tfoot > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n border-left: 0;\n}\n.panel > .table-bordered > thead > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,\n.panel > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-bordered > thead > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,\n.panel > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-bordered > tfoot > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n border-right: 0;\n}\n.panel > .table-bordered > thead > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,\n.panel > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-bordered > thead > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,\n.panel > .table-bordered > tbody > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {\n border-bottom: 0;\n}\n.panel > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-bordered > tfoot > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {\n border-bottom: 0;\n}\n.panel > .table-responsive {\n margin-bottom: 0;\n border: 0;\n}\n.panel-group {\n margin-bottom: 20px;\n}\n.panel-group .panel {\n margin-bottom: 0;\n border-radius: 4px;\n}\n.panel-group .panel + .panel {\n margin-top: 5px;\n}\n.panel-group .panel-heading {\n border-bottom: 0;\n}\n.panel-group .panel-heading + .panel-collapse > .panel-body,\n.panel-group .panel-heading + .panel-collapse > .list-group {\n border-top: 1px solid #ddd;\n}\n.panel-group .panel-footer {\n border-top: 0;\n}\n.panel-group .panel-footer + .panel-collapse .panel-body {\n border-bottom: 1px solid #ddd;\n}\n.panel-default {\n border-color: #ddd;\n}\n.panel-default > .panel-heading {\n color: #333333;\n background-color: #f5f5f5;\n border-color: #ddd;\n}\n.panel-default > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #ddd;\n}\n.panel-default > .panel-heading .badge {\n color: #f5f5f5;\n background-color: #333333;\n}\n.panel-default > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #ddd;\n}\n.panel-primary {\n border-color: #337ab7;\n}\n.panel-primary > .panel-heading {\n color: #fff;\n background-color: #337ab7;\n border-color: #337ab7;\n}\n.panel-primary > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #337ab7;\n}\n.panel-primary > .panel-heading .badge {\n color: #337ab7;\n background-color: #fff;\n}\n.panel-primary > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #337ab7;\n}\n.panel-success {\n border-color: #d6e9c6;\n}\n.panel-success > .panel-heading {\n color: #3c763d;\n background-color: #dff0d8;\n border-color: #d6e9c6;\n}\n.panel-success > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #d6e9c6;\n}\n.panel-success > .panel-heading .badge {\n color: #dff0d8;\n background-color: #3c763d;\n}\n.panel-success > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #d6e9c6;\n}\n.panel-info {\n border-color: #bce8f1;\n}\n.panel-info > .panel-heading {\n color: #31708f;\n background-color: #d9edf7;\n border-color: #bce8f1;\n}\n.panel-info > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #bce8f1;\n}\n.panel-info > .panel-heading .badge {\n color: #d9edf7;\n background-color: #31708f;\n}\n.panel-info > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #bce8f1;\n}\n.panel-warning {\n border-color: #faebcc;\n}\n.panel-warning > .panel-heading {\n color: #8a6d3b;\n background-color: #fcf8e3;\n border-color: #faebcc;\n}\n.panel-warning > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #faebcc;\n}\n.panel-warning > .panel-heading .badge {\n color: #fcf8e3;\n background-color: #8a6d3b;\n}\n.panel-warning > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #faebcc;\n}\n.panel-danger {\n border-color: #ebccd1;\n}\n.panel-danger > .panel-heading {\n color: #a94442;\n background-color: #f2dede;\n border-color: #ebccd1;\n}\n.panel-danger > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #ebccd1;\n}\n.panel-danger > .panel-heading .badge {\n color: #f2dede;\n background-color: #a94442;\n}\n.panel-danger > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #ebccd1;\n}\n.embed-responsive {\n position: relative;\n display: block;\n height: 0;\n padding: 0;\n overflow: hidden;\n}\n.embed-responsive .embed-responsive-item,\n.embed-responsive iframe,\n.embed-responsive embed,\n.embed-responsive object,\n.embed-responsive video {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n width: 100%;\n height: 100%;\n border: 0;\n}\n.embed-responsive-16by9 {\n padding-bottom: 56.25%;\n}\n.embed-responsive-4by3 {\n padding-bottom: 75%;\n}\n.well {\n min-height: 20px;\n padding: 19px;\n margin-bottom: 20px;\n background-color: #f5f5f5;\n border: 1px solid #e3e3e3;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);\n}\n.well blockquote {\n border-color: #ddd;\n border-color: rgba(0, 0, 0, 0.15);\n}\n.well-lg {\n padding: 24px;\n border-radius: 6px;\n}\n.well-sm {\n padding: 9px;\n border-radius: 3px;\n}\n.close {\n float: right;\n font-size: 21px;\n font-weight: bold;\n line-height: 1;\n color: #000;\n text-shadow: 0 1px 0 #fff;\n filter: alpha(opacity=20);\n opacity: 0.2;\n}\n.close:hover,\n.close:focus {\n color: #000;\n text-decoration: none;\n cursor: pointer;\n filter: alpha(opacity=50);\n opacity: 0.5;\n}\nbutton.close {\n padding: 0;\n cursor: pointer;\n background: transparent;\n border: 0;\n -webkit-appearance: none;\n appearance: none;\n}\n.modal-open {\n overflow: hidden;\n}\n.modal {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1050;\n display: none;\n overflow: hidden;\n -webkit-overflow-scrolling: touch;\n outline: 0;\n}\n.modal.fade .modal-dialog {\n -webkit-transform: translate(0, -25%);\n -ms-transform: translate(0, -25%);\n -o-transform: translate(0, -25%);\n transform: translate(0, -25%);\n -webkit-transition: -webkit-transform 0.3s ease-out;\n -moz-transition: -moz-transform 0.3s ease-out;\n -o-transition: -o-transform 0.3s ease-out;\n transition: transform 0.3s ease-out;\n}\n.modal.in .modal-dialog {\n -webkit-transform: translate(0, 0);\n -ms-transform: translate(0, 0);\n -o-transform: translate(0, 0);\n transform: translate(0, 0);\n}\n.modal-open .modal {\n overflow-x: hidden;\n overflow-y: auto;\n}\n.modal-dialog {\n position: relative;\n width: auto;\n margin: 10px;\n}\n.modal-content {\n position: relative;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid #999;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 6px;\n -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n outline: 0;\n}\n.modal-backdrop {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1040;\n background-color: #000;\n}\n.modal-backdrop.fade {\n filter: alpha(opacity=0);\n opacity: 0;\n}\n.modal-backdrop.in {\n filter: alpha(opacity=50);\n opacity: 0.5;\n}\n.modal-header {\n padding: 15px;\n border-bottom: 1px solid #e5e5e5;\n}\n.modal-header .close {\n margin-top: -2px;\n}\n.modal-title {\n margin: 0;\n line-height: 1.42857143;\n}\n.modal-body {\n position: relative;\n padding: 15px;\n}\n.modal-footer {\n padding: 15px;\n text-align: right;\n border-top: 1px solid #e5e5e5;\n}\n.modal-footer .btn + .btn {\n margin-bottom: 0;\n margin-left: 5px;\n}\n.modal-footer .btn-group .btn + .btn {\n margin-left: -1px;\n}\n.modal-footer .btn-block + .btn-block {\n margin-left: 0;\n}\n.modal-scrollbar-measure {\n position: absolute;\n top: -9999px;\n width: 50px;\n height: 50px;\n overflow: scroll;\n}\n@media (min-width: 768px) {\n .modal-dialog {\n width: 600px;\n margin: 30px auto;\n }\n .modal-content {\n -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);\n box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);\n }\n .modal-sm {\n width: 300px;\n }\n}\n@media (min-width: 992px) {\n .modal-lg {\n width: 900px;\n }\n}\n.tooltip {\n position: absolute;\n z-index: 1070;\n display: block;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-style: normal;\n font-weight: 400;\n line-height: 1.42857143;\n line-break: auto;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n word-spacing: normal;\n word-wrap: normal;\n white-space: normal;\n font-size: 12px;\n filter: alpha(opacity=0);\n opacity: 0;\n}\n.tooltip.in {\n filter: alpha(opacity=90);\n opacity: 0.9;\n}\n.tooltip.top {\n padding: 5px 0;\n margin-top: -3px;\n}\n.tooltip.right {\n padding: 0 5px;\n margin-left: 3px;\n}\n.tooltip.bottom {\n padding: 5px 0;\n margin-top: 3px;\n}\n.tooltip.left {\n padding: 0 5px;\n margin-left: -3px;\n}\n.tooltip.top .tooltip-arrow {\n bottom: 0;\n left: 50%;\n margin-left: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000;\n}\n.tooltip.top-left .tooltip-arrow {\n right: 5px;\n bottom: 0;\n margin-bottom: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000;\n}\n.tooltip.top-right .tooltip-arrow {\n bottom: 0;\n left: 5px;\n margin-bottom: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000;\n}\n.tooltip.right .tooltip-arrow {\n top: 50%;\n left: 0;\n margin-top: -5px;\n border-width: 5px 5px 5px 0;\n border-right-color: #000;\n}\n.tooltip.left .tooltip-arrow {\n top: 50%;\n right: 0;\n margin-top: -5px;\n border-width: 5px 0 5px 5px;\n border-left-color: #000;\n}\n.tooltip.bottom .tooltip-arrow {\n top: 0;\n left: 50%;\n margin-left: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000;\n}\n.tooltip.bottom-left .tooltip-arrow {\n top: 0;\n right: 5px;\n margin-top: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000;\n}\n.tooltip.bottom-right .tooltip-arrow {\n top: 0;\n left: 5px;\n margin-top: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000;\n}\n.tooltip-inner {\n max-width: 200px;\n padding: 3px 8px;\n color: #fff;\n text-align: center;\n background-color: #000;\n border-radius: 4px;\n}\n.tooltip-arrow {\n position: absolute;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n}\n.popover {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 1060;\n display: none;\n max-width: 276px;\n padding: 1px;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-style: normal;\n font-weight: 400;\n line-height: 1.42857143;\n line-break: auto;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n word-spacing: normal;\n word-wrap: normal;\n white-space: normal;\n font-size: 14px;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid #ccc;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 6px;\n -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n}\n.popover.top {\n margin-top: -10px;\n}\n.popover.right {\n margin-left: 10px;\n}\n.popover.bottom {\n margin-top: 10px;\n}\n.popover.left {\n margin-left: -10px;\n}\n.popover > .arrow {\n border-width: 11px;\n}\n.popover > .arrow,\n.popover > .arrow:after {\n position: absolute;\n display: block;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n}\n.popover > .arrow:after {\n content: \"\";\n border-width: 10px;\n}\n.popover.top > .arrow {\n bottom: -11px;\n left: 50%;\n margin-left: -11px;\n border-top-color: #999999;\n border-top-color: rgba(0, 0, 0, 0.25);\n border-bottom-width: 0;\n}\n.popover.top > .arrow:after {\n bottom: 1px;\n margin-left: -10px;\n content: \" \";\n border-top-color: #fff;\n border-bottom-width: 0;\n}\n.popover.right > .arrow {\n top: 50%;\n left: -11px;\n margin-top: -11px;\n border-right-color: #999999;\n border-right-color: rgba(0, 0, 0, 0.25);\n border-left-width: 0;\n}\n.popover.right > .arrow:after {\n bottom: -10px;\n left: 1px;\n content: \" \";\n border-right-color: #fff;\n border-left-width: 0;\n}\n.popover.bottom > .arrow {\n top: -11px;\n left: 50%;\n margin-left: -11px;\n border-top-width: 0;\n border-bottom-color: #999999;\n border-bottom-color: rgba(0, 0, 0, 0.25);\n}\n.popover.bottom > .arrow:after {\n top: 1px;\n margin-left: -10px;\n content: \" \";\n border-top-width: 0;\n border-bottom-color: #fff;\n}\n.popover.left > .arrow {\n top: 50%;\n right: -11px;\n margin-top: -11px;\n border-right-width: 0;\n border-left-color: #999999;\n border-left-color: rgba(0, 0, 0, 0.25);\n}\n.popover.left > .arrow:after {\n right: 1px;\n bottom: -10px;\n content: \" \";\n border-right-width: 0;\n border-left-color: #fff;\n}\n.popover-title {\n padding: 8px 14px;\n margin: 0;\n font-size: 14px;\n background-color: #f7f7f7;\n border-bottom: 1px solid #ebebeb;\n border-radius: 5px 5px 0 0;\n}\n.popover-content {\n padding: 9px 14px;\n}\n.carousel {\n position: relative;\n}\n.carousel-inner {\n position: relative;\n width: 100%;\n overflow: hidden;\n}\n.carousel-inner > .item {\n position: relative;\n display: none;\n -webkit-transition: 0.6s ease-in-out left;\n -o-transition: 0.6s ease-in-out left;\n transition: 0.6s ease-in-out left;\n}\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n line-height: 1;\n}\n@media all and (transform-3d), (-webkit-transform-3d) {\n .carousel-inner > .item {\n -webkit-transition: -webkit-transform 0.6s ease-in-out;\n -moz-transition: -moz-transform 0.6s ease-in-out;\n -o-transition: -o-transform 0.6s ease-in-out;\n transition: transform 0.6s ease-in-out;\n -webkit-backface-visibility: hidden;\n -moz-backface-visibility: hidden;\n backface-visibility: hidden;\n -webkit-perspective: 1000px;\n -moz-perspective: 1000px;\n perspective: 1000px;\n }\n .carousel-inner > .item.next,\n .carousel-inner > .item.active.right {\n -webkit-transform: translate3d(100%, 0, 0);\n transform: translate3d(100%, 0, 0);\n left: 0;\n }\n .carousel-inner > .item.prev,\n .carousel-inner > .item.active.left {\n -webkit-transform: translate3d(-100%, 0, 0);\n transform: translate3d(-100%, 0, 0);\n left: 0;\n }\n .carousel-inner > .item.next.left,\n .carousel-inner > .item.prev.right,\n .carousel-inner > .item.active {\n -webkit-transform: translate3d(0, 0, 0);\n transform: translate3d(0, 0, 0);\n left: 0;\n }\n}\n.carousel-inner > .active,\n.carousel-inner > .next,\n.carousel-inner > .prev {\n display: block;\n}\n.carousel-inner > .active {\n left: 0;\n}\n.carousel-inner > .next,\n.carousel-inner > .prev {\n position: absolute;\n top: 0;\n width: 100%;\n}\n.carousel-inner > .next {\n left: 100%;\n}\n.carousel-inner > .prev {\n left: -100%;\n}\n.carousel-inner > .next.left,\n.carousel-inner > .prev.right {\n left: 0;\n}\n.carousel-inner > .active.left {\n left: -100%;\n}\n.carousel-inner > .active.right {\n left: 100%;\n}\n.carousel-control {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n width: 15%;\n font-size: 20px;\n color: #fff;\n text-align: center;\n text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);\n background-color: rgba(0, 0, 0, 0);\n filter: alpha(opacity=50);\n opacity: 0.5;\n}\n.carousel-control.left {\n background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);\n background-repeat: repeat-x;\n}\n.carousel-control.right {\n right: 0;\n left: auto;\n background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);\n background-repeat: repeat-x;\n}\n.carousel-control:hover,\n.carousel-control:focus {\n color: #fff;\n text-decoration: none;\n outline: 0;\n filter: alpha(opacity=90);\n opacity: 0.9;\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-left,\n.carousel-control .glyphicon-chevron-right {\n position: absolute;\n top: 50%;\n z-index: 5;\n display: inline-block;\n margin-top: -10px;\n}\n.carousel-control .icon-prev,\n.carousel-control .glyphicon-chevron-left {\n left: 50%;\n margin-left: -10px;\n}\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-right {\n right: 50%;\n margin-right: -10px;\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next {\n width: 20px;\n height: 20px;\n font-family: serif;\n line-height: 1;\n}\n.carousel-control .icon-prev:before {\n content: \"\\2039\";\n}\n.carousel-control .icon-next:before {\n content: \"\\203a\";\n}\n.carousel-indicators {\n position: absolute;\n bottom: 10px;\n left: 50%;\n z-index: 15;\n width: 60%;\n padding-left: 0;\n margin-left: -30%;\n text-align: center;\n list-style: none;\n}\n.carousel-indicators li {\n display: inline-block;\n width: 10px;\n height: 10px;\n margin: 1px;\n text-indent: -999px;\n cursor: pointer;\n background-color: #000 \\9;\n background-color: rgba(0, 0, 0, 0);\n border: 1px solid #fff;\n border-radius: 10px;\n}\n.carousel-indicators .active {\n width: 12px;\n height: 12px;\n margin: 0;\n background-color: #fff;\n}\n.carousel-caption {\n position: absolute;\n right: 15%;\n bottom: 20px;\n left: 15%;\n z-index: 10;\n padding-top: 20px;\n padding-bottom: 20px;\n color: #fff;\n text-align: center;\n text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);\n}\n.carousel-caption .btn {\n text-shadow: none;\n}\n@media screen and (min-width: 768px) {\n .carousel-control .glyphicon-chevron-left,\n .carousel-control .glyphicon-chevron-right,\n .carousel-control .icon-prev,\n .carousel-control .icon-next {\n width: 30px;\n height: 30px;\n margin-top: -10px;\n font-size: 30px;\n }\n .carousel-control .glyphicon-chevron-left,\n .carousel-control .icon-prev {\n margin-left: -10px;\n }\n .carousel-control .glyphicon-chevron-right,\n .carousel-control .icon-next {\n margin-right: -10px;\n }\n .carousel-caption {\n right: 20%;\n left: 20%;\n padding-bottom: 30px;\n }\n .carousel-indicators {\n bottom: 20px;\n }\n}\n.clearfix:before,\n.clearfix:after,\n.dl-horizontal dd:before,\n.dl-horizontal dd:after,\n.container:before,\n.container:after,\n.container-fluid:before,\n.container-fluid:after,\n.row:before,\n.row:after,\n.form-horizontal .form-group:before,\n.form-horizontal .form-group:after,\n.btn-toolbar:before,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:before,\n.btn-group-vertical > .btn-group:after,\n.nav:before,\n.nav:after,\n.navbar:before,\n.navbar:after,\n.navbar-header:before,\n.navbar-header:after,\n.navbar-collapse:before,\n.navbar-collapse:after,\n.pager:before,\n.pager:after,\n.panel-body:before,\n.panel-body:after,\n.modal-header:before,\n.modal-header:after,\n.modal-footer:before,\n.modal-footer:after {\n display: table;\n content: \" \";\n}\n.clearfix:after,\n.dl-horizontal dd:after,\n.container:after,\n.container-fluid:after,\n.row:after,\n.form-horizontal .form-group:after,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:after,\n.nav:after,\n.navbar:after,\n.navbar-header:after,\n.navbar-collapse:after,\n.pager:after,\n.panel-body:after,\n.modal-header:after,\n.modal-footer:after {\n clear: both;\n}\n.center-block {\n display: block;\n margin-right: auto;\n margin-left: auto;\n}\n.pull-right {\n float: right !important;\n}\n.pull-left {\n float: left !important;\n}\n.hide {\n display: none !important;\n}\n.show {\n display: block !important;\n}\n.invisible {\n visibility: hidden;\n}\n.text-hide {\n font: 0/0 a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0;\n}\n.hidden {\n display: none !important;\n}\n.affix {\n position: fixed;\n}\n@-ms-viewport {\n width: device-width;\n}\n.visible-xs,\n.visible-sm,\n.visible-md,\n.visible-lg {\n display: none !important;\n}\n.visible-xs-block,\n.visible-xs-inline,\n.visible-xs-inline-block,\n.visible-sm-block,\n.visible-sm-inline,\n.visible-sm-inline-block,\n.visible-md-block,\n.visible-md-inline,\n.visible-md-inline-block,\n.visible-lg-block,\n.visible-lg-inline,\n.visible-lg-inline-block {\n display: none !important;\n}\n@media (max-width: 767px) {\n .visible-xs {\n display: block !important;\n }\n table.visible-xs {\n display: table !important;\n }\n tr.visible-xs {\n display: table-row !important;\n }\n th.visible-xs,\n td.visible-xs {\n display: table-cell !important;\n }\n}\n@media (max-width: 767px) {\n .visible-xs-block {\n display: block !important;\n }\n}\n@media (max-width: 767px) {\n .visible-xs-inline {\n display: inline !important;\n }\n}\n@media (max-width: 767px) {\n .visible-xs-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm {\n display: block !important;\n }\n table.visible-sm {\n display: table !important;\n }\n tr.visible-sm {\n display: table-row !important;\n }\n th.visible-sm,\n td.visible-sm {\n display: table-cell !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-block {\n display: block !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-inline {\n display: inline !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md {\n display: block !important;\n }\n table.visible-md {\n display: table !important;\n }\n tr.visible-md {\n display: table-row !important;\n }\n th.visible-md,\n td.visible-md {\n display: table-cell !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-block {\n display: block !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-inline {\n display: inline !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg {\n display: block !important;\n }\n table.visible-lg {\n display: table !important;\n }\n tr.visible-lg {\n display: table-row !important;\n }\n th.visible-lg,\n td.visible-lg {\n display: table-cell !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg-block {\n display: block !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg-inline {\n display: inline !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg-inline-block {\n display: inline-block !important;\n }\n}\n@media (max-width: 767px) {\n .hidden-xs {\n display: none !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .hidden-sm {\n display: none !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .hidden-md {\n display: none !important;\n }\n}\n@media (min-width: 1200px) {\n .hidden-lg {\n display: none !important;\n }\n}\n.visible-print {\n display: none !important;\n}\n@media print {\n .visible-print {\n display: block !important;\n }\n table.visible-print {\n display: table !important;\n }\n tr.visible-print {\n display: table-row !important;\n }\n th.visible-print,\n td.visible-print {\n display: table-cell !important;\n }\n}\n.visible-print-block {\n display: none !important;\n}\n@media print {\n .visible-print-block {\n display: block !important;\n }\n}\n.visible-print-inline {\n display: none !important;\n}\n@media print {\n .visible-print-inline {\n display: inline !important;\n }\n}\n.visible-print-inline-block {\n display: none !important;\n}\n@media print {\n .visible-print-inline-block {\n display: inline-block !important;\n }\n}\n@media print {\n .hidden-print {\n display: none !important;\n }\n}\n/*# sourceMappingURL=bootstrap.css.map */","// stylelint-disable\n\n/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */\n\n//\n// 1. Set default font family to sans-serif.\n// 2. Prevent iOS and IE text size adjust after device orientation change,\n// without disabling user zoom.\n//\n\nhtml {\n font-family: sans-serif; // 1\n -ms-text-size-adjust: 100%; // 2\n -webkit-text-size-adjust: 100%; // 2\n}\n\n//\n// Remove default margin.\n//\n\nbody {\n margin: 0;\n}\n\n// HTML5 display definitions\n// ==========================================================================\n\n//\n// Correct `block` display not defined for any HTML5 element in IE 8/9.\n// Correct `block` display not defined for `details` or `summary` in IE 10/11\n// and Firefox.\n// Correct `block` display not defined for `main` in IE 11.\n//\n\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n display: block;\n}\n\n//\n// 1. Correct `inline-block` display not defined in IE 8/9.\n// 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.\n//\n\naudio,\ncanvas,\nprogress,\nvideo {\n display: inline-block; // 1\n vertical-align: baseline; // 2\n}\n\n//\n// Prevent modern browsers from displaying `audio` without controls.\n// Remove excess height in iOS 5 devices.\n//\n\naudio:not([controls]) {\n display: none;\n height: 0;\n}\n\n//\n// Address `[hidden]` styling not present in IE 8/9/10.\n// Hide the `template` element in IE 8/9/10/11, Safari, and Firefox < 22.\n//\n\n[hidden],\ntemplate {\n display: none;\n}\n\n// Links\n// ==========================================================================\n\n//\n// Remove the gray background color from active links in IE 10.\n//\n\na {\n background-color: transparent;\n}\n\n//\n// Improve readability of focused elements when they are also in an\n// active/hover state.\n//\n\na:active,\na:hover {\n outline: 0;\n}\n\n// Text-level semantics\n// ==========================================================================\n\n//\n// 1. Remove the bottom border in Chrome 57- and Firefox 39-.\n// 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n//\n\nabbr[title] {\n border-bottom: none; // 1\n text-decoration: underline; // 2\n text-decoration: underline dotted; // 2\n}\n\n//\n// Address style set to `bolder` in Firefox 4+, Safari, and Chrome.\n//\n\nb,\nstrong {\n font-weight: bold;\n}\n\n//\n// Address styling not present in Safari and Chrome.\n//\n\ndfn {\n font-style: italic;\n}\n\n//\n// Address variable `h1` font-size and margin within `section` and `article`\n// contexts in Firefox 4+, Safari, and Chrome.\n//\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n//\n// Address styling not present in IE 8/9.\n//\n\nmark {\n background: #ff0;\n color: #000;\n}\n\n//\n// Address inconsistent and variable font size in all browsers.\n//\n\nsmall {\n font-size: 80%;\n}\n\n//\n// Prevent `sub` and `sup` affecting `line-height` in all browsers.\n//\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsup {\n top: -0.5em;\n}\n\nsub {\n bottom: -0.25em;\n}\n\n// Embedded content\n// ==========================================================================\n\n//\n// Remove border when inside `a` element in IE 8/9/10.\n//\n\nimg {\n border: 0;\n}\n\n//\n// Correct overflow not hidden in IE 9/10/11.\n//\n\nsvg:not(:root) {\n overflow: hidden;\n}\n\n// Grouping content\n// ==========================================================================\n\n//\n// Address margin not present in IE 8/9 and Safari.\n//\n\nfigure {\n margin: 1em 40px;\n}\n\n//\n// Address differences between Firefox and other browsers.\n//\n\nhr {\n box-sizing: content-box;\n height: 0;\n}\n\n//\n// Contain overflow in all browsers.\n//\n\npre {\n overflow: auto;\n}\n\n//\n// Address odd `em`-unit font size rendering in all browsers.\n//\n\ncode,\nkbd,\npre,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em;\n}\n\n// Forms\n// ==========================================================================\n\n//\n// Known limitation: by default, Chrome and Safari on OS X allow very limited\n// styling of `select`, unless a `border` property is set.\n//\n\n//\n// 1. Correct color not being inherited.\n// Known issue: affects color of disabled elements.\n// 2. Correct font properties not being inherited.\n// 3. Address margins set differently in Firefox 4+, Safari, and Chrome.\n//\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n color: inherit; // 1\n font: inherit; // 2\n margin: 0; // 3\n}\n\n//\n// Address `overflow` set to `hidden` in IE 8/9/10/11.\n//\n\nbutton {\n overflow: visible;\n}\n\n//\n// Address inconsistent `text-transform` inheritance for `button` and `select`.\n// All other form control elements do not inherit `text-transform` values.\n// Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.\n// Correct `select` style inheritance in Firefox.\n//\n\nbutton,\nselect {\n text-transform: none;\n}\n\n//\n// 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`\n// and `video` controls.\n// 2. Correct inability to style clickable `input` types in iOS.\n// 3. Improve usability and consistency of cursor style between image-type\n// `input` and others.\n//\n\nbutton,\nhtml input[type=\"button\"], // 1\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n -webkit-appearance: button; // 2\n cursor: pointer; // 3\n}\n\n//\n// Re-set default cursor for disabled elements.\n//\n\nbutton[disabled],\nhtml input[disabled] {\n cursor: default;\n}\n\n//\n// Remove inner padding and border in Firefox 4+.\n//\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n border: 0;\n padding: 0;\n}\n\n//\n// Address Firefox 4+ setting `line-height` on `input` using `!important` in\n// the UA stylesheet.\n//\n\ninput {\n line-height: normal;\n}\n\n//\n// It's recommended that you don't attempt to style these elements.\n// Firefox's implementation doesn't respect box-sizing, padding, or width.\n//\n// 1. Address box sizing set to `content-box` in IE 8/9/10.\n// 2. Remove excess padding in IE 8/9/10.\n//\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n box-sizing: border-box; // 1\n padding: 0; // 2\n}\n\n//\n// Fix the cursor style for Chrome's increment/decrement buttons. For certain\n// `font-size` values of the `input`, it causes the cursor style of the\n// decrement button to change from `default` to `text`.\n//\n\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n//\n// 1. Address `appearance` set to `searchfield` in Safari and Chrome.\n// 2. Address `box-sizing` set to `border-box` in Safari and Chrome.\n//\n\ninput[type=\"search\"] {\n -webkit-appearance: textfield; // 1\n box-sizing: content-box; //2\n}\n\n//\n// Remove inner padding and search cancel button in Safari and Chrome on OS X.\n// Safari (but not Chrome) clips the cancel button when the search input has\n// padding (and `textfield` appearance).\n//\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n//\n// Define consistent border, margin, and padding.\n//\n\nfieldset {\n border: 1px solid #c0c0c0;\n margin: 0 2px;\n padding: 0.35em 0.625em 0.75em;\n}\n\n//\n// 1. Correct `color` not being inherited in IE 8/9/10/11.\n// 2. Remove padding so people aren't caught out if they zero out fieldsets.\n//\n\nlegend {\n border: 0; // 1\n padding: 0; // 2\n}\n\n//\n// Remove default vertical scrollbar in IE 8/9/10/11.\n//\n\ntextarea {\n overflow: auto;\n}\n\n//\n// Don't inherit the `font-weight` (applied by a rule above).\n// NOTE: the default cannot safely be changed in Chrome and Safari on OS X.\n//\n\noptgroup {\n font-weight: bold;\n}\n\n// Tables\n// ==========================================================================\n\n//\n// Remove most spacing between table cells.\n//\n\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n}\n\ntd,\nth {\n padding: 0;\n}\n","// stylelint-disable declaration-no-important, selector-no-qualifying-type\n\n/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */\n\n// ==========================================================================\n// Print styles.\n// Inlined to avoid the additional HTTP request: h5bp.com/r\n// ==========================================================================\n\n@media print {\n *,\n *:before,\n *:after {\n color: #000 !important; // Black prints faster: h5bp.com/s\n text-shadow: none !important;\n background: transparent !important;\n box-shadow: none !important;\n }\n\n a,\n a:visited {\n text-decoration: underline;\n }\n\n a[href]:after {\n content: \" (\" attr(href) \")\";\n }\n\n abbr[title]:after {\n content: \" (\" attr(title) \")\";\n }\n\n // Don't show links that are fragment identifiers,\n // or use the `javascript:` pseudo protocol\n a[href^=\"#\"]:after,\n a[href^=\"javascript:\"]:after {\n content: \"\";\n }\n\n pre,\n blockquote {\n border: 1px solid #999;\n page-break-inside: avoid;\n }\n\n thead {\n display: table-header-group; // h5bp.com/t\n }\n\n tr,\n img {\n page-break-inside: avoid;\n }\n\n img {\n max-width: 100% !important;\n }\n\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n\n h2,\n h3 {\n page-break-after: avoid;\n }\n\n // Bootstrap specific changes start\n\n // Bootstrap components\n .navbar {\n display: none;\n }\n .btn,\n .dropup > .btn {\n > .caret {\n border-top-color: #000 !important;\n }\n }\n .label {\n border: 1px solid #000;\n }\n\n .table {\n border-collapse: collapse !important;\n\n td,\n th {\n background-color: #fff !important;\n }\n }\n .table-bordered {\n th,\n td {\n border: 1px solid #ddd !important;\n }\n }\n}\n","// stylelint-disable value-list-comma-newline-after, value-list-comma-space-after, indentation, declaration-colon-newline-after, font-family-no-missing-generic-family-keyword\n\n//\n// Glyphicons for Bootstrap\n//\n// Since icons are fonts, they can be placed anywhere text is placed and are\n// thus automatically sized to match the surrounding child. To use, create an\n// inline element with the appropriate classes, like so:\n//\n// Star\n\n// Import the fonts\n@font-face {\n font-family: \"Glyphicons Halflings\";\n src: url(\"@{icon-font-path}@{icon-font-name}.eot\");\n src: url(\"@{icon-font-path}@{icon-font-name}.eot?#iefix\") format(\"embedded-opentype\"),\n url(\"@{icon-font-path}@{icon-font-name}.woff2\") format(\"woff2\"),\n url(\"@{icon-font-path}@{icon-font-name}.woff\") format(\"woff\"),\n url(\"@{icon-font-path}@{icon-font-name}.ttf\") format(\"truetype\"),\n url(\"@{icon-font-path}@{icon-font-name}.svg#@{icon-font-svg-id}\") format(\"svg\");\n}\n\n// Catchall baseclass\n.glyphicon {\n position: relative;\n top: 1px;\n display: inline-block;\n font-family: \"Glyphicons Halflings\";\n font-style: normal;\n font-weight: 400;\n line-height: 1;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\n// Individual icons\n.glyphicon-asterisk { &:before { content: \"\\002a\"; } }\n.glyphicon-plus { &:before { content: \"\\002b\"; } }\n.glyphicon-euro,\n.glyphicon-eur { &:before { content: \"\\20ac\"; } }\n.glyphicon-minus { &:before { content: \"\\2212\"; } }\n.glyphicon-cloud { &:before { content: \"\\2601\"; } }\n.glyphicon-envelope { &:before { content: \"\\2709\"; } }\n.glyphicon-pencil { &:before { content: \"\\270f\"; } }\n.glyphicon-glass { &:before { content: \"\\e001\"; } }\n.glyphicon-music { &:before { content: \"\\e002\"; } }\n.glyphicon-search { &:before { content: \"\\e003\"; } }\n.glyphicon-heart { &:before { content: \"\\e005\"; } }\n.glyphicon-star { &:before { content: \"\\e006\"; } }\n.glyphicon-star-empty { &:before { content: \"\\e007\"; } }\n.glyphicon-user { &:before { content: \"\\e008\"; } }\n.glyphicon-film { &:before { content: \"\\e009\"; } }\n.glyphicon-th-large { &:before { content: \"\\e010\"; } }\n.glyphicon-th { &:before { content: \"\\e011\"; } }\n.glyphicon-th-list { &:before { content: \"\\e012\"; } }\n.glyphicon-ok { &:before { content: \"\\e013\"; } }\n.glyphicon-remove { &:before { content: \"\\e014\"; } }\n.glyphicon-zoom-in { &:before { content: \"\\e015\"; } }\n.glyphicon-zoom-out { &:before { content: \"\\e016\"; } }\n.glyphicon-off { &:before { content: \"\\e017\"; } }\n.glyphicon-signal { &:before { content: \"\\e018\"; } }\n.glyphicon-cog { &:before { content: \"\\e019\"; } }\n.glyphicon-trash { &:before { content: \"\\e020\"; } }\n.glyphicon-home { &:before { content: \"\\e021\"; } }\n.glyphicon-file { &:before { content: \"\\e022\"; } }\n.glyphicon-time { &:before { content: \"\\e023\"; } }\n.glyphicon-road { &:before { content: \"\\e024\"; } }\n.glyphicon-download-alt { &:before { content: \"\\e025\"; } }\n.glyphicon-download { &:before { content: \"\\e026\"; } }\n.glyphicon-upload { &:before { content: \"\\e027\"; } }\n.glyphicon-inbox { &:before { content: \"\\e028\"; } }\n.glyphicon-play-circle { &:before { content: \"\\e029\"; } }\n.glyphicon-repeat { &:before { content: \"\\e030\"; } }\n.glyphicon-refresh { &:before { content: \"\\e031\"; } }\n.glyphicon-list-alt { &:before { content: \"\\e032\"; } }\n.glyphicon-lock { &:before { content: \"\\e033\"; } }\n.glyphicon-flag { &:before { content: \"\\e034\"; } }\n.glyphicon-headphones { &:before { content: \"\\e035\"; } }\n.glyphicon-volume-off { &:before { content: \"\\e036\"; } }\n.glyphicon-volume-down { &:before { content: \"\\e037\"; } }\n.glyphicon-volume-up { &:before { content: \"\\e038\"; } }\n.glyphicon-qrcode { &:before { content: \"\\e039\"; } }\n.glyphicon-barcode { &:before { content: \"\\e040\"; } }\n.glyphicon-tag { &:before { content: \"\\e041\"; } }\n.glyphicon-tags { &:before { content: \"\\e042\"; } }\n.glyphicon-book { &:before { content: \"\\e043\"; } }\n.glyphicon-bookmark { &:before { content: \"\\e044\"; } }\n.glyphicon-print { &:before { content: \"\\e045\"; } }\n.glyphicon-camera { &:before { content: \"\\e046\"; } }\n.glyphicon-font { &:before { content: \"\\e047\"; } }\n.glyphicon-bold { &:before { content: \"\\e048\"; } }\n.glyphicon-italic { &:before { content: \"\\e049\"; } }\n.glyphicon-text-height { &:before { content: \"\\e050\"; } }\n.glyphicon-text-width { &:before { content: \"\\e051\"; } }\n.glyphicon-align-left { &:before { content: \"\\e052\"; } }\n.glyphicon-align-center { &:before { content: \"\\e053\"; } }\n.glyphicon-align-right { &:before { content: \"\\e054\"; } }\n.glyphicon-align-justify { &:before { content: \"\\e055\"; } }\n.glyphicon-list { &:before { content: \"\\e056\"; } }\n.glyphicon-indent-left { &:before { content: \"\\e057\"; } }\n.glyphicon-indent-right { &:before { content: \"\\e058\"; } }\n.glyphicon-facetime-video { &:before { content: \"\\e059\"; } }\n.glyphicon-picture { &:before { content: \"\\e060\"; } }\n.glyphicon-map-marker { &:before { content: \"\\e062\"; } }\n.glyphicon-adjust { &:before { content: \"\\e063\"; } }\n.glyphicon-tint { &:before { content: \"\\e064\"; } }\n.glyphicon-edit { &:before { content: \"\\e065\"; } }\n.glyphicon-share { &:before { content: \"\\e066\"; } }\n.glyphicon-check { &:before { content: \"\\e067\"; } }\n.glyphicon-move { &:before { content: \"\\e068\"; } }\n.glyphicon-step-backward { &:before { content: \"\\e069\"; } }\n.glyphicon-fast-backward { &:before { content: \"\\e070\"; } }\n.glyphicon-backward { &:before { content: \"\\e071\"; } }\n.glyphicon-play { &:before { content: \"\\e072\"; } }\n.glyphicon-pause { &:before { content: \"\\e073\"; } }\n.glyphicon-stop { &:before { content: \"\\e074\"; } }\n.glyphicon-forward { &:before { content: \"\\e075\"; } }\n.glyphicon-fast-forward { &:before { content: \"\\e076\"; } }\n.glyphicon-step-forward { &:before { content: \"\\e077\"; } }\n.glyphicon-eject { &:before { content: \"\\e078\"; } }\n.glyphicon-chevron-left { &:before { content: \"\\e079\"; } }\n.glyphicon-chevron-right { &:before { content: \"\\e080\"; } }\n.glyphicon-plus-sign { &:before { content: \"\\e081\"; } }\n.glyphicon-minus-sign { &:before { content: \"\\e082\"; } }\n.glyphicon-remove-sign { &:before { content: \"\\e083\"; } }\n.glyphicon-ok-sign { &:before { content: \"\\e084\"; } }\n.glyphicon-question-sign { &:before { content: \"\\e085\"; } }\n.glyphicon-info-sign { &:before { content: \"\\e086\"; } }\n.glyphicon-screenshot { &:before { content: \"\\e087\"; } }\n.glyphicon-remove-circle { &:before { content: \"\\e088\"; } }\n.glyphicon-ok-circle { &:before { content: \"\\e089\"; } }\n.glyphicon-ban-circle { &:before { content: \"\\e090\"; } }\n.glyphicon-arrow-left { &:before { content: \"\\e091\"; } }\n.glyphicon-arrow-right { &:before { content: \"\\e092\"; } }\n.glyphicon-arrow-up { &:before { content: \"\\e093\"; } }\n.glyphicon-arrow-down { &:before { content: \"\\e094\"; } }\n.glyphicon-share-alt { &:before { content: \"\\e095\"; } }\n.glyphicon-resize-full { &:before { content: \"\\e096\"; } }\n.glyphicon-resize-small { &:before { content: \"\\e097\"; } }\n.glyphicon-exclamation-sign { &:before { content: \"\\e101\"; } }\n.glyphicon-gift { &:before { content: \"\\e102\"; } }\n.glyphicon-leaf { &:before { content: \"\\e103\"; } }\n.glyphicon-fire { &:before { content: \"\\e104\"; } }\n.glyphicon-eye-open { &:before { content: \"\\e105\"; } }\n.glyphicon-eye-close { &:before { content: \"\\e106\"; } }\n.glyphicon-warning-sign { &:before { content: \"\\e107\"; } }\n.glyphicon-plane { &:before { content: \"\\e108\"; } }\n.glyphicon-calendar { &:before { content: \"\\e109\"; } }\n.glyphicon-random { &:before { content: \"\\e110\"; } }\n.glyphicon-comment { &:before { content: \"\\e111\"; } }\n.glyphicon-magnet { &:before { content: \"\\e112\"; } }\n.glyphicon-chevron-up { &:before { content: \"\\e113\"; } }\n.glyphicon-chevron-down { &:before { content: \"\\e114\"; } }\n.glyphicon-retweet { &:before { content: \"\\e115\"; } }\n.glyphicon-shopping-cart { &:before { content: \"\\e116\"; } }\n.glyphicon-folder-close { &:before { content: \"\\e117\"; } }\n.glyphicon-folder-open { &:before { content: \"\\e118\"; } }\n.glyphicon-resize-vertical { &:before { content: \"\\e119\"; } }\n.glyphicon-resize-horizontal { &:before { content: \"\\e120\"; } }\n.glyphicon-hdd { &:before { content: \"\\e121\"; } }\n.glyphicon-bullhorn { &:before { content: \"\\e122\"; } }\n.glyphicon-bell { &:before { content: \"\\e123\"; } }\n.glyphicon-certificate { &:before { content: \"\\e124\"; } }\n.glyphicon-thumbs-up { &:before { content: \"\\e125\"; } }\n.glyphicon-thumbs-down { &:before { content: \"\\e126\"; } }\n.glyphicon-hand-right { &:before { content: \"\\e127\"; } }\n.glyphicon-hand-left { &:before { content: \"\\e128\"; } }\n.glyphicon-hand-up { &:before { content: \"\\e129\"; } }\n.glyphicon-hand-down { &:before { content: \"\\e130\"; } }\n.glyphicon-circle-arrow-right { &:before { content: \"\\e131\"; } }\n.glyphicon-circle-arrow-left { &:before { content: \"\\e132\"; } }\n.glyphicon-circle-arrow-up { &:before { content: \"\\e133\"; } }\n.glyphicon-circle-arrow-down { &:before { content: \"\\e134\"; } }\n.glyphicon-globe { &:before { content: \"\\e135\"; } }\n.glyphicon-wrench { &:before { content: \"\\e136\"; } }\n.glyphicon-tasks { &:before { content: \"\\e137\"; } }\n.glyphicon-filter { &:before { content: \"\\e138\"; } }\n.glyphicon-briefcase { &:before { content: \"\\e139\"; } }\n.glyphicon-fullscreen { &:before { content: \"\\e140\"; } }\n.glyphicon-dashboard { &:before { content: \"\\e141\"; } }\n.glyphicon-paperclip { &:before { content: \"\\e142\"; } }\n.glyphicon-heart-empty { &:before { content: \"\\e143\"; } }\n.glyphicon-link { &:before { content: \"\\e144\"; } }\n.glyphicon-phone { &:before { content: \"\\e145\"; } }\n.glyphicon-pushpin { &:before { content: \"\\e146\"; } }\n.glyphicon-usd { &:before { content: \"\\e148\"; } }\n.glyphicon-gbp { &:before { content: \"\\e149\"; } }\n.glyphicon-sort { &:before { content: \"\\e150\"; } }\n.glyphicon-sort-by-alphabet { &:before { content: \"\\e151\"; } }\n.glyphicon-sort-by-alphabet-alt { &:before { content: \"\\e152\"; } }\n.glyphicon-sort-by-order { &:before { content: \"\\e153\"; } }\n.glyphicon-sort-by-order-alt { &:before { content: \"\\e154\"; } }\n.glyphicon-sort-by-attributes { &:before { content: \"\\e155\"; } }\n.glyphicon-sort-by-attributes-alt { &:before { content: \"\\e156\"; } }\n.glyphicon-unchecked { &:before { content: \"\\e157\"; } }\n.glyphicon-expand { &:before { content: \"\\e158\"; } }\n.glyphicon-collapse-down { &:before { content: \"\\e159\"; } }\n.glyphicon-collapse-up { &:before { content: \"\\e160\"; } }\n.glyphicon-log-in { &:before { content: \"\\e161\"; } }\n.glyphicon-flash { &:before { content: \"\\e162\"; } }\n.glyphicon-log-out { &:before { content: \"\\e163\"; } }\n.glyphicon-new-window { &:before { content: \"\\e164\"; } }\n.glyphicon-record { &:before { content: \"\\e165\"; } }\n.glyphicon-save { &:before { content: \"\\e166\"; } }\n.glyphicon-open { &:before { content: \"\\e167\"; } }\n.glyphicon-saved { &:before { content: \"\\e168\"; } }\n.glyphicon-import { &:before { content: \"\\e169\"; } }\n.glyphicon-export { &:before { content: \"\\e170\"; } }\n.glyphicon-send { &:before { content: \"\\e171\"; } }\n.glyphicon-floppy-disk { &:before { content: \"\\e172\"; } }\n.glyphicon-floppy-saved { &:before { content: \"\\e173\"; } }\n.glyphicon-floppy-remove { &:before { content: \"\\e174\"; } }\n.glyphicon-floppy-save { &:before { content: \"\\e175\"; } }\n.glyphicon-floppy-open { &:before { content: \"\\e176\"; } }\n.glyphicon-credit-card { &:before { content: \"\\e177\"; } }\n.glyphicon-transfer { &:before { content: \"\\e178\"; } }\n.glyphicon-cutlery { &:before { content: \"\\e179\"; } }\n.glyphicon-header { &:before { content: \"\\e180\"; } }\n.glyphicon-compressed { &:before { content: \"\\e181\"; } }\n.glyphicon-earphone { &:before { content: \"\\e182\"; } }\n.glyphicon-phone-alt { &:before { content: \"\\e183\"; } }\n.glyphicon-tower { &:before { content: \"\\e184\"; } }\n.glyphicon-stats { &:before { content: \"\\e185\"; } }\n.glyphicon-sd-video { &:before { content: \"\\e186\"; } }\n.glyphicon-hd-video { &:before { content: \"\\e187\"; } }\n.glyphicon-subtitles { &:before { content: \"\\e188\"; } }\n.glyphicon-sound-stereo { &:before { content: \"\\e189\"; } }\n.glyphicon-sound-dolby { &:before { content: \"\\e190\"; } }\n.glyphicon-sound-5-1 { &:before { content: \"\\e191\"; } }\n.glyphicon-sound-6-1 { &:before { content: \"\\e192\"; } }\n.glyphicon-sound-7-1 { &:before { content: \"\\e193\"; } }\n.glyphicon-copyright-mark { &:before { content: \"\\e194\"; } }\n.glyphicon-registration-mark { &:before { content: \"\\e195\"; } }\n.glyphicon-cloud-download { &:before { content: \"\\e197\"; } }\n.glyphicon-cloud-upload { &:before { content: \"\\e198\"; } }\n.glyphicon-tree-conifer { &:before { content: \"\\e199\"; } }\n.glyphicon-tree-deciduous { &:before { content: \"\\e200\"; } }\n.glyphicon-cd { &:before { content: \"\\e201\"; } }\n.glyphicon-save-file { &:before { content: \"\\e202\"; } }\n.glyphicon-open-file { &:before { content: \"\\e203\"; } }\n.glyphicon-level-up { &:before { content: \"\\e204\"; } }\n.glyphicon-copy { &:before { content: \"\\e205\"; } }\n.glyphicon-paste { &:before { content: \"\\e206\"; } }\n// The following 2 Glyphicons are omitted for the time being because\n// they currently use Unicode codepoints that are outside the\n// Basic Multilingual Plane (BMP). Older buggy versions of WebKit can't handle\n// non-BMP codepoints in CSS string escapes, and thus can't display these two icons.\n// Notably, the bug affects some older versions of the Android Browser.\n// More info: https://github.com/twbs/bootstrap/issues/10106\n// .glyphicon-door { &:before { content: \"\\1f6aa\"; } }\n// .glyphicon-key { &:before { content: \"\\1f511\"; } }\n.glyphicon-alert { &:before { content: \"\\e209\"; } }\n.glyphicon-equalizer { &:before { content: \"\\e210\"; } }\n.glyphicon-king { &:before { content: \"\\e211\"; } }\n.glyphicon-queen { &:before { content: \"\\e212\"; } }\n.glyphicon-pawn { &:before { content: \"\\e213\"; } }\n.glyphicon-bishop { &:before { content: \"\\e214\"; } }\n.glyphicon-knight { &:before { content: \"\\e215\"; } }\n.glyphicon-baby-formula { &:before { content: \"\\e216\"; } }\n.glyphicon-tent { &:before { content: \"\\26fa\"; } }\n.glyphicon-blackboard { &:before { content: \"\\e218\"; } }\n.glyphicon-bed { &:before { content: \"\\e219\"; } }\n.glyphicon-apple { &:before { content: \"\\f8ff\"; } }\n.glyphicon-erase { &:before { content: \"\\e221\"; } }\n.glyphicon-hourglass { &:before { content: \"\\231b\"; } }\n.glyphicon-lamp { &:before { content: \"\\e223\"; } }\n.glyphicon-duplicate { &:before { content: \"\\e224\"; } }\n.glyphicon-piggy-bank { &:before { content: \"\\e225\"; } }\n.glyphicon-scissors { &:before { content: \"\\e226\"; } }\n.glyphicon-bitcoin { &:before { content: \"\\e227\"; } }\n.glyphicon-btc { &:before { content: \"\\e227\"; } }\n.glyphicon-xbt { &:before { content: \"\\e227\"; } }\n.glyphicon-yen { &:before { content: \"\\00a5\"; } }\n.glyphicon-jpy { &:before { content: \"\\00a5\"; } }\n.glyphicon-ruble { &:before { content: \"\\20bd\"; } }\n.glyphicon-rub { &:before { content: \"\\20bd\"; } }\n.glyphicon-scale { &:before { content: \"\\e230\"; } }\n.glyphicon-ice-lolly { &:before { content: \"\\e231\"; } }\n.glyphicon-ice-lolly-tasted { &:before { content: \"\\e232\"; } }\n.glyphicon-education { &:before { content: \"\\e233\"; } }\n.glyphicon-option-horizontal { &:before { content: \"\\e234\"; } }\n.glyphicon-option-vertical { &:before { content: \"\\e235\"; } }\n.glyphicon-menu-hamburger { &:before { content: \"\\e236\"; } }\n.glyphicon-modal-window { &:before { content: \"\\e237\"; } }\n.glyphicon-oil { &:before { content: \"\\e238\"; } }\n.glyphicon-grain { &:before { content: \"\\e239\"; } }\n.glyphicon-sunglasses { &:before { content: \"\\e240\"; } }\n.glyphicon-text-size { &:before { content: \"\\e241\"; } }\n.glyphicon-text-color { &:before { content: \"\\e242\"; } }\n.glyphicon-text-background { &:before { content: \"\\e243\"; } }\n.glyphicon-object-align-top { &:before { content: \"\\e244\"; } }\n.glyphicon-object-align-bottom { &:before { content: \"\\e245\"; } }\n.glyphicon-object-align-horizontal{ &:before { content: \"\\e246\"; } }\n.glyphicon-object-align-left { &:before { content: \"\\e247\"; } }\n.glyphicon-object-align-vertical { &:before { content: \"\\e248\"; } }\n.glyphicon-object-align-right { &:before { content: \"\\e249\"; } }\n.glyphicon-triangle-right { &:before { content: \"\\e250\"; } }\n.glyphicon-triangle-left { &:before { content: \"\\e251\"; } }\n.glyphicon-triangle-bottom { &:before { content: \"\\e252\"; } }\n.glyphicon-triangle-top { &:before { content: \"\\e253\"; } }\n.glyphicon-console { &:before { content: \"\\e254\"; } }\n.glyphicon-superscript { &:before { content: \"\\e255\"; } }\n.glyphicon-subscript { &:before { content: \"\\e256\"; } }\n.glyphicon-menu-left { &:before { content: \"\\e257\"; } }\n.glyphicon-menu-right { &:before { content: \"\\e258\"; } }\n.glyphicon-menu-down { &:before { content: \"\\e259\"; } }\n.glyphicon-menu-up { &:before { content: \"\\e260\"; } }\n","//\n// Scaffolding\n// --------------------------------------------------\n\n\n// Reset the box-sizing\n//\n// Heads up! This reset may cause conflicts with some third-party widgets.\n// For recommendations on resolving such conflicts, see\n// https://getbootstrap.com/docs/3.4/getting-started/#third-box-sizing\n* {\n .box-sizing(border-box);\n}\n*:before,\n*:after {\n .box-sizing(border-box);\n}\n\n\n// Body reset\n\nhtml {\n font-size: 10px;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\nbody {\n font-family: @font-family-base;\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @text-color;\n background-color: @body-bg;\n}\n\n// Reset fonts for relevant elements\ninput,\nbutton,\nselect,\ntextarea {\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\n\n// Links\n\na {\n color: @link-color;\n text-decoration: none;\n\n &:hover,\n &:focus {\n color: @link-hover-color;\n text-decoration: @link-hover-decoration;\n }\n\n &:focus {\n .tab-focus();\n }\n}\n\n\n// Figures\n//\n// We reset this here because previously Normalize had no `figure` margins. This\n// ensures we don't break anyone's use of the element.\n\nfigure {\n margin: 0;\n}\n\n\n// Images\n\nimg {\n vertical-align: middle;\n}\n\n// Responsive images (ensure images don't scale beyond their parents)\n.img-responsive {\n .img-responsive();\n}\n\n// Rounded corners\n.img-rounded {\n border-radius: @border-radius-large;\n}\n\n// Image thumbnails\n//\n// Heads up! This is mixin-ed into thumbnails.less for `.thumbnail`.\n.img-thumbnail {\n padding: @thumbnail-padding;\n line-height: @line-height-base;\n background-color: @thumbnail-bg;\n border: 1px solid @thumbnail-border;\n border-radius: @thumbnail-border-radius;\n .transition(all .2s ease-in-out);\n\n // Keep them at most 100% wide\n .img-responsive(inline-block);\n}\n\n// Perfect circle\n.img-circle {\n border-radius: 50%; // set radius in percents\n}\n\n\n// Horizontal rules\n\nhr {\n margin-top: @line-height-computed;\n margin-bottom: @line-height-computed;\n border: 0;\n border-top: 1px solid @hr-border;\n}\n\n\n// Only display content to screen readers\n//\n// See: https://a11yproject.com/posts/how-to-hide-content\n\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n border: 0;\n}\n\n// Use in conjunction with .sr-only to only display content when it's focused.\n// Useful for \"Skip to main content\" links; see https://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1\n// Credit: HTML5 Boilerplate\n\n.sr-only-focusable {\n &:active,\n &:focus {\n position: static;\n width: auto;\n height: auto;\n margin: 0;\n overflow: visible;\n clip: auto;\n }\n}\n\n\n// iOS \"clickable elements\" fix for role=\"button\"\n//\n// Fixes \"clickability\" issue (and more generally, the firing of events such as focus as well)\n// for traditionally non-focusable elements with role=\"button\"\n// see https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile\n\n[role=\"button\"] {\n cursor: pointer;\n}\n","// stylelint-disable indentation, property-no-vendor-prefix, selector-no-vendor-prefix\n\n// Vendor Prefixes\n//\n// All vendor mixins are deprecated as of v3.2.0 due to the introduction of\n// Autoprefixer in our Gruntfile. They have been removed in v4.\n\n// - Animations\n// - Backface visibility\n// - Box shadow\n// - Box sizing\n// - Content columns\n// - Hyphens\n// - Placeholder text\n// - Transformations\n// - Transitions\n// - User Select\n\n\n// Animations\n.animation(@animation) {\n -webkit-animation: @animation;\n -o-animation: @animation;\n animation: @animation;\n}\n.animation-name(@name) {\n -webkit-animation-name: @name;\n animation-name: @name;\n}\n.animation-duration(@duration) {\n -webkit-animation-duration: @duration;\n animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n -webkit-animation-timing-function: @timing-function;\n animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n -webkit-animation-delay: @delay;\n animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n -webkit-animation-iteration-count: @iteration-count;\n animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n -webkit-animation-direction: @direction;\n animation-direction: @direction;\n}\n.animation-fill-mode(@fill-mode) {\n -webkit-animation-fill-mode: @fill-mode;\n animation-fill-mode: @fill-mode;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n\n.backface-visibility(@visibility) {\n -webkit-backface-visibility: @visibility;\n -moz-backface-visibility: @visibility;\n backface-visibility: @visibility;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support it.\n\n.box-shadow(@shadow) {\n -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n box-shadow: @shadow;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n -webkit-box-sizing: @boxmodel;\n -moz-box-sizing: @boxmodel;\n box-sizing: @boxmodel;\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n -webkit-column-count: @column-count;\n -moz-column-count: @column-count;\n column-count: @column-count;\n -webkit-column-gap: @column-gap;\n -moz-column-gap: @column-gap;\n column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n -webkit-hyphens: @mode;\n -moz-hyphens: @mode;\n -ms-hyphens: @mode; // IE10+\n -o-hyphens: @mode;\n hyphens: @mode;\n word-wrap: break-word;\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n // Firefox\n &::-moz-placeholder {\n color: @color;\n opacity: 1; // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526\n }\n &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+\n &::-webkit-input-placeholder { color: @color; } // Safari and Chrome\n}\n\n// Transformations\n.scale(@ratio) {\n -webkit-transform: scale(@ratio);\n -ms-transform: scale(@ratio); // IE9 only\n -o-transform: scale(@ratio);\n transform: scale(@ratio);\n}\n.scale(@ratioX; @ratioY) {\n -webkit-transform: scale(@ratioX, @ratioY);\n -ms-transform: scale(@ratioX, @ratioY); // IE9 only\n -o-transform: scale(@ratioX, @ratioY);\n transform: scale(@ratioX, @ratioY);\n}\n.scaleX(@ratio) {\n -webkit-transform: scaleX(@ratio);\n -ms-transform: scaleX(@ratio); // IE9 only\n -o-transform: scaleX(@ratio);\n transform: scaleX(@ratio);\n}\n.scaleY(@ratio) {\n -webkit-transform: scaleY(@ratio);\n -ms-transform: scaleY(@ratio); // IE9 only\n -o-transform: scaleY(@ratio);\n transform: scaleY(@ratio);\n}\n.skew(@x; @y) {\n -webkit-transform: skewX(@x) skewY(@y);\n -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n -o-transform: skewX(@x) skewY(@y);\n transform: skewX(@x) skewY(@y);\n}\n.translate(@x; @y) {\n -webkit-transform: translate(@x, @y);\n -ms-transform: translate(@x, @y); // IE9 only\n -o-transform: translate(@x, @y);\n transform: translate(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n -webkit-transform: translate3d(@x, @y, @z);\n transform: translate3d(@x, @y, @z);\n}\n.rotate(@degrees) {\n -webkit-transform: rotate(@degrees);\n -ms-transform: rotate(@degrees); // IE9 only\n -o-transform: rotate(@degrees);\n transform: rotate(@degrees);\n}\n.rotateX(@degrees) {\n -webkit-transform: rotateX(@degrees);\n -ms-transform: rotateX(@degrees); // IE9 only\n -o-transform: rotateX(@degrees);\n transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n -webkit-transform: rotateY(@degrees);\n -ms-transform: rotateY(@degrees); // IE9 only\n -o-transform: rotateY(@degrees);\n transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n -webkit-perspective: @perspective;\n -moz-perspective: @perspective;\n perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n -webkit-perspective-origin: @perspective;\n -moz-perspective-origin: @perspective;\n perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n -webkit-transform-origin: @origin;\n -moz-transform-origin: @origin;\n -ms-transform-origin: @origin; // IE9 only\n transform-origin: @origin;\n}\n\n\n// Transitions\n\n.transition(@transition) {\n -webkit-transition: @transition;\n -o-transition: @transition;\n transition: @transition;\n}\n.transition-property(@transition-property) {\n -webkit-transition-property: @transition-property;\n transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n -webkit-transition-delay: @transition-delay;\n transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n -webkit-transition-duration: @transition-duration;\n transition-duration: @transition-duration;\n}\n.transition-timing-function(@timing-function) {\n -webkit-transition-timing-function: @timing-function;\n transition-timing-function: @timing-function;\n}\n.transition-transform(@transition) {\n -webkit-transition: -webkit-transform @transition;\n -moz-transition: -moz-transform @transition;\n -o-transition: -o-transform @transition;\n transition: transform @transition;\n}\n\n\n// User select\n// For selecting text on the page\n\n.user-select(@select) {\n -webkit-user-select: @select;\n -moz-user-select: @select;\n -ms-user-select: @select; // IE10+\n user-select: @select;\n}\n","// WebKit-style focus\n\n.tab-focus() {\n // WebKit-specific. Other browsers will keep their default outline style.\n // (Initially tried to also force default via `outline: initial`,\n // but that seems to erroneously remove the outline in Firefox altogether.)\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\n","// stylelint-disable media-feature-name-no-vendor-prefix, media-feature-parentheses-space-inside, media-feature-name-no-unknown, indentation, at-rule-name-space-after\n\n// Responsive image\n//\n// Keep images from scaling beyond the width of their parents.\n.img-responsive(@display: block) {\n display: @display;\n max-width: 100%; // Part 1: Set a maximum relative to the parent\n height: auto; // Part 2: Scale the height according to the width, otherwise you get stretching\n}\n\n\n// Retina image\n//\n// Short retina mixin for setting background-image and -size. Note that the\n// spelling of `min--moz-device-pixel-ratio` is intentional.\n.img-retina(@file-1x; @file-2x; @width-1x; @height-1x) {\n background-image: url(\"@{file-1x}\");\n\n @media\n only screen and (-webkit-min-device-pixel-ratio: 2),\n only screen and ( min--moz-device-pixel-ratio: 2),\n only screen and ( -o-min-device-pixel-ratio: 2/1),\n only screen and ( min-device-pixel-ratio: 2),\n only screen and ( min-resolution: 192dpi),\n only screen and ( min-resolution: 2dppx) {\n background-image: url(\"@{file-2x}\");\n background-size: @width-1x @height-1x;\n }\n}\n","// stylelint-disable selector-list-comma-newline-after, selector-no-qualifying-type\n\n//\n// Typography\n// --------------------------------------------------\n\n\n// Headings\n// -------------------------\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n font-family: @headings-font-family;\n font-weight: @headings-font-weight;\n line-height: @headings-line-height;\n color: @headings-color;\n\n small,\n .small {\n font-weight: 400;\n line-height: 1;\n color: @headings-small-color;\n }\n}\n\nh1, .h1,\nh2, .h2,\nh3, .h3 {\n margin-top: @line-height-computed;\n margin-bottom: (@line-height-computed / 2);\n\n small,\n .small {\n font-size: 65%;\n }\n}\nh4, .h4,\nh5, .h5,\nh6, .h6 {\n margin-top: (@line-height-computed / 2);\n margin-bottom: (@line-height-computed / 2);\n\n small,\n .small {\n font-size: 75%;\n }\n}\n\nh1, .h1 { font-size: @font-size-h1; }\nh2, .h2 { font-size: @font-size-h2; }\nh3, .h3 { font-size: @font-size-h3; }\nh4, .h4 { font-size: @font-size-h4; }\nh5, .h5 { font-size: @font-size-h5; }\nh6, .h6 { font-size: @font-size-h6; }\n\n\n// Body text\n// -------------------------\n\np {\n margin: 0 0 (@line-height-computed / 2);\n}\n\n.lead {\n margin-bottom: @line-height-computed;\n font-size: floor((@font-size-base * 1.15));\n font-weight: 300;\n line-height: 1.4;\n\n @media (min-width: @screen-sm-min) {\n font-size: (@font-size-base * 1.5);\n }\n}\n\n\n// Emphasis & misc\n// -------------------------\n\n// Ex: (12px small font / 14px base font) * 100% = about 85%\nsmall,\n.small {\n font-size: floor((100% * @font-size-small / @font-size-base));\n}\n\nmark,\n.mark {\n padding: .2em;\n background-color: @state-warning-bg;\n}\n\n// Alignment\n.text-left { text-align: left; }\n.text-right { text-align: right; }\n.text-center { text-align: center; }\n.text-justify { text-align: justify; }\n.text-nowrap { white-space: nowrap; }\n\n// Transformation\n.text-lowercase { text-transform: lowercase; }\n.text-uppercase { text-transform: uppercase; }\n.text-capitalize { text-transform: capitalize; }\n\n// Contextual colors\n.text-muted {\n color: @text-muted;\n}\n.text-primary {\n .text-emphasis-variant(@brand-primary);\n}\n.text-success {\n .text-emphasis-variant(@state-success-text);\n}\n.text-info {\n .text-emphasis-variant(@state-info-text);\n}\n.text-warning {\n .text-emphasis-variant(@state-warning-text);\n}\n.text-danger {\n .text-emphasis-variant(@state-danger-text);\n}\n\n// Contextual backgrounds\n// For now we'll leave these alongside the text classes until v4 when we can\n// safely shift things around (per SemVer rules).\n.bg-primary {\n // Given the contrast here, this is the only class to have its color inverted\n // automatically.\n color: #fff;\n .bg-variant(@brand-primary);\n}\n.bg-success {\n .bg-variant(@state-success-bg);\n}\n.bg-info {\n .bg-variant(@state-info-bg);\n}\n.bg-warning {\n .bg-variant(@state-warning-bg);\n}\n.bg-danger {\n .bg-variant(@state-danger-bg);\n}\n\n\n// Page header\n// -------------------------\n\n.page-header {\n padding-bottom: ((@line-height-computed / 2) - 1);\n margin: (@line-height-computed * 2) 0 @line-height-computed;\n border-bottom: 1px solid @page-header-border-color;\n}\n\n\n// Lists\n// -------------------------\n\n// Unordered and Ordered lists\nul,\nol {\n margin-top: 0;\n margin-bottom: (@line-height-computed / 2);\n ul,\n ol {\n margin-bottom: 0;\n }\n}\n\n// List options\n\n// Unstyled keeps list items block level, just removes default browser padding and list-style\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n\n// Inline turns list items into inline-block\n.list-inline {\n .list-unstyled();\n margin-left: -5px;\n\n > li {\n display: inline-block;\n padding-right: 5px;\n padding-left: 5px;\n }\n}\n\n// Description Lists\ndl {\n margin-top: 0; // Remove browser default\n margin-bottom: @line-height-computed;\n}\ndt,\ndd {\n line-height: @line-height-base;\n}\ndt {\n font-weight: 700;\n}\ndd {\n margin-left: 0; // Undo browser default\n}\n\n// Horizontal description lists\n//\n// Defaults to being stacked without any of the below styles applied, until the\n// grid breakpoint is reached (default of ~768px).\n\n.dl-horizontal {\n dd {\n &:extend(.clearfix all); // Clear the floated `dt` if an empty `dd` is present\n }\n\n @media (min-width: @dl-horizontal-breakpoint) {\n dt {\n float: left;\n width: (@dl-horizontal-offset - 20);\n clear: left;\n text-align: right;\n .text-overflow();\n }\n dd {\n margin-left: @dl-horizontal-offset;\n }\n }\n}\n\n\n// Misc\n// -------------------------\n\n// Abbreviations and acronyms\n// Add data-* attribute to help out our tooltip plugin, per https://github.com/twbs/bootstrap/issues/5257\nabbr[title],\nabbr[data-original-title] {\n cursor: help;\n}\n\n.initialism {\n font-size: 90%;\n .text-uppercase();\n}\n\n// Blockquotes\nblockquote {\n padding: (@line-height-computed / 2) @line-height-computed;\n margin: 0 0 @line-height-computed;\n font-size: @blockquote-font-size;\n border-left: 5px solid @blockquote-border-color;\n\n p,\n ul,\n ol {\n &:last-child {\n margin-bottom: 0;\n }\n }\n\n // Note: Deprecated small and .small as of v3.1.0\n // Context: https://github.com/twbs/bootstrap/issues/11660\n footer,\n small,\n .small {\n display: block;\n font-size: 80%; // back to default font-size\n line-height: @line-height-base;\n color: @blockquote-small-color;\n\n &:before {\n content: \"\\2014 \\00A0\"; // em dash, nbsp\n }\n }\n}\n\n// Opposite alignment of blockquote\n//\n// Heads up: `blockquote.pull-right` has been deprecated as of v3.1.0.\n.blockquote-reverse,\nblockquote.pull-right {\n padding-right: 15px;\n padding-left: 0;\n text-align: right;\n border-right: 5px solid @blockquote-border-color;\n border-left: 0;\n\n // Account for citation\n footer,\n small,\n .small {\n &:before { content: \"\"; }\n &:after {\n content: \"\\00A0 \\2014\"; // nbsp, em dash\n }\n }\n}\n\n// Addresses\naddress {\n margin-bottom: @line-height-computed;\n font-style: normal;\n line-height: @line-height-base;\n}\n","// Typography\n\n.text-emphasis-variant(@color) {\n color: @color;\n a&:hover,\n a&:focus {\n color: darken(@color, 10%);\n }\n}\n","// Contextual backgrounds\n\n.bg-variant(@color) {\n background-color: @color;\n a&:hover,\n a&:focus {\n background-color: darken(@color, 10%);\n }\n}\n","// Text overflow\n// Requires inline-block or block for proper styling\n\n.text-overflow() {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n","//\n// Code (inline and block)\n// --------------------------------------------------\n\n\n// Inline and block code styles\ncode,\nkbd,\npre,\nsamp {\n font-family: @font-family-monospace;\n}\n\n// Inline code\ncode {\n padding: 2px 4px;\n font-size: 90%;\n color: @code-color;\n background-color: @code-bg;\n border-radius: @border-radius-base;\n}\n\n// User input typically entered via keyboard\nkbd {\n padding: 2px 4px;\n font-size: 90%;\n color: @kbd-color;\n background-color: @kbd-bg;\n border-radius: @border-radius-small;\n box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);\n\n kbd {\n padding: 0;\n font-size: 100%;\n font-weight: 700;\n box-shadow: none;\n }\n}\n\n// Blocks of code\npre {\n display: block;\n padding: ((@line-height-computed - 1) / 2);\n margin: 0 0 (@line-height-computed / 2);\n font-size: (@font-size-base - 1); // 14px to 13px\n line-height: @line-height-base;\n color: @pre-color;\n word-break: break-all;\n word-wrap: break-word;\n background-color: @pre-bg;\n border: 1px solid @pre-border-color;\n border-radius: @border-radius-base;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n padding: 0;\n font-size: inherit;\n color: inherit;\n white-space: pre-wrap;\n background-color: transparent;\n border-radius: 0;\n }\n}\n\n// Enable scrollable blocks of code\n.pre-scrollable {\n max-height: @pre-scrollable-max-height;\n overflow-y: scroll;\n}\n","//\n// Grid system\n// --------------------------------------------------\n\n\n// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n.container {\n .container-fixed();\n\n @media (min-width: @screen-sm-min) {\n width: @container-sm;\n }\n @media (min-width: @screen-md-min) {\n width: @container-md;\n }\n @media (min-width: @screen-lg-min) {\n width: @container-lg;\n }\n}\n\n\n// Fluid container\n//\n// Utilizes the mixin meant for fixed width containers, but without any defined\n// width for fluid, full width layouts.\n\n.container-fluid {\n .container-fixed();\n}\n\n\n// Row\n//\n// Rows contain and clear the floats of your columns.\n\n.row {\n .make-row();\n}\n\n.row-no-gutters {\n margin-right: 0;\n margin-left: 0;\n\n [class*=\"col-\"] {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n.make-grid-columns();\n\n\n// Extra small grid\n//\n// Columns, offsets, pushes, and pulls for extra small devices like\n// smartphones.\n\n.make-grid(xs);\n\n\n// Small grid\n//\n// Columns, offsets, pushes, and pulls for the small device range, from phones\n// to tablets.\n\n@media (min-width: @screen-sm-min) {\n .make-grid(sm);\n}\n\n\n// Medium grid\n//\n// Columns, offsets, pushes, and pulls for the desktop device range.\n\n@media (min-width: @screen-md-min) {\n .make-grid(md);\n}\n\n\n// Large grid\n//\n// Columns, offsets, pushes, and pulls for the large desktop device range.\n\n@media (min-width: @screen-lg-min) {\n .make-grid(lg);\n}\n","// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n// Centered container element\n.container-fixed(@gutter: @grid-gutter-width) {\n padding-right: ceil((@gutter / 2));\n padding-left: floor((@gutter / 2));\n margin-right: auto;\n margin-left: auto;\n &:extend(.clearfix all);\n}\n\n// Creates a wrapper for a series of columns\n.make-row(@gutter: @grid-gutter-width) {\n margin-right: floor((@gutter / -2));\n margin-left: ceil((@gutter / -2));\n &:extend(.clearfix all);\n}\n\n// Generate the extra small columns\n.make-xs-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n float: left;\n width: percentage((@columns / @grid-columns));\n min-height: 1px;\n padding-right: (@gutter / 2);\n padding-left: (@gutter / 2);\n}\n.make-xs-column-offset(@columns) {\n margin-left: percentage((@columns / @grid-columns));\n}\n.make-xs-column-push(@columns) {\n left: percentage((@columns / @grid-columns));\n}\n.make-xs-column-pull(@columns) {\n right: percentage((@columns / @grid-columns));\n}\n\n// Generate the small columns\n.make-sm-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-right: (@gutter / 2);\n padding-left: (@gutter / 2);\n\n @media (min-width: @screen-sm-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-offset(@columns) {\n @media (min-width: @screen-sm-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-push(@columns) {\n @media (min-width: @screen-sm-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-pull(@columns) {\n @media (min-width: @screen-sm-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n// Generate the medium columns\n.make-md-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-right: (@gutter / 2);\n padding-left: (@gutter / 2);\n\n @media (min-width: @screen-md-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-offset(@columns) {\n @media (min-width: @screen-md-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-push(@columns) {\n @media (min-width: @screen-md-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-pull(@columns) {\n @media (min-width: @screen-md-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n// Generate the large columns\n.make-lg-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-right: (@gutter / 2);\n padding-left: (@gutter / 2);\n\n @media (min-width: @screen-lg-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-offset(@columns) {\n @media (min-width: @screen-lg-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-push(@columns) {\n @media (min-width: @screen-lg-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-pull(@columns) {\n @media (min-width: @screen-lg-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n","// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `@grid-columns`.\n\n.make-grid-columns() {\n // Common styles for all sizes of grid columns, widths 1-12\n .col(@index) { // initial\n @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n .col((@index + 1), @item);\n }\n .col(@index, @list) when (@index =< @grid-columns) { // general; \"=<\" isn't a typo\n @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n .col((@index + 1), ~\"@{list}, @{item}\");\n }\n .col(@index, @list) when (@index > @grid-columns) { // terminal\n @{list} {\n position: relative;\n // Prevent columns from collapsing when empty\n min-height: 1px;\n // Inner gutter via padding\n padding-right: floor((@grid-gutter-width / 2));\n padding-left: ceil((@grid-gutter-width / 2));\n }\n }\n .col(1); // kickstart it\n}\n\n.float-grid-columns(@class) {\n .col(@index) { // initial\n @item: ~\".col-@{class}-@{index}\";\n .col((@index + 1), @item);\n }\n .col(@index, @list) when (@index =< @grid-columns) { // general\n @item: ~\".col-@{class}-@{index}\";\n .col((@index + 1), ~\"@{list}, @{item}\");\n }\n .col(@index, @list) when (@index > @grid-columns) { // terminal\n @{list} {\n float: left;\n }\n }\n .col(1); // kickstart it\n}\n\n.calc-grid-column(@index, @class, @type) when (@type = width) and (@index > 0) {\n .col-@{class}-@{index} {\n width: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = push) and (@index > 0) {\n .col-@{class}-push-@{index} {\n left: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = push) and (@index = 0) {\n .col-@{class}-push-0 {\n left: auto;\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index > 0) {\n .col-@{class}-pull-@{index} {\n right: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index = 0) {\n .col-@{class}-pull-0 {\n right: auto;\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = offset) {\n .col-@{class}-offset-@{index} {\n margin-left: percentage((@index / @grid-columns));\n }\n}\n\n// Basic looping in LESS\n.loop-grid-columns(@index, @class, @type) when (@index >= 0) {\n .calc-grid-column(@index, @class, @type);\n // next iteration\n .loop-grid-columns((@index - 1), @class, @type);\n}\n\n// Create grid for specific class\n.make-grid(@class) {\n .float-grid-columns(@class);\n .loop-grid-columns(@grid-columns, @class, width);\n .loop-grid-columns(@grid-columns, @class, pull);\n .loop-grid-columns(@grid-columns, @class, push);\n .loop-grid-columns(@grid-columns, @class, offset);\n}\n","// stylelint-disable selector-max-type, selector-max-compound-selectors, selector-no-qualifying-type\n\n//\n// Tables\n// --------------------------------------------------\n\n\ntable {\n background-color: @table-bg;\n\n // Table cell sizing\n //\n // Reset default table behavior\n\n col[class*=\"col-\"] {\n position: static; // Prevent border hiding in Firefox and IE9-11 (see https://github.com/twbs/bootstrap/issues/11623)\n display: table-column;\n float: none;\n }\n\n td,\n th {\n &[class*=\"col-\"] {\n position: static; // Prevent border hiding in Firefox and IE9-11 (see https://github.com/twbs/bootstrap/issues/11623)\n display: table-cell;\n float: none;\n }\n }\n}\n\ncaption {\n padding-top: @table-cell-padding;\n padding-bottom: @table-cell-padding;\n color: @text-muted;\n text-align: left;\n}\n\nth {\n text-align: left;\n}\n\n\n// Baseline styles\n\n.table {\n width: 100%;\n max-width: 100%;\n margin-bottom: @line-height-computed;\n // Cells\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n padding: @table-cell-padding;\n line-height: @line-height-base;\n vertical-align: top;\n border-top: 1px solid @table-border-color;\n }\n }\n }\n // Bottom align for column headings\n > thead > tr > th {\n vertical-align: bottom;\n border-bottom: 2px solid @table-border-color;\n }\n // Remove top border from thead by default\n > caption + thead,\n > colgroup + thead,\n > thead:first-child {\n > tr:first-child {\n > th,\n > td {\n border-top: 0;\n }\n }\n }\n // Account for multiple tbody instances\n > tbody + tbody {\n border-top: 2px solid @table-border-color;\n }\n\n // Nesting\n .table {\n background-color: @body-bg;\n }\n}\n\n\n// Condensed table w/ half padding\n\n.table-condensed {\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n padding: @table-condensed-cell-padding;\n }\n }\n }\n}\n\n\n// Bordered version\n//\n// Add borders all around the table and between all the columns.\n\n.table-bordered {\n border: 1px solid @table-border-color;\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n border: 1px solid @table-border-color;\n }\n }\n }\n > thead > tr {\n > th,\n > td {\n border-bottom-width: 2px;\n }\n }\n}\n\n\n// Zebra-striping\n//\n// Default zebra-stripe styles (alternating gray and transparent backgrounds)\n\n.table-striped {\n > tbody > tr:nth-of-type(odd) {\n background-color: @table-bg-accent;\n }\n}\n\n\n// Hover effect\n//\n// Placed here since it has to come after the potential zebra striping\n\n.table-hover {\n > tbody > tr:hover {\n background-color: @table-bg-hover;\n }\n}\n\n\n// Table backgrounds\n//\n// Exact selectors below required to override `.table-striped` and prevent\n// inheritance to nested tables.\n\n// Generate the contextual variants\n.table-row-variant(active; @table-bg-active);\n.table-row-variant(success; @state-success-bg);\n.table-row-variant(info; @state-info-bg);\n.table-row-variant(warning; @state-warning-bg);\n.table-row-variant(danger; @state-danger-bg);\n\n\n// Responsive tables\n//\n// Wrap your tables in `.table-responsive` and we'll make them mobile friendly\n// by enabling horizontal scrolling. Only applies <768px. Everything above that\n// will display normally.\n\n.table-responsive {\n min-height: .01%; // Workaround for IE9 bug (see https://github.com/twbs/bootstrap/issues/14837)\n overflow-x: auto;\n\n @media screen and (max-width: @screen-xs-max) {\n width: 100%;\n margin-bottom: (@line-height-computed * .75);\n overflow-y: hidden;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n border: 1px solid @table-border-color;\n\n // Tighten up spacing\n > .table {\n margin-bottom: 0;\n\n // Ensure the content doesn't wrap\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n white-space: nowrap;\n }\n }\n }\n }\n\n // Special overrides for the bordered tables\n > .table-bordered {\n border: 0;\n\n // Nuke the appropriate borders so that the parent can handle them\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th:first-child,\n > td:first-child {\n border-left: 0;\n }\n > th:last-child,\n > td:last-child {\n border-right: 0;\n }\n }\n }\n\n // Only nuke the last row's bottom-border in `tbody` and `tfoot` since\n // chances are there will be only one `tr` in a `thead` and that would\n // remove the border altogether.\n > tbody,\n > tfoot {\n > tr:last-child {\n > th,\n > td {\n border-bottom: 0;\n }\n }\n }\n\n }\n }\n}\n","// Tables\n\n.table-row-variant(@state; @background) {\n // Exact selectors below required to override `.table-striped` and prevent\n // inheritance to nested tables.\n .table > thead > tr,\n .table > tbody > tr,\n .table > tfoot > tr {\n > td.@{state},\n > th.@{state},\n &.@{state} > td,\n &.@{state} > th {\n background-color: @background;\n }\n }\n\n // Hover states for `.table-hover`\n // Note: this is not available for cells or rows within `thead` or `tfoot`.\n .table-hover > tbody > tr {\n > td.@{state}:hover,\n > th.@{state}:hover,\n &.@{state}:hover > td,\n &:hover > .@{state},\n &.@{state}:hover > th {\n background-color: darken(@background, 5%);\n }\n }\n}\n","// stylelint-disable selector-no-qualifying-type, property-no-vendor-prefix, media-feature-name-no-vendor-prefix\n\n//\n// Forms\n// --------------------------------------------------\n\n\n// Normalize non-controls\n//\n// Restyle and baseline non-control form elements.\n\nfieldset {\n // Chrome and Firefox set a `min-width: min-content;` on fieldsets,\n // so we reset that to ensure it behaves more like a standard block element.\n // See https://github.com/twbs/bootstrap/issues/12359.\n min-width: 0;\n padding: 0;\n margin: 0;\n border: 0;\n}\n\nlegend {\n display: block;\n width: 100%;\n padding: 0;\n margin-bottom: @line-height-computed;\n font-size: (@font-size-base * 1.5);\n line-height: inherit;\n color: @legend-color;\n border: 0;\n border-bottom: 1px solid @legend-border-color;\n}\n\nlabel {\n display: inline-block;\n max-width: 100%; // Force IE8 to wrap long content (see https://github.com/twbs/bootstrap/issues/13141)\n margin-bottom: 5px;\n font-weight: 700;\n}\n\n\n// Normalize form controls\n//\n// While most of our form styles require extra classes, some basic normalization\n// is required to ensure optimum display with or without those classes to better\n// address browser inconsistencies.\n\ninput[type=\"search\"] {\n // Override content-box in Normalize (* isn't specific enough)\n .box-sizing(border-box);\n\n // Search inputs in iOS\n //\n // This overrides the extra rounded corners on search inputs in iOS so that our\n // `.form-control` class can properly style them. Note that this cannot simply\n // be added to `.form-control` as it's not specific enough. For details, see\n // https://github.com/twbs/bootstrap/issues/11586.\n -webkit-appearance: none;\n appearance: none;\n}\n\n// Position radios and checkboxes better\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n margin: 4px 0 0;\n margin-top: 1px \\9; // IE8-9\n line-height: normal;\n\n // Apply same disabled cursor tweak as for inputs\n // Some special care is needed because